[Checkins] SVN: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py * Reorganize object info handling. ObjectInfos are now rendered by own
Uli Fouquet
uli at gnufix.de
Sun Mar 14 09:27:28 EDT 2010
Log message for revision 109949:
* Reorganize object info handling. ObjectInfos are now rendered by own
views inside the one page, which enables different views for
different kinds of objects.
* Reorder methods.
* Minor cleanups.
Changed:
U Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py
-=-
Modified: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py 2010-03-14 13:24:34 UTC (rev 109948)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py 2010-03-14 13:27:28 UTC (rev 109949)
@@ -3,12 +3,14 @@
import grok
from persistent import Persistent
from zope.component import getMultiAdapter
+from zope.location import LocationProxy
from zope.security.proxy import removeSecurityProxy
from zope.session.interfaces import ISession
from ZODB.POSException import POSKeyError
from ZODB.utils import p64, u64, tid_repr
+
from grokui.base import IGrokUIRealm, GrokUIView
-from grokui.zodbbrowser.interfaces import IObjectInfo
+from grokui.zodbbrowser.interfaces import IObjectInfo, IBTreeInfo
grok.context(IGrokUIRealm)
grok.templatedir('templates')
@@ -26,38 +28,16 @@
def publishTraverse(self, request, name):
self.request.form['oid'] = name
return self
-
- def update(self, oid=None, show_all=False, show_docs=False, update=None):
- self.obj = None
- if oid is None:
- self.obj = self.context.root
- if self.obj is None:
- try:
- oid = p64(int(self.request.get('oid', self.getRootOID()), 0))
- except ValueError:
- # Invalid number sent
- self.flash(
- u'Not a valid object ID: %s' % self.request.get('oid'))
- self.redirect(self.url(self.context, '@@zodbbrowser'))
- return
- jar = self.jar()
- try:
- self.obj = jar.get(oid)
- except POSKeyError:
- self.flash(u'No such object ID: %s' % u64(oid))
- self.redirect(self.url(self.context, '@@zodbbrowser'))
- return
- self.info = IObjectInfo(self.obj)
- session = ISession(self.request)['grokui.zodbbrowser']
+ def jar(self):
+ try:
+ return self.request.annotations['ZODB.interfaces.IConnection']
+ except KeyError:
+ obj = removeSecurityProxy(self.context)
+ while not isinstance(obj, Persistent):
+ obj = removeSecurityProxy(obj.__parent__)
+ return obj._p_jar
- if update is None:
- show_all = session.get('show_all', False)
- show_docs = session.get('show_docs', False)
- self.show_all = session['show_all'] = show_all
- self.show_docs = session['show_docs'] = show_docs
- return
-
def getRootOID(self):
"""Get OID of root object.
"""
@@ -74,54 +54,89 @@
pass
return u64(root._p_oid)
- def jar(self):
+ def getObjectAndOID(self, oid=None):
+ """Compute associated object and its OID.
+ """
+ obj = None
+ if oid is None:
+ obj = self.context.root
+ if obj is None:
+ oid = p64(int(self.request.get('oid', self.getRootOID()), 0))
+ obj = self.jar().get(oid)
+ return (obj, oid)
+
+ def update(self, oid=None, show_all=False, show_docs=False, update=None):
try:
- return self.request.annotations['ZODB.interfaces.IConnection']
- except KeyError:
- obj = removeSecurityProxy(self.context)
- while not isinstance(obj, Persistent):
- obj = removeSecurityProxy(obj.__parent__)
- return obj._p_jar
+ self.obj, self.oid = self.getObjectAndOID(oid=oid)
+ except (POSKeyError, ValueError):
+ # Invalid number sent
+ self.flash(
+ u'Not a valid object ID: %s' % self.request.get('oid'))
+ self.redirect(self.url(self.context, '@@zodbbrowser'))
+ return
- def getMemberLink(self, member):
- return "%s/%s" % (self.url(self.context, '@@zodbbrowser'), member.oid)
+ info = IObjectInfo(self.obj)
+ self.info = LocationProxy(info, self, str(info.oid))
- def getMemberView(self, member):
- view = getMultiAdapter((member, self.request), name='memberinfo')
- # this subview needs a reference to our context...
- view.parent_context = self.context
- return view
+ session = ISession(self.request)['grokui.zodbbrowser']
+ if update is None:
+ show_all = session.get('show_all', False)
+ show_docs = session.get('show_docs', False)
+ self.show_all = session['show_all'] = show_all
+ self.show_docs = session['show_docs'] = show_docs
+ return
def getBreadCrumbs(self):
"""Breadcrumb navigation.
"""
root_oid = self.getRootOID()
curr = self.info
- parent_list = [curr]
+ b_list = []
while True:
- parent = IObjectInfo(curr.parent)
- if parent.obj is not None:
- parent_list.append(parent)
- if parent.obj is None or parent.obj is curr.obj:
+ link = self.getMemberLink(curr)
+ name = curr.name or '???'
+ if curr.oid == root_oid:
+ name = '<root>'
+ b_list.append('<a href="%s">%s</a>' % (link, name))
+ if curr.parent is None or curr.parent is curr.obj:
break
- curr = parent
- link_list = []
- for info in parent_list:
- name = info.name or '???'
- if info.oid == root_oid:
- name = '<root>'
- link = '<a href="%s">%s</a>' % (self.getMemberLink(info), name)
- link_list.append(link)
- if parent_list[-1].oid != root_oid:
- link_list.append('...')
- link_list.append(
- '<a href="%s">%s</a>' % (
+ curr = IObjectInfo(curr.parent)
+ if curr.oid != root_oid:
+ b_list.append('...')
+ b_list.append('<a href="%s">%s</a>' % (
self.getMemberLink(IObjectInfo(self.context.root)),
'<root>'))
- link_list.reverse()
- result = ' / '.join(link_list)
- return result
-
+ b_list.reverse()
+ return ' / '.join(b_list)
+
+ def getMemberLink(self, memberinfo):
+ return self.url(
+ LocationProxy(memberinfo, self, str(memberinfo.oid)))
+
+class ObjectInfoView(grok.View):
+ grok.name('index')
+ grok.require('grok.BrowseZODB')
+ grok.context(IObjectInfo)
+
+ def update(self):
+ session = ISession(self.request)['grokui.zodbbrowser']
+ self.show_all = session.get('show_all', False)
+ self.show_docs = session.get('show_docs', False)
+
+ def getMemberView(self, member=None):
+ if member is None:
+ member = self.context
+ member = LocationProxy(
+ member, self.context.__parent__, str(member.oid))
+ view = getMultiAdapter((member, self.request), name='memberinfo')
+ return view
+
+class FolderInfoView(ObjectInfoView):
+ grok.name('index')
+ grok.require('grok.BrowseZODB')
+ grok.context(IBTreeInfo)
+ grok.template('objectinfoview')
+
class MemberInfoView(grok.View):
"""View objectinfo as memberinfo.
"""
@@ -136,6 +151,4 @@
self.show_docs = session.get('show_docs', False)
def getMemberLink(self):
- return "%s/%s" % (
- self.url(self.parent_context, '@@zodbbrowser'),
- self.context.oid)
+ return self.url(self.context)
More information about the checkins
mailing list