Author: jmorliaguet
Date: Fri Mar 24 11:33:42 2006
New Revision: 2712

Modified:
   cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml
   cpsskins/branches/jmo-perspectives/setup/README.txt
   cpsskins/branches/jmo-perspectives/setup/configure.zcml
   cpsskins/branches/jmo-perspectives/setup/registration.py
   cpsskins/branches/jmo-perspectives/ui/panels/settings_section.pt
   cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/configure.zcml
   cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py
Log:

- fixes / test updates

- new settings can now be added without restarting the server

- added a 'refreshSettings' page to refresh all settings TTW



Modified: cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml
==============================================================================
--- cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml        
(original)
+++ cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml        
Fri Mar 24 11:33:42 2006
@@ -1,4 +1,9 @@
 <?xml version="1.0" encoding="utf-8" ?>
-<setting name="perspective.global" title="Global perspective">
-  <perspective name="perspective.global" title="Global perspective" />
-</setting>
+<settings>
+  <setting name="perspective.global" title="Global perspective">
+    <perspective name="perspective.global" title="Global perspective" />
+  </setting>
+  <setting name="perspective.global2" title="Global perspective 2">
+    <perspective name="perspective.global" title="Global perspective 2" />
+  </setting>
+</settings>

Modified: cpsskins/branches/jmo-perspectives/setup/README.txt
==============================================================================
--- cpsskins/branches/jmo-perspectives/setup/README.txt (original)
+++ cpsskins/branches/jmo-perspectives/setup/README.txt Fri Mar 24 11:33:42 2006
@@ -242,8 +242,7 @@
     >>> from cpsskins.setup.registration import register, loadSettings
 
     >>> register('cpsskins.setup.test', 'resource4.xml')
