minor refactorings
This commit is contained in:
parent
6cc5136550
commit
20520a70c5
3 changed files with 19 additions and 18 deletions
|
@ -7,7 +7,7 @@ from zope.publisher.publish import publish
|
||||||
|
|
||||||
from scopes.interfaces import ITraversable, IView
|
from scopes.interfaces import ITraversable, IView
|
||||||
from scopes.server.browser import getView
|
from scopes.server.browser import getView
|
||||||
import scopes.storage.concept
|
import scopes.storage.concept # register container classes
|
||||||
from scopes.storage.folder import Root
|
from scopes.storage.folder import Root
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,35 +9,40 @@ views = {} # registry for all views: {name: {prefix: viewClass, ...}, ...}
|
||||||
def register(name, *contextClasses):
|
def register(name, *contextClasses):
|
||||||
"""Use as decorator: `@register(name, class, ...).
|
"""Use as decorator: `@register(name, class, ...).
|
||||||
class `None` means default view for all classes."""
|
class `None` means default view for all classes."""
|
||||||
def doRegister(viewClass):
|
def doRegister(factory):
|
||||||
|
implementer(IView)(factory)
|
||||||
nameEntry = views.setdefault(name, {})
|
nameEntry = views.setdefault(name, {})
|
||||||
for cl in contextClasses:
|
for cl in contextClasses:
|
||||||
key = cl and cl.prefix or ''
|
nameEntry[cl.prefix] = factory
|
||||||
nameEntry[key] = viewClass
|
else:
|
||||||
return viewClass
|
nameEntry[''] = factory
|
||||||
|
return factory
|
||||||
return doRegister
|
return doRegister
|
||||||
|
|
||||||
def getView(request, ob, name):
|
def getView(request, ob, name):
|
||||||
nameEntry = views.get(name)
|
nameEntry = views.get(name)
|
||||||
if nameEntry is None:
|
if nameEntry is None:
|
||||||
return None
|
return None
|
||||||
viewClass = nameEntry.get(ob.__class__.prefix)
|
factory = nameEntry.get(ob.prefix)
|
||||||
if viewClass is None:
|
if factory is None:
|
||||||
viewClass = nameEntry.get('')
|
factory = nameEntry.get('')
|
||||||
if viewClass is None:
|
if factory is None:
|
||||||
return None
|
return None
|
||||||
return viewClass(ob, request)
|
return factory(ob, request)
|
||||||
|
|
||||||
|
|
||||||
@register('index.html', None)
|
@register('index.html')
|
||||||
@register('index.json', None)
|
@register('index.json')
|
||||||
@implementer(IView)
|
|
||||||
class DefaultView:
|
class DefaultView:
|
||||||
|
|
||||||
def __init__(self, context, request):
|
def __init__(self, context, request):
|
||||||
self.context = context
|
self.context = context
|
||||||
self.request = request
|
self.request = request
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
result = self.prepareResult()
|
||||||
|
return self.render(result)
|
||||||
|
|
||||||
def prepareResult(self):
|
def prepareResult(self):
|
||||||
ob = self.context
|
ob = self.context
|
||||||
result = ob.asDict()
|
result = ob.asDict()
|
||||||
|
@ -51,11 +56,8 @@ class DefaultView:
|
||||||
result['target']['items'] = [v.asDict() for v in target.values()]
|
result['target']['items'] = [v.asDict() for v in target.values()]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def renderJson(self, result):
|
def render(self, result):
|
||||||
self.request.response.setHeader('Content-type', 'application/json; charset=utf-8')
|
self.request.response.setHeader('Content-type', 'application/json; charset=utf-8')
|
||||||
return json.dumps(result).encode('UTF-8')
|
return json.dumps(result).encode('UTF-8')
|
||||||
|
|
||||||
def __call__(self):
|
|
||||||
result = self.prepareResult()
|
|
||||||
return self.renderJson(result)
|
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ class Concept(Track):
|
||||||
return (t.getSecond() for t in self.children(Rels.defaultPredicate))
|
return (t.getSecond() for t in self.children(Rels.defaultPredicate))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Concepts(Container):
|
class Concepts(Container):
|
||||||
|
|
||||||
insertOnChange = False
|
insertOnChange = False
|
||||||
|
|
Loading…
Add table
Reference in a new issue