py-scopes/scopes/server/browser.py

43 lines
1.1 KiB
Python

# scopes.server.browser
import json
from zope.interface import implementer
from scopes.interfaces import IContainer, IView
views = {}
def register(contextClass, name):
def doRegister(viewClass):
nameEntry = views.setdefault(name, {})
key = contextClass and contextClass.prefix or ''
nameEntry[key] = viewClass
return viewClass
return doRegister
def getView(request, ob, name):
nameEntry = views.get(name)
if nameEntry is None:
return None
viewClass = nameEntry.get(ob.__class__.prefix)
if viewClass is None:
viewClass = nameEntry.get('')
if viewClass is None:
return None
return viewClass(ob, request)
@register(None, 'index.html')
@implementer(IView)
class DefaultView:
def __init__(self, context, request):
self.context = context
self.request = request
def __call__(self):
ob = self.context
result = dict(head=ob.head, data=ob.data)
if IContainer.providedBy(ob):
result['items'] = list(ob.keys())
return json.dumps(result)