work in progress: REST/JSON traversal and views

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3525 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-08-29 16:46:38 +00:00
parent e9f4bf4b1b
commit a1ef7dd6d9
4 changed files with 14 additions and 5 deletions

View file

@ -20,4 +20,4 @@ Providing object data in JSON format
>>> obj = Demo('test')
>>> jsv = JSONView(obj, TestRequest())
>>> jsv()
'{"name": "test"}'
'["name"]'

View file

@ -32,9 +32,9 @@ class JSONView(object):
self.request = request
def __call__(self):
return json.dumps(self.context.__dict__)
return json.dumps(self.context.__dict__.keys())
def traverse(self, name):
# To be implemented by subclass
print '*** traversing', self.context, name
return None
return self.context

View file

@ -15,6 +15,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
IPublishTraverse adapter that checks the 'Accept' header.
@ -49,4 +50,9 @@ class CheckJSONTraverser(ItemTraverser):
return view.traverse(name)
def defaultTraverse(self, request, name):
return super(CheckAcceptTraverser, self).publishTraverse(request, name)
return super(CheckJSONTraverser, self).publishTraverse(request, name)
def browserDefault(self, request):
if self.isJSONRequest(request):
return self.context, ('@@json',)
return super(CheckJSONTraverser, self).browserDefault(request)

View file

@ -28,5 +28,8 @@ from cybertools.roa.traversal import CheckJSONTraverser as BaseTraverser
class CheckJSONTraverser(BaseTraverser, DefaultPublishTraverse):
defaultTraverse = DefaultPublishTraverse.publishTraverse
browserDefault = DefaultPublishTraverse.browserDefault
def browserDefault(self, request):
if self.isJSONRequest(request):
return self.context, ('@@json',)
return DefaultPublishTraverse.browserDefault(self, request)