[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