[Checkins] SVN: grokui.admin/branches/fancy-layout/ grokui.admin now requires zope.login.

Souheil CHELFOUH souheil at chelfouh.com
Sat Jan 9 20:19:59 EST 2010


Log message for revision 107966:
  grokui.admin now requires zope.login.
  Using the new IGrokuiRealm views from grokui.base.
  Copied over the few methods to cut the dependency from zope.app.applicationcontrol
  TODO : fix the runtime infos.
  

Changed:
  U   grokui.admin/branches/fancy-layout/buildout.cfg
  U   grokui.admin/branches/fancy-layout/setup.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/configure.zcml
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/server.py

-=-
Modified: grokui.admin/branches/fancy-layout/buildout.cfg
===================================================================
--- grokui.admin/branches/fancy-layout/buildout.cfg	2010-01-10 01:15:15 UTC (rev 107965)
+++ grokui.admin/branches/fancy-layout/buildout.cfg	2010-01-10 01:19:58 UTC (rev 107966)
@@ -17,6 +17,11 @@
 grokui.admin = 
 grokui.base = 
 megrok.layout = 0.9
+zope.login = 1.0
+zope.publisher = 3.12
+zope.contenttype = 3.5
+zope.browserpage = 3.11
+zope.app.exception = 3.6.1
 
 [app]
 recipe = zc.zope3recipes>=0.5.3:application

Modified: grokui.admin/branches/fancy-layout/setup.py
===================================================================
--- grokui.admin/branches/fancy-layout/setup.py	2010-01-10 01:15:15 UTC (rev 107965)
+++ grokui.admin/branches/fancy-layout/setup.py	2010-01-10 01:19:58 UTC (rev 107966)
@@ -48,12 +48,14 @@
           'setuptools',
           'z3c.flashmessage',
           'zope.annotation',
+          'zope.applicationcontrol',
           'zope.app.applicationcontrol',
           'zope.app.appsetup',
           'zope.component',
           'zope.contentprovider',
           'zope.exceptions',
           'zope.interface',
+          'zope.login',
           'zope.schema',
           'zope.site',
           'zope.traversing',

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py	2010-01-10 01:15:15 UTC (rev 107965)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py	2010-01-10 01:19:58 UTC (rev 107966)
@@ -88,7 +88,7 @@
         self.broken = []
         self.installed = []
 
-        for name, app in self.context.items():
+        for name, app in self.context.root.items():
             is_broken = isinstance(app, Broken)
             if is_broken:
                 self.broken.append(BrokenApplication(name, app))

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/configure.zcml
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/configure.zcml	2010-01-10 01:15:15 UTC (rev 107965)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/configure.zcml	2010-01-10 01:19:58 UTC (rev 107966)
@@ -1,5 +1,6 @@
 <configure xmlns="http://namespaces.zope.org/zope"
            xmlns:grok="http://namespaces.zope.org/grok">
   <include package="grok" />
+  <include package="zope.login" />
   <grok:grok package="." />
 </configure>

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/server.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/server.py	2010-01-10 01:15:15 UTC (rev 107965)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/server.py	2010-01-10 01:19:58 UTC (rev 107966)
@@ -11,20 +11,38 @@
 from ZODB.FileStorage.FileStorage import FileStorageError
 
 import zope.component
-from zope.app.applicationcontrol.interfaces import IServerControl
-from zope.app.applicationcontrol.browser.runtimeinfo import RuntimeInfoView
-from zope.app.applicationcontrol.browser.zodbcontrol import ZODBControlView
-from zope.app.applicationcontrol.applicationcontrol import applicationController
+from zope.size import byteDisplay
+from ZODB.interfaces import IDatabase
+from zope.applicationcontrol.interfaces import IServerControl
+from zope.applicationcontrol.interfaces import IRuntimeInfo
+from zope.applicationcontrol.applicationcontrol import applicationController
 
+from zope.i18nmessageid import MessageFactory
+
+_ = MessageFactory('grokui')
 grok.templatedir("templates")
 
 
-class Server(AdminView, ZODBControlView):
+class Server(AdminView):
     """Zope3 management screen.
     """
     grok.title('Server')
     grok.require('grok.ManageApplications')
 
+    _fields = (
+        "ZopeVersion",
+        "PythonVersion",
+        "PythonPath",
+        "SystemPlatform",
+        "PreferredEncoding",
+        "FileSystemEncoding",
+        "CommandLine",
+        "ProcessId",
+        "DeveloperMode",
+        )
+    
+    _unavailable = _("Unavailable")
+
     @property
     def grok_version(self):
         return getVersion('grok')
@@ -74,14 +92,44 @@
     
     @property
     def server_control(self):
-        return zope.component.queryUtility(IServerControl, '', None)
+        return zope.component.queryUtility(IServerControl)
 
     @property
     def runtime_info(self):
-        riv = RuntimeInfoView()
-        riv.context = applicationController
-        return riv.runtimeInfo()
+        try:
+            ri = IRuntimeInfo(self.context)
+        except TypeError:
+            formatted = dict.fromkeys(self._fields, self._unavailable)
+            formatted["Uptime"] = self._unavailable
+        else:
+            formatted = self._getInfo(ri)
+        return formatted
 
+    def _getInfo(self, ri):
+        formatted = {}
+        for name in self._fields:
+            try:
+                value = getattr(ri, "get" + name)()
+            except ValueError:
+                value = self._unavailable
+            formatted[name] = value
+        formatted["Uptime"] = self._getUptime(ri)
+        return formatted
+
+    def _getUptime(self, ri):
+        # make a unix "uptime" uptime format
+        uptime = long(ri.getUptime())
+        minutes, seconds = divmod(uptime, 60)
+        hours, minutes = divmod(minutes, 60)
+        days, hours = divmod(hours, 24)
+
+        return _('${days} day(s) ${hours}:${minutes}:${seconds}',
+                 mapping = {'days': '%d' % days,
+                            'hours': '%02d' % hours,
+                            'minutes': '%02d' % minutes,
+                            'seconds': '%02d' % seconds})
+
+
     @property
     def current_message(self):
         source = zope.component.getUtility(
@@ -146,6 +194,24 @@
 
         self.redirect(self.url())
 
+    @property
+    def databases(self):
+        res = []
+        for name, db in zope.component.getUtilitiesFor(IDatabase):
+            d = dict(dbName = db.getName(),
+                     utilName = str(name),
+                     size = self._getSize(db),
+                     )
+            res.append(d)
+        return res
+            
+    def _getSize(self, db):
+        """Get the database size in a human readable format."""
+        size = db.getSize()        
+        if not isinstance(size, (int, long, float)):
+            return str(size)
+        return byteDisplay(size)
+
     def pack(self, dbName, days):
         try:
             days = int(days)



More information about the checkins mailing list