[Checkins] SVN: grokui.admin/branches/fancy-layout/s Notifier is not created only is enabled.
Souheil CHELFOUH
souheil at chelfouh.com
Fri Jan 29 05:02:06 EST 2010
Log message for revision 108626:
Notifier is not created only is enabled.
Changed:
U grokui.admin/branches/fancy-layout/setup.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/__init__.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/security.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/server.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin_functional.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/utilities.py
U grokui.admin/branches/fancy-layout/src/grokui/admin/view.py
-=-
Modified: grokui.admin/branches/fancy-layout/setup.py
===================================================================
--- grokui.admin/branches/fancy-layout/setup.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/setup.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -20,7 +20,6 @@
'\n\n' +
read('CHANGES.txt')
),
- # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
classifiers=[
'Development Status :: 3 - Alpha',
'Environment :: Web Environment',
@@ -40,7 +39,7 @@
packages=find_packages('src'),
include_package_data=True,
zip_safe=False,
- namespace_packages = ['grokui'],
+ namespace_packages=['grokui'],
install_requires=[
'ZODB3',
'grok',
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/__init__.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/__init__.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/__init__.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -12,11 +12,3 @@
#
##############################################################################
# a package
-import grok
-class Test(grok.Application, grok.Container):
- """My super application
- """
-
-class Other(grok.Application, grok.Container):
- """My other application
- """
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/security.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/security.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/security.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -15,7 +15,9 @@
from grokui.admin.utilities import getVersion, TimeoutableHTTPHandler
from grokui.base import Header, Messages, IGrokUIRealm
+MSG_DISABLED = u'Security notifications are disabled.'
+
class SecurityNotificationViewlet(grok.Viewlet):
"""Viewlet displaying notifications from a local `SecurityNotifier`.
"""
@@ -35,6 +37,9 @@
return site_manager.queryUtility(ISecurityNotifier, default=None)
def render(self):
+ notifier = self.security_notifier
+ if notifier is None:
+ return u""
return '''<div class="grokui-security message">%s</div>''' % (
self.security_notifier.getNotification())
@@ -45,11 +50,9 @@
It can be placed in a site to store notification dates and other
data persistently.
"""
-
grok.implements(ISecurityNotifier)
VERSION = 1 # for possibly updates/downgrades
- MSG_DISABLED = u'Security notifications are disabled.'
DEFAULT_URL = 'http://grok.zope.org/releaseinfo/'
lookup_url = DEFAULT_URL
@@ -78,7 +81,7 @@
"""Get the current security notification.
"""
if self.enabled is False:
- return self.MSG_DISABLED
+ return MSG_DISABLED
self.updateMessage()
return self._message
@@ -123,7 +126,7 @@
except:
# An unexpected problem occured...
pass
- if self._message == self.MSG_DISABLED:
+ if self._message == MSG_DISABLED:
self._message = u''
self.last_lookup = time.time()
return
@@ -142,38 +145,3 @@
"""
self.last_display = time.time()
return
-
-
-def setupSecurityNotification(site):
- """Setup a SecurityNotifier as persistent utility.
-
- The utility is installed as a local and persistent utility. It is
- local to `site` and installed under the name
- ``grokadmin_security`` in the site manager of `site`.
-
- It can be retrieved with a call like::
-
- site.getSiteManager().getUtiliy(ISecurityNotifier)
-
- See also ``security.py`` in ``tests``.
- """
- site_manager = site.getSiteManager()
- if 'grokadmin_security' not in site_manager:
- site_manager['grokadmin_security'] = SecurityNotifier()
- utility = site_manager['grokadmin_security']
- site_manager.registerUtility(utility, ISecurityNotifier, name=u'')
- return
-
-
- at adapter(IDatabaseOpenedWithRootEvent)
-def securitySetupHandler(event):
- """Call security notification setup as soon as DB is ready.
- """
- from zope.app.appsetup.bootstrap import getInformationFromEvent
-
- db, connection, root, root_folder = getInformationFromEvent(event)
- setupSecurityNotification(root_folder)
-
-
-# ...then install the event handler:
-provideHandler(securitySetupHandler)
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/server.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/server.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/server.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -6,17 +6,15 @@
from grokui.base.layout import GrokUIView
from grokui.admin.interfaces import ISecurityNotifier
from grokui.admin.utilities import getVersion
+from grokui.admin.security import SecurityNotifier
from ZODB.interfaces import IDatabase
from ZODB.FileStorage.FileStorage import FileStorageError
-import zope.component
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.interfaces import IServerControl, IRuntimeInfo
from zope.applicationcontrol.applicationcontrol import applicationController
-
+from zope.component import getUtility, queryUtility, getUtilitiesFor
from zope.i18nmessageid import MessageFactory
_ = MessageFactory('grokui')
@@ -80,7 +78,6 @@
@property
def secnotes_enabled(self):
if self.security_notifier is None:
- # Safety belt if installation of notifier failed
return False
return self.security_notifier.enabled
@@ -92,7 +89,7 @@
@property
def server_control(self):
- return zope.component.queryUtility(IServerControl)
+ return queryUtility(IServerControl)
@property
def runtime_info(self):
@@ -133,7 +130,7 @@
@property
def current_message(self):
- source = zope.component.getUtility(
+ source = getUtility(
z3c.flashmessage.interfaces.IMessageSource, name='admin')
messages = list(source.list())
if messages:
@@ -142,7 +139,14 @@
def updateSecurityNotifier(self, setsecnotes=None, setsecnotesource=None,
secnotesource=None):
if self.security_notifier is None:
- return
+ site = grok.getSite()
+ site_manager = site.getSiteManager()
+ if 'grokadmin_security' not in site_manager:
+ site_manager['grokadmin_security'] = SecurityNotifier()
+ utility = site_manager['grokadmin_security']
+ site_manager.registerUtility(
+ utility, ISecurityNotifier, name=u'')
+
if setsecnotesource is not None:
self.security_notifier.setLookupURL(secnotesource)
if setsecnotes is not None:
@@ -172,7 +176,7 @@
return
# Admin message control
- source = zope.component.getUtility(
+ source = getUtility(
z3c.flashmessage.interfaces.IMessageSource, name='admin')
if admin_message is not None:
source.send(admin_message)
@@ -198,7 +202,7 @@
@property
def databases(self):
res = []
- for name, db in zope.component.getUtilitiesFor(IDatabase):
+ for name, db in getUtilitiesFor(IDatabase):
d = dict(dbName = db.getName(),
utilName = str(name),
size = self._getSize(db),
@@ -219,7 +223,7 @@
except ValueError:
flash('Error: Invalid Number')
return
- db = zope.component.getUtility(IDatabase, name=dbName)
+ db = getUtility(IDatabase, name=dbName)
print "DB: ", db, days
db.pack(days=days)
return
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -149,43 +149,26 @@
Currently, as `grokui.admin` is merely a collection of views bound to
root folders, also the security notification utility is normally
-managed by the local site manager of the root folder::
+managed by the local site manager of the root folder.
- >>> root = getRootFolder()
- >>> sm = root.getSiteManager()
-
-Now we can lookup the utility::
-
- >>> from grokui.admin.interfaces import ISecurityNotifier
- >>> notifier = sm.getUtility(ISecurityNotifier)
- >>> notifier
- <grokui.admin.security.SecurityNotifier object at 0x...>
-
The utility is local, because different root folders might want
different settings for security notifications.
The utility is persistent, so that the settings are preserved when
shutting down.
-Immediately after startup, the notifier exists, but is disabled::
+Immediately after startup, the notifier doesn't exists::
- >>> notifier.enabled
- False
+ >>> from grokui.admin.interfaces import ISecurityNotifier
+
+ >>> root = getRootFolder()
+ >>> sm = root.getSiteManager()
+ >>> notifier = sm.queryUtility(ISecurityNotifier)
+ >>> notifier is None
+ True
-We can get notifications, of course::
+We log into the admin screen to set a new notifier URL::
- >>> notifier.getNotification()
- u'Security notifications are disabled.'
-
-We can check in a formal way, whether the current notification is a
-warning::
-
- >>> notifier.isWarning()
- False
-
-The notifier we got here is the same as when using the UI. We log into
-the admin screen to set a new notifier URL::
-
>>> from zope.testbrowser.testing import Browser
>>> browser = Browser()
>>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin_functional.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin_functional.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin_functional.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -16,10 +16,6 @@
def setUp(test):
FunctionalTestSetup().setUp()
- # In functional tests no IDatabaseOpenedWithRootEvent are fired. We
- # therefore have to setup security notifications manually
- from grokui.admin.security import setupSecurityNotification
- setupSecurityNotification(getRootFolder())
def tearDown(test):
FunctionalTestSetup().tearDown()
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/utilities.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/utilities.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/utilities.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -35,7 +35,6 @@
"""A customised HTTPConnection allowing a per-connection
timeout, specified at construction.
"""
-
def __init__(self, host, port=None, strict=None, timeout=None):
httplib.HTTPConnection.__init__(self, host, port,
strict)
@@ -68,7 +67,6 @@
"""A customised HTTPHandler which times out connection
after the duration specified at construction.
"""
-
def __init__(self, timeout=None):
urllib2.HTTPHandler.__init__(self)
self.timeout = timeout
@@ -81,4 +79,3 @@
timeout = self.timeout)
return self.do_open(makeConnection, req)
-
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/view.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/view.py 2010-01-28 21:51:51 UTC (rev 108625)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/view.py 2010-01-29 10:02:05 UTC (rev 108626)
@@ -2,16 +2,17 @@
"""Views for the grok admin UI"""
import grok
-import zope.component
from BTrees.OOBTree import OOBTree
from grokui.base import IGrokUIRealm, GrokUIView
from grokui.admin.interfaces import ISecurityNotifier
from grokui.admin.utilities import getVersion, getURLWithParams
+from grokui.admin.security import MSG_DISABLED
from zope.site.interfaces import IRootFolder
from zope.exceptions import DuplicationError
-
+from zope.component import getUtility, queryUtility
+
grok.context(IGrokUIRealm)
grok.templatedir("templates")
@@ -56,10 +57,9 @@
grok.require('grok.ManageApplications')
def render(self):
- site = grok.getSite()
- site_manager = site.getSiteManager()
- notifier = site_manager.queryUtility(ISecurityNotifier, default=None)
- return notifier.getNotification()
+ notifier = queryUtility(ISecurityNotifier, default=None)
+ return (notifier is not None and notifier.getNotification()
+ or MSG_DISABLED)
class Add(grok.View):
@@ -80,8 +80,7 @@
if name is None or name == "":
self.redirect(self.url(self.context, 'applications'))
return
- app = zope.component.getUtility(grok.interfaces.IApplication,
- name=application)
+ app = getUtility(grok.interfaces.IApplication, name=application)
try:
new_app = app()
grok.notify(grok.ObjectCreatedEvent(new_app))
More information about the checkins
mailing list