[Checkins] SVN: Sandbox/ulif/grokui.zodbbrowser/ Create a sandbox for grokui.zodbbrowser.
Uli Fouquet
uli at gnufix.de
Fri Feb 12 10:31:31 EST 2010
Log message for revision 108951:
Create a sandbox for grokui.zodbbrowser.
Changed:
A Sandbox/ulif/grokui.zodbbrowser/
A Sandbox/ulif/grokui.zodbbrowser/.installed.cfg
A Sandbox/ulif/grokui.zodbbrowser/CHANGES.txt
A Sandbox/ulif/grokui.zodbbrowser/README.txt
A Sandbox/ulif/grokui.zodbbrowser/buildout.cfg
A Sandbox/ulif/grokui.zodbbrowser/setup.py
A Sandbox/ulif/grokui.zodbbrowser/src/
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/__init__.py
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/README.txt
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/__init__.py
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/configure.zcml
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/interfaces.py
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/objectinfo.py
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/templates/
A Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/templates/zodbbrowser.pt
-=-
Added: Sandbox/ulif/grokui.zodbbrowser/.installed.cfg
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/.installed.cfg (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/.installed.cfg 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,158 @@
+[buildout]
+installed_develop_eggs = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs/grokui.zodbbrowser.egg-link
+parts = svn test data app zopectl
+
+[svn]
+__buildout_installed__ = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/svn
+ /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs/grokui.base.egg-link
+__buildout_signature__ = infrae.subversion-1.4.5-py2.5.egg py-1.0.0-py2.5.egg setuptools-0.6c11-py2.5.egg zc.buildout-1.4.3-py2.5.egg
+as_eggs = True
+eggs = grokui.base
+location = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/svn
+recipe = infrae.subversion
+urls = svn://svn.zope.org/repos/main/grokui.base/trunk grokui.base
+
+[test]
+__buildout_installed__ = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/test
+ /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin/test
+__buildout_signature__ = zc.recipe.testrunner-1.2.0-py2.5.egg zc.recipe.egg-1.2.2-py2.5.egg setuptools-0.6c11-py2.5.egg zope.testing-3.8.6-py2.5.egg zc.buildout-1.4.3-py2.5.egg zope.interface-3.5.3-py2.5-linux-i686.egg zope.exceptions-3.5.2-py2.5.egg
+_b = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+_d = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+_e = /home/uli/.buildout/eggs
+bin-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+defaults = ['--tests-pattern', '^f?tests$', '-v']
+develop-eggs-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+eggs = grokui.zodbbrowser [test]
+eggs-directory = /home/uli/.buildout/eggs
+executable = /usr/bin/python
+find-links = http://download.zope.org/distribution/
+location = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/test
+recipe = zc.recipe.testrunner
+script = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin/test
+
+[data]
+__buildout_installed__ =
+__buildout_signature__ = zc.recipe.filestorage-1.0.1-py2.5.egg setuptools-0.6c11-py2.5.egg zope.testing-3.8.6-py2.5.egg zc.buildout-1.4.3-py2.5.egg zope.interface-3.5.3-py2.5-linux-i686.egg zope.exceptions-3.5.2-py2.5.egg
+blob-dir =
+path = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/data/Data.fs
+recipe = zc.recipe.filestorage
+zconfig = <zodb>
+ %(__buildout_space__)s%(__buildout_space__)s<filestorage>
+ %(__buildout_space__)s%(__buildout_space__)s%(__buildout_space__)s%(__buildout_space__)spath /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/data/Data.fs
+ %(__buildout_space__)s%(__buildout_space__)s</filestorage>
+ </zodb>%(__buildout_space_n__)s
+
+[app]
+__buildout_installed__ = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/app
+__buildout_signature__ = zc.zope3recipes-0.11.0-py2.5.egg ZConfig-2.7.1-py2.5.egg zc.recipe.egg-1.2.2-py2.5.egg setuptools-0.6c11-py2.5.egg zope.testing-3.8.6-py2.5.egg zc.buildout-1.4.3-py2.5.egg zope.interface-3.5.3-py2.5-linux-i686.egg zope.exceptions-3.5.2-py2.5.egg
+_b = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+_d = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+_e = /home/uli/.buildout/eggs
+bin-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+develop-eggs-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+eggs = grokui.zodbbrowser
+eggs-directory = /home/uli/.buildout/eggs
+executable = /usr/bin/python
+find-links = http://download.zope.org/distribution/
+location = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/app
+recipe = zc.zope3recipes>=0.5.3:application
+scripts =
+servers = twisted
+site.zcml = <configure xmlns='http://namespaces.zope.org/zope'
+ xmlns:meta="http://namespaces.zope.org/meta"
+ i18n_domain="zope">
+ <include package="grokui.base" />
+ <include package="grokui.zodbbrowser" />
+ <include package="zope.app.twisted" />
+ <unauthenticatedPrincipal id="zope.anybody"
+ title="Unauthenticated User"
+ />
+ <unauthenticatedGroup id="zope.Anybody"
+ title="Unauthenticated Users"
+ />
+ <authenticatedGroup id="zope.Authenticated"
+ title="Authenticated Users"
+ />
+ <everybodyGroup id="zope.Everybody"
+ title="All Users"
+ />
+ <principal id="zope.manager"
+ title="Manager"
+ login="grok"
+ password_manager="Plain Text"
+ password="grok"
+ />
+ <!-- Replace the following directive if you don't want
+ public access -->
+ <grant permission="zope.View"
+ principal="zope.Everybody" />
+ <grant permission="zope.app.dublincore.view"
+ principal="zope.Everybody" />
+ <role id="zope.Manager" title="Site Manager" />
+ <role id="zope.Member" title="Site Member" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager"
+ principal="zope.manager" />
+ </configure>
+
+[zopectl]
+__buildout_installed__ = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/zopectl
+ /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin/zopectl
+__buildout_signature__ = zc.zope3recipes-0.11.0-py2.5.egg ZConfig-2.7.1-py2.5.egg zc.recipe.egg-1.2.2-py2.5.egg setuptools-0.6c11-py2.5.egg zope.testing-3.8.6-py2.5.egg zc.buildout-1.4.3-py2.5.egg zope.interface-3.5.3-py2.5-linux-i686.egg zope.exceptions-3.5.2-py2.5.egg
+_b = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+_d = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+_e = /home/uli/.buildout/eggs
+application = app
+application-location = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/app
+bin-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/bin
+develop-eggs-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs
+eggs = zdaemon
+ setuptools
+eggs-directory = /home/uli/.buildout/eggs
+executable = /usr/bin/python
+find-links = http://download.zope.org/distribution/
+recipe = zc.zope3recipes:instance
+run-directory = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/zopectl
+scripts =
+servers = twisted
+zope.conf = <zodb>
+ %(__buildout_space__)s%(__buildout_space__)s<filestorage>
+ %(__buildout_space__)s%(__buildout_space__)s%(__buildout_space__)s%(__buildout_space__)spath /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/parts/data/Data.fs
+ %(__buildout_space__)s%(__buildout_space__)s</filestorage>
+ </zodb>%(__buildout_space_n__)s
+
+[buildout]
+installed_develop_eggs = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs/grokui.zodbbrowser.egg-link
+
+[buildout]
+parts = test data app zopectl svn
+
+[buildout]
+parts = data app zopectl svn test
+
+[buildout]
+parts = app zopectl svn test data
+
+[buildout]
+parts = zopectl svn test data app
+
+[buildout]
+parts = svn test data app zopectl
+
+[buildout]
+installed_develop_eggs = /home/uli/WorkShop/devel/zope/grok/grokui.zodbbrowser/develop-eggs/grokui.zodbbrowser.egg-link
+
+[buildout]
+parts = test data app zopectl svn
+
+[buildout]
+parts = data app zopectl svn test
+
+[buildout]
+parts = app zopectl svn test data
+
+[buildout]
+parts = zopectl svn test data app
+
+[buildout]
+parts = svn test data app zopectl
Added: Sandbox/ulif/grokui.zodbbrowser/README.txt
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/README.txt (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/README.txt 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,15 @@
+grokui.zodbbrowser
+******************
+
+A simple ZODB browser for the grokUI environment.
+
+This ZODB browser acts as a plugin into the grokui.base.
+
+It is also a replacement for the ZODB browser in the former
+grokui.admin introspector.
+
+You can browse the contents of your currently used ZODB by pointing
+your browser to::
+
+ http://localhost:8080/++grokui++/zodbbrowser
+
Added: Sandbox/ulif/grokui.zodbbrowser/buildout.cfg
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/buildout.cfg (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/buildout.cfg 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,74 @@
+[buildout]
+develop = .
+parts = svn test data zopectl app
+find-links = http://download.zope.org/distribution/
+extends = http://svn.zope.org/*checkout*/groktoolkit/trunk/grok.cfg
+versions = versions
+
+[data]
+recipe = zc.recipe.filestorage
+
+[svn]
+recipe = infrae.subversion
+as_eggs = True
+urls = svn://svn.zope.org/repos/main/grokui.base/trunk grokui.base
+
+[versions]
+grokui.zodbbrowser =
+grokui.base =
+
+[app]
+recipe = zc.zope3recipes>=0.5.3:application
+eggs = grokui.zodbbrowser
+site.zcml =<configure xmlns='http://namespaces.zope.org/zope'
+ xmlns:meta="http://namespaces.zope.org/meta"
+ i18n_domain="zope">
+
+ <include package="grokui.base" />
+ <include package="grokui.zodbbrowser" />
+ <include package="zope.app.twisted" />
+
+ <unauthenticatedPrincipal id="zope.anybody"
+ title="Unauthenticated User"
+ />
+ <unauthenticatedGroup id="zope.Anybody"
+ title="Unauthenticated Users"
+ />
+ <authenticatedGroup id="zope.Authenticated"
+ title="Authenticated Users"
+ />
+ <everybodyGroup id="zope.Everybody"
+ title="All Users"
+ />
+ <principal id="zope.manager"
+ title="Manager"
+ login="grok"
+ password_manager="Plain Text"
+ password="grok"
+ />
+
+ <!-- Replace the following directive if you don't want
+ public access -->
+ <grant permission="zope.View"
+ principal="zope.Everybody" />
+
+ <grant permission="zope.app.dublincore.view"
+ principal="zope.Everybody" />
+
+ <role id="zope.Manager" title="Site Manager" />
+ <role id="zope.Member" title="Site Member" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager"
+ principal="zope.manager" />
+ </configure>
+
+# this section named so that the start/stop script is called bin/zopectl
+[zopectl]
+recipe = zc.zope3recipes:instance
+application = app
+zope.conf = ${data:zconfig}
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = grokui.zodbbrowser [test]
+defaults = ['--tests-pattern', '^f?tests$', '-v']
Added: Sandbox/ulif/grokui.zodbbrowser/setup.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/setup.py (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/setup.py 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,69 @@
+import os
+from setuptools import setup, find_packages
+
+tests_require = [
+ 'zope.app.testing',
+ 'zope.testbrowser',
+ 'zope.testing',
+ 'zope.security',
+ 'zope.securitypolicy'
+ ]
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+setup(name='grokui.zodbbrowser',
+ version='0.1dev',
+ description="The Grok administration and development UIs ZODB browser",
+ long_description=(
+ read(os.path.join('src', 'grokui', 'zodbbrowser', 'README.txt')) +
+ '\n\n' +
+ read('CHANGES.txt')
+ ),
+ classifiers=[
+ 'Development Status :: 3 - Alpha',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Zope Public License',
+ 'Programming Language :: Python',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Framework :: Zope3'],
+ keywords="zope3 grok grokui zodb zodbbrowser",
+ author="Uli Fouquet and lots of contributors from grok community",
+ author_email="grok-dev at zope.org",
+ url="http://svn.zope.org/grokui.zodbbrowser",
+ license="ZPL 2.1",
+ package_dir={'': 'src'},
+ packages=find_packages('src'),
+ include_package_data=True,
+ zip_safe=False,
+ namespace_packages=['grokui'],
+ install_requires=[
+ 'ZODB3',
+ 'grok',
+ 'grokui.base',
+ 'setuptools',
+ 'z3c.flashmessage',
+ 'zope.applicationcontrol',
+ 'zope.component',
+ 'zope.configuration',
+ 'zope.contentprovider',
+ 'zope.exceptions',
+ 'zope.i18nmessageid',
+ 'zope.interface',
+ 'zope.location',
+ 'zope.login',
+ 'zope.schema',
+ 'zope.site',
+ 'zope.size',
+ 'zope.traversing',
+ 'zope.app.debug',
+ ],
+ tests_require = tests_require,
+ extras_require = dict(test=tests_require),
+ entry_points="""
+ # Add entry points here
+ """,
+ )
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/__init__.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/__init__.py (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/__init__.py 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,7 @@
+# namespace package boilerplate
+try:
+ import pkg_resources
+ pkg_resources.declare_namespace(__name__)
+except ImportError, e:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/configure.zcml
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/configure.zcml (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/configure.zcml 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,7 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+ <include package="grok" />
+ <include package="zope.applicationcontrol" />
+ <include package="zope.login" />
+ <grok:grok package="." />
+</configure>
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/interfaces.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/interfaces.py (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/interfaces.py 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,22 @@
+"""grokui.zodbbrowser interfaces.
+"""
+from zope.interface import Interface
+
+class IObjectInfo(Interface):
+ """Infos about an ZODB object.
+ """
+ def getOID():
+ """Get the OID of an object.
+ """
+
+ def getName():
+ """Get the name of an object or None.
+ """
+
+ def getParent():
+ """Get parent of associated object or None.
+ """
+
+ def getChildren():
+ """Get a list of children objects.
+ """
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/objectinfo.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/objectinfo.py (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/objectinfo.py 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,109 @@
+"""Infos about objects.
+"""
+import grok
+import inspect
+import types
+from persistent import Persistent
+from zope.interface import Interface
+from zope.proxy import removeAllProxies
+from ZODB.utils import p64, u64, tid_repr
+from grokui.zodbbrowser.interfaces import IObjectInfo
+
+class ObjectInfo(grok.Adapter):
+ """Infos about objects.
+ """
+ grok.context(Interface)
+ grok.provides(IObjectInfo)
+
+ def __init__(self, context, obj_name=None, parent_oid=None):
+ self.obj = removeAllProxies(context)
+ self.name = obj_name
+ self.parent_oid = parent_oid
+
+ def getOID(self):
+ try:
+ return u64(self.obj._p_oid)
+ except:
+ pass
+ return None
+
+ def getName(self):
+ return getattr(self.obj, '__name__', 'CH' + str(self.name))
+
+ def getParent(self):
+ return getattr(self.obj, '__parent__', None)
+
+ def getDescription(self):
+ descr = getattr(self.obj, '__doc__', u'')
+ descr = inspect.getdoc(self.obj)
+ if descr is None:
+ return u''
+ return descr
+
+ def getMembers(self):
+ result = []
+ for name, obj in inspect.getmembers(self.obj):
+ result.append(MemberInfo(name, self.obj, obj))
+ return result
+
+class MemberInfo(object):
+ def __init__(self, name, parent, obj):
+ self.name = name
+ self.parent = parent
+ self.obj = removeAllProxies(obj)
+
+ @property
+ def linkable(self):
+ if self.oid is not None:
+ return True
+ return False
+
+ @property
+ def oid(self):
+ if not hasattr(self.obj, '_p_oid'):
+ return
+ if not isinstance(self.obj, Persistent):
+ return
+ try:
+ return u64(self.obj._p_oid)
+ except:
+ pass
+ return
+
+ @property
+ def signature(self):
+ if inspect.isroutine(self.obj):
+ return self.getFunctionSignature()
+ if 'method-wrapper' in str(type(self.obj)):
+ return self.getFunctionSignature()
+ if isinstance(self.obj, types.BuiltinMethodType):
+ return "%s(...)" % self.name
+ if isinstance(self.obj, types.BuiltinFunctionType):
+ return "%s(...)" % self.name
+ if isinstance(self.obj, types.MethodType):
+ return "%s(...)" % self.name
+ return self.name
+
+ @property
+ def doc(self):
+ descr = inspect.getdoc(self.obj)
+ return descr
+
+
+ @property
+ def type_string(self):
+ try:
+ return str(type(self.obj))
+ except:
+ pass
+ return '<UNKNOWN>'
+
+ def getFunctionSignature(self):
+ try:
+ signature = inspect.formatargspec(*inspect.getargspec(self.obj))
+ except TypeError:
+ # For certain funcs/methods (C-defined ones, for instance)
+ # we cannot get a signature.
+ signature = u'(...)'
+
+ return '%s%s' % (self.name, signature)
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/pages.py 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,68 @@
+"""ZODBbrowser pages.
+"""
+import grok
+from persistent import Persistent
+from zope.security.proxy import removeSecurityProxy
+from ZODB.utils import p64, u64, tid_repr
+from grokui.base import IGrokUIRealm, GrokUIView
+from grokui.zodbbrowser.interfaces import IObjectInfo
+from grokui.zodbbrowser.objectinfo import MemberInfo
+
+grok.context(IGrokUIRealm)
+grok.templatedir('templates')
+
+class ManageApplications(grok.Permission):
+ grok.name('grok.ManageApplications')
+
+class GrokUIZODBBrowserInfo(GrokUIView):
+ grok.name('zodbbrowser')
+ grok.template('zodbbrowser')
+ grok.require('grok.ManageApplications')
+
+ def update(self, oid=None, name=None):
+ self.obj = None
+ if oid is None:
+ self.obj = self.context.root
+ #self.obj = self.findClosestPersistent()
+ if self.obj is None:
+ oid = p64(int(self.request.get('oid', self.getRootOID()), 0))
+ jar = self.jar()
+ self.obj = jar.get(oid)
+ self.info = IObjectInfo(self.obj)
+ self.info.name = name
+
+ def findClosestPersistent(self):
+ obj = removeSecurityProxy(self.context)
+ while not isinstance(obj, Persistent):
+ try:
+ obj = obj.__parent__
+ except AttributeError:
+ return None
+ return obj
+
+ def getRootOID(self):
+ root = self.jar().root()
+ try:
+ # The blessed way would be:
+ #
+ # root = root[ZopePublication.root_name]
+ #
+ # This, however would force us to import zope.app stuff
+ # only to get the silly string.
+ root = root[u'Application']
+ except KeyError:
+ pass
+ return u64(root._p_oid)
+
+ 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
+
+ def getMemberLink(self, member):
+ return self.url(self.context, '@@zodbbrowser',
+ data = dict(oid=member.oid,name=member.name))
Added: Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/templates/zodbbrowser.pt
===================================================================
--- Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/templates/zodbbrowser.pt (rev 0)
+++ Sandbox/ulif/grokui.zodbbrowser/src/grokui/zodbbrowser/templates/zodbbrowser.pt 2010-02-12 15:31:30 UTC (rev 108951)
@@ -0,0 +1,24 @@
+<h2>The GrokUI ZODBBrowser</h2>
+Name:<h3 tal:content="view/info/getName">the_object_name</h3>
+<h3 tal:content="view/info/obj">The_Object</h3>
+<div tal:content="view/info/getDescription">
+ The object description
+</div>
+<h3>Members</h3>
+<div tal:repeat="member view/info/getMembers">
+ <span tal:replace="member/type_string">member.type</span>
+ <h4>
+ <span tal:condition="member/linkable">
+ <a href=""
+ tal:attributes="href python: view.getMemberLink(member)"
+ tal:content="member/signature">member.signature</a>
+ </span>
+ <span tal:condition="not: member/linkable"
+ tal:replace="member/signature">
+ </span>
+ </h4>
+ <p>
+ <pre tal:condition="member/doc"
+ tal:content="member/doc">member.docs</pre>
+ </p>
+</div>
More information about the checkins
mailing list