-    >>> event = object()
-    >>> loadSettings(event)
+    >>> loadSettings()
 
     >>> pprint(resources.list(type=IDummyResource))
     [<Dummy resource: resource1>,
@@ -260,7 +259,6 @@
 File-system resources can be reloaded:
 
     >>> from cpsskins.setup.registration import reloadSetting
-
     >>> reloadSetting(u'test.setting4')
 
 Resources created through-the-web cannot be reloaded:
@@ -270,4 +268,10 @@
     ...
     TypeError: The setting is not a file-system setting.
 
+File-system resources can also be refreshed:
+
+    >>> from cpsskins.setup.registration import refreshSettings
+    >>> refreshSettings()
 
+In that case the file's modification date is compared with the date when the
+settings where last loaded.

Modified: cpsskins/branches/jmo-perspectives/setup/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/setup/configure.zcml     (original)
+++ cpsskins/branches/jmo-perspectives/setup/configure.zcml     Fri Mar 24 
11:33:42 2006
@@ -22,13 +22,13 @@
 
   <!-- register global application settings -->
   <subscriber
-      handler=".registration.loadSettings"
+      handler=".registration.loadSettingsEvent"
       for="zope.app.appsetup.IDatabaseOpenedEvent"
   />
 
   <!-- refresh settings in dev mode -->
   <subscriber
-      handler=".registration.refreshSettings"
+      handler=".registration.refreshSettingsEvent"
       for="cpsskins.browser.rendering.interfaces.IViewNodeEvent"
       zcml:condition="have devmode"
   />

Modified: cpsskins/branches/jmo-perspectives/setup/registration.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/setup/registration.py    (original)
+++ cpsskins/branches/jmo-perspectives/setup/registration.py    Fri Mar 24 
11:33:42 2006
@@ -25,7 +25,7 @@
 from xml.dom.minidom import parse
 from xml.parsers.expat import ExpatError
 
-from zope.component import getUtility, createObject
+from zope.component import getUtility, queryUtility, createObject
 
 from cpsskins.io.interfaces import IDataImporter
 from cpsskins.setup.interfaces import IResourceManager
@@ -47,7 +47,7 @@
 # Events
 #######################################################################
 
-def loadSettings(event):
+def loadSettings():
     """Load all registered settings.
     """
     resources = getUtility(IResourceManager)
@@ -55,39 +55,62 @@
     for file in files:
         filename = file['filename']
         dom = parse(filename)
-        for setting in dom.getElementsByTagName('setting'):
-            name = setting.getAttribute('name')
-            title = setting.getAttribute('title')
-
-            resource = setting.getElementsByTagName('*')
-            if not resource:
-                logger.debug("no resource found for %s" % name)
+        for setting_def in dom.getElementsByTagName('setting'):
+            name = setting_def.getAttribute('name')
+            title = setting_def.getAttribute('title')
+            resource = _loadResourceFromXML(setting_def, name, title)
+            if resource is None:
                 continue
-            resource = resource[0]
-
-            # create the resource
-            resource_object = createObject(resource.tagName)
-
-            # load the data
-            IDataImporter(resource_object).load(resource.toxml())
-
-            # register the resource
-            resources.register(name=name, title=title, 
resource=resource_object,
+            resources.register(name=name, title=title, resource=resource,
                                filename=filename)
 
             file['refresh_date'] = time.time()
 
         logger.debug("loaded settings in %s", filename)
 
-def refreshSettings(event):
+def _loadResourceFromXML(setting_def=None, name=u'', title=u'', filename=u''):
+    resources = getUtility(IResourceManager)
+
+    resource_defs = setting_def.getElementsByTagName('*')
+    if not resource_defs:
+        logger.debug("no resource found for %s" % name)
+        return None
+
+    resource_def = resource_defs[0]
+
+    setting = queryUtility(ISetting, name, None)
+    if setting is None:
+        # create the resource
+        resource = createObject(resource_def.tagName)
+        resources.register(name=name, title=title,
+                           resource=resource, filename=filename)
+        logger.debug("new setting added: '%s'", name)
+    else:
+        resource = IResource(setting).getResource()
+        setting.title = title
+        logger.debug("reloaded setting %s in %s", name, filename)
+
+    # load the data
+    IDataImporter(resource).load(resource_def.toxml())
+    return resource
+
+
+def refreshSettings():
     """Refresh all settings that have been modified on the filesystem.
     """
     for file in files:
-        refresh_date = file['refresh_date']
+        refresh_date = file.get('refresh_date', 0)
         filename = file['filename']
         if refresh_date > os.path.getmtime(filename):
             continue
         _reload(filename=filename)
+        file['refresh_date'] = time.time()
+
+def refreshSettingsEvent(event):
+    refreshSettings()
+
+def loadSettingsEvent(event):
+    loadSettings()
 
 #######################################################################
 # Reloading settings
@@ -102,9 +125,9 @@
     if not filename:
         raise TypeError("The setting is not a file-system setting.")
 
-    _reload(name=name, filename=filename)
+    _reload(setting_name=name, filename=filename)
 
-def _reload(name=u'', filename=None):
+def _reload(setting_name=u'', filename=u''):
     """Reload the settings in a file
     """
     try:
@@ -113,22 +136,13 @@
         logger.warning("could not parse %s - not reloading", filename)
         return
 
-    for setting_node in dom.getElementsByTagName('setting'):
-        setting_name = setting_node.getAttribute('name')
-        if name and setting_name != name:
+    for setting_def in dom.getElementsByTagName('setting'):
+        name = setting_def.getAttribute('name')
+        title = setting_def.getAttribute('title')
+        if setting_name and name != setting_name:
             continue
 
-        resource = setting_node.getElementsByTagName('*')
-        if not resource:
-            break
-        resource = resource[0]
-
-        setting = getUtility(ISetting, setting_name)
-        resource_object = IResource(setting).getResource()
-        IDataImporter(resource_object).load(resource.toxml())
-
-        if name:
-            logger.debug("reloaded setting %s in %s", name, filename)
+        _loadResourceFromXML(setting_def, name, title, filename)
 
     if not name:
-        logger.debug("reloaded settings in %s", filename)
+        logger.debug("reloaded all settings in %s", filename)

Modified: cpsskins/branches/jmo-perspectives/ui/panels/settings_section.pt
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/panels/settings_section.pt    
(original)
+++ cpsskins/branches/jmo-perspectives/ui/panels/settings_section.pt    Fri Mar 
24 11:33:42 2006
@@ -18,6 +18,9 @@
              tal:condition="readonly">[reload]</a>
         </tal:block>
       </li>
+      <li>
+        <a tal:attributes="href string:@@refreshSettings">[refresh]</a>
+      </li>
     </ul>
   </div>
   <div tal:condition="not:section">

Modified: 
cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/configure.zcml    
(original)
+++ cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/configure.zcml    
Fri Mar 24 11:33:42 2006
@@ -52,6 +52,11 @@
         attribute="reloadSetting"
     />
 
+    <page
+        name="refreshSettings"
+        attribute="refreshSettings"
+    />
+
   </pages>
 
 </configure>

Modified: cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py  
(original)
+++ cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py  Fri Mar 
24 11:33:42 2006
@@ -27,7 +27,7 @@
 from cpsskins.setup.interfaces import ISetting, IGlobalSetting
 from cpsskins.setup.interfaces import IResourceType, IResourceManager, 
IResource
 from cpsskins.io.interfaces import IDataExporter
-from cpsskins.setup.registration import reloadSetting
+from cpsskins.setup.registration import reloadSetting, refreshSettings
 
 setting_xml = """<?xml version="1.0"?>
 <setting name="%(name)s" title="%(title)s">
@@ -109,3 +109,8 @@
         """Reload the setting from the file-system
         """
         reloadSetting(name)
+
+    def refreshSettings(self):
+        """Refresh all settings stored on the file-system
+        """
+        refreshSettings()
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to