Source code for opennode.oms.endpoint.httprest.base

from grokcore.component import Adapter, implements, baseclass
from grokcore.security import require
from zope.interface import Interface


class IHttpRestView(Interface):
    def render(request):
        pass

    def render_recursive(request, depth):
        pass

    def rw_transaction(request):
        """Return true if we this request should be committed"""


class IHttpRestSubViewFactory(Interface):
    def resolve(path):
        """Resolve a view for a given sub path"""


[docs]class HttpRestView(Adapter): implements(IHttpRestView) baseclass() require('rest') __builtin_attributes__ = ['id', 'children']
[docs] def filter_attributes(self, request, data): """Handle the filtering of attributes according to the 'attrs' parameter in the request""" attrs = request.args.get('attrs', [''])[0] if attrs: filtered_data = {} for a in attrs.decode('utf-8').split(',') + self.__builtin_attributes__: if a in data: filtered_data[a] = data[a] return filtered_data return data
[docs] def render_recursive(self, request, depth): for method in ('render_' + request.method, 'render'): if hasattr(self, method): return self.filter_attributes(request, getattr(self, method)(request)) raise NotImplemented("method %s not implemented\n" % request.method)
[docs] def render_OPTIONS(self, request): all_methods = ['GET', 'POST', 'PUT', 'DELETE', 'HEAD'] has_methods = [m for m in all_methods if hasattr(self, 'render_%s' % m)] + ['OPTIONS'] request.setHeader('Allow', ', '.join(has_methods)) from opennode.oms.endpoint.httprest.root import EmptyResponse return EmptyResponse
[docs] def rw_transaction(self, request): return request.method != 'GET'

This Page