[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