pyramid_skue
is a library for builidn REST API services on top of Pyramid framework.
Requires Pyramid >= 1.5a2
Install with pip:
pip install pyramid_skue
or using easy_install
:
easy_install pyramid_skue
Create api
python package inside your main project package.
Populate api/resourses.py
with the defenition of resource:
from pyramid_skue.rest.api import ResourceDescription from pyramid_skue.rest.api import HttpMethodDescription from pyramid_skue.rest.api import HttpParameterDescription from pyramid_skue.http import CommonResponse from pyramid_skue.rest.resources import DocumentResource from .response import MessageResourceJson class MessageResource(DocumentResource): """Represents resource for readin/creating messages.""" # Resource definition def describe_resource(self): """Self description. """ description = 'Author of the message' author_param = HttpParameterDescription( 'author', 'string', is_required=True, description=description) description = 'Title of the message' title_param = HttpParameterDescription( 'title', 'string', is_required=True, description=description) description = 'Title of the message (optional)' title_optional_param = HttpParameterDescription( 'title', 'string', is_required=False, description=description) description = 'Message body' body_param = HttpParameterDescription( 'body', 'string', is_required=True, description=description) description = "Get existing messages" get_method = HttpMethodDescription( 'GET', parameters=[title_optional_param], description=description) description = "Post message" post_method = HttpMethodDescription( 'POST', parameters=[author_param, title_param, body_param], description=description) description = "Create/Get messages" resource = ResourceDescription( 'MessageResource', url="/api/message", methods=[get_method, post_method], description=description) return resource def read_resource(self): """ Return messages. Can be filtered by title. Assuming that ``storage`` is some database you're using. """ title = self.payload.get('title') if title: messages = storage.filter(title).all() else: messages = storage.all() body = MessageResourceJson(messages) return CommonResponse.success(body) def create_resource(self): """Create message. ``storage`` is some hypothetical database. """ author = self.payload.get('author') title = self.payload.get('title') body = self.payload.get('body') message_id = storage.create_message(author=author, title=title, body=body) resource_uri = self.get_resoruce_uri(message_id) return CommonResponse.resource_created(resource_uri)
Then add api/response.py
:
from pyramid_skue.json.utils import ResourceJSONRepresentation class MessageResourceJson(ResourceJSONRepresentation): """Represents a JSON response for MessageResource.""" def __init__(self, messages): ResourceJSONRepresentation.__init__(self, 'MessageResource') self.objects = [] for message in messages: self.objects.append({ 'author': message.author, 'title': message.title, 'body': message.body})
Now register the views in your __init__.py
:
config.add_route('api-message', '/api/message') config.add_view('your_app.api.resources.MessageResource', route_name='api-message', renderer='string', permission='view', # whatever permission you like check_csrf=True)
It's better to secure your views agains CSRF attacs, look at the pyramid's documentation.
The project is maintained by Cyril Panshine (@CyrilPanshine). Bug reports and pull requests are very much welcomed!