Start working on adding protocols when used as a cornice complement
This commit is contained in:
parent
e4b852292f
commit
21ea8a9b17
@ -14,6 +14,7 @@ And use it::
|
|||||||
def get_hello(who=u'World'):
|
def get_hello(who=u'World'):
|
||||||
return Message(text='Hello %s' % who)
|
return Message(text='Hello %s' % who)
|
||||||
"""
|
"""
|
||||||
|
from __future__ import absolute_import
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import xml.etree.ElementTree as et
|
import xml.etree.ElementTree as et
|
||||||
@ -76,15 +77,38 @@ def wsexpose(*args, **kwargs):
|
|||||||
request.override_renderer = 'wsmejson'
|
request.override_renderer = 'wsmejson'
|
||||||
elif 'text/xml' in request.headers['Accept']:
|
elif 'text/xml' in request.headers['Accept']:
|
||||||
request.override_renderer = 'wsmexml'
|
request.override_renderer = 'wsmexml'
|
||||||
|
else:
|
||||||
|
request.override_renderer = 'wsmejson'
|
||||||
return {
|
return {
|
||||||
'datatype': funcdef.return_type,
|
'datatype': funcdef.return_type,
|
||||||
'result': f(*args, **kwargs)
|
'result': f(*args, **kwargs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callfunction.wsme_func = f
|
||||||
return callfunction
|
return callfunction
|
||||||
return decorate
|
return decorate
|
||||||
|
|
||||||
|
|
||||||
|
def scan_api(root=None):
|
||||||
|
from cornice.service import get_services
|
||||||
|
for service in get_services():
|
||||||
|
for method, func, options in service.definitions:
|
||||||
|
wsme_func = getattr(func, 'wsme_func')
|
||||||
|
basepath = service.path.split('/')
|
||||||
|
if basepath and not basepath[0]:
|
||||||
|
del basepath[0]
|
||||||
|
if wsme_func:
|
||||||
|
yield (
|
||||||
|
basepath + [method.lower()],
|
||||||
|
wsme_func._wsme_definition
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def includeme(config):
|
def includeme(config):
|
||||||
|
import pyramid.wsgi
|
||||||
|
wsroot = wsme.WSRoot(scan_api=scan_api, webpath='/ws')
|
||||||
|
wsroot.addprotocol('extdirect')
|
||||||
config.add_renderer('wsmejson', WSMEJsonRenderer)
|
config.add_renderer('wsmejson', WSMEJsonRenderer)
|
||||||
config.add_renderer('wsmexml', WSMEXmlRenderer)
|
config.add_renderer('wsmexml', WSMEXmlRenderer)
|
||||||
|
config.add_route('wsme', '/ws/*path')
|
||||||
|
config.add_view(pyramid.wsgi.wsgiapp(wsroot.wsgiapp()), route_name='wsme')
|
||||||
|
@ -78,10 +78,12 @@ class WSRoot(object):
|
|||||||
"""
|
"""
|
||||||
__registry__ = wsme.types.registry
|
__registry__ = wsme.types.registry
|
||||||
|
|
||||||
def __init__(self, protocols=[], webpath='', transaction=None):
|
def __init__(self, protocols=[], webpath='', transaction=None,
|
||||||
|
scan_api=scan_api):
|
||||||
self._debug = True
|
self._debug = True
|
||||||
self._webpath = webpath
|
self._webpath = webpath
|
||||||
self.protocols = []
|
self.protocols = []
|
||||||
|
self.scan_api = scan_api
|
||||||
|
|
||||||
self._transaction = transaction
|
self._transaction = transaction
|
||||||
if self._transaction is True:
|
if self._transaction is True:
|
||||||
@ -123,7 +125,7 @@ class WSRoot(object):
|
|||||||
:rtype: list of (path, :class:`FunctionDefinition`)
|
:rtype: list of (path, :class:`FunctionDefinition`)
|
||||||
"""
|
"""
|
||||||
if self._api is None:
|
if self._api is None:
|
||||||
self._api = [i for i in scan_api(self)]
|
self._api = [i for i in self.scan_api(self)]
|
||||||
for path, fdef in self._api:
|
for path, fdef in self._api:
|
||||||
fdef.resolve_types(self.__registry__)
|
fdef.resolve_types(self.__registry__)
|
||||||
return self._api
|
return self._api
|
||||||
|
Loading…
x
Reference in New Issue
Block a user