[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