Skip to content

Instantly share code, notes, and snippets.

@blaflamme
Created March 6, 2015 01:13
Show Gist options
  • Select an option

  • Save blaflamme/0bec289ab8788ad79673 to your computer and use it in GitHub Desktop.

Select an option

Save blaflamme/0bec289ab8788ad79673 to your computer and use it in GitHub Desktop.
from __future__ import unicode_literals
from itertools import ifilter
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config, view_defaults
from wsgiref.simple_server import make_server
PETS = [
{
'id': 1,
'name': 'Xhyko',
'type': 'cat'
},
{
'id': 2,
'name': 'Mieu',
'type': 'cat'
},
{
'id': 3,
'name': 'Aruk',
'type': 'dog'
}
]
NEXT_ID = 4
@view_defaults(renderer='json')
class PetViews(object):
def __init__(self, request):
self.request = request
self.id = int(self.request.matchdict.get('pet_id', 0))
def _get_pet(self, id):
return next(ifilter(lambda x: x['id']==id, PETS), None)
@view_config(route_name='pets.list')
def list(self):
return {'pets': PETS}
@view_config(route_name='pets.create')
def create(self):
pet = dict(self.request.params.copy())
pet['id'] = self.request.registry.next_id
self.request.registry.next_id += 1
PETS.append(pet)
return {'pet': PETS[-1]}
@view_config(route_name='pets.read')
def read(self):
pet = self._get_pet(self.id)
if not pet:
return {'success': False}
return {'pet': pet}
@view_config(route_name='pets.update')
def update(self):
pet = self._get_pet(self.id)
if not pet:
return {'success': False}
params = self.request.params.copy()
pet.update(dict(self.request.params))
return {'pet': pet}
@view_config(route_name='pets.delete')
def delete(self):
pet = self._get_pet(self.id)
if not pet:
return {'success': False}
PETS.remove(pet)
return {'success': True}
if __name__ == '__main__':
config = Configurator()
config.add_route(
'pets.list',
'/pets',
request_method='GET'
)
config.add_route(
'pets.create',
'/pets',
request_method='POST'
)
config.add_route(
'pets.read',
'/pets/{pet_id}',
request_method='GET'
)
config.add_route(
'pets.update',
'/pets/{pet_id}',
request_method='PUT'
)
config.add_route(
'pets.delete',
'/pets/{pet_id}',
request_method='DELETE'
)
config.scan()
config.registry.next_id = NEXT_ID
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment