Skip to content

Instantly share code, notes, and snippets.

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

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

Select an option

Save blaflamme/d32e8ed8452a8682228e 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(
route_name='pets.collection',
renderer='json'
)
class PetCollectionViews(object):
def __init__(self, request):
self.request = request
@view_config(request_method='GET')
def collection(self):
return {'pets': PETS}
@view_config(request_method='POST')
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_defaults(
route_name='pets.item',
renderer='json'
)
class PetItemViews(object):
def __init__(self, request):
self.request = request
self.id = int(self.request.matchdict.get('pet_id', 0))
self.pet = self._get_pet(self.id)
def _get_pet(self, id):
return next(ifilter(lambda x: x['id']==id, PETS), None)
@view_config(request_method='GET')
def read(self):
if not self.pet:
return {'success': False}
return {'pet': self.pet}
@view_config(request_method='PUT')
def update(self):
if not self.pet:
return {'success': False}
params = self.request.params.copy()
self.pet.update(dict(self.request.params))
return {'pet': self.pet}
@view_config(request_method='DELETE')
def delete(self):
if not self.pet:
return {'success': False}
PETS.remove(self.pet)
return {'success': True}
if __name__ == '__main__':
config = Configurator()
config.add_route('pets.collection', '/pets')
config.add_route('pets.item', '/pets/{pet_id}')
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