SVN: PluginRegistry/trunk/ Wired in DAV / FTP / ExternalEditor support for the registry, along with a ZMI form for updating it as XML.

Tres Seaver <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 39898:
  Wired in DAV / FTP / ExternalEditor support for the registry, along with a ZMI form for updating it as XML.
  
  

Changed:
  U   PluginRegistry/trunk/CHANGES.txt
  U   PluginRegistry/trunk/PluginRegistry.py
  U   PluginRegistry/trunk/exportimport.py
  A   PluginRegistry/trunk/www/export_import.zpt

-=-
Modified: PluginRegistry/trunk/CHANGES.txt
===================================================================
--- PluginRegistry/trunk/CHANGES.txt	2005-11-04 21:38:03 UTC (rev 39897)
+++ PluginRegistry/trunk/CHANGES.txt	2005-11-04 22:53:48 UTC (rev 39898)
@@ -3,6 +3,9 @@
 
   After PluginRegistry-1.0.2
 
+    - Wired in DAV / FTP / ExternalEditor support for the registry,
+      along with a ZMI form for updating it as XML.
+
     - Added support for exporting / importing registry via GenericSetup.
       
     - Saner version name

Modified: PluginRegistry/trunk/PluginRegistry.py
===================================================================
--- PluginRegistry/trunk/PluginRegistry.py	2005-11-04 21:38:03 UTC (rev 39897)
+++ PluginRegistry/trunk/PluginRegistry.py	2005-11-04 22:53:48 UTC (rev 39898)
@@ -25,11 +25,19 @@
 from Persistence import PersistentMapping
 from OFS.SimpleItem import SimpleItem
 from App.class_init import default__class_init__ as InitializeClass
+from webdav.WriteLockInterface import WriteLockInterface
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.Expressions import getEngine
 from Products.PageTemplates.Expressions import SecureModuleImporter
 
 from interfaces.plugins import IPluginRegistry
+try:
+    from exportimport import _updatePluginRegistry
+except ImportError:
+    _HAS_GENERIC_SETUP = False
+else:
+    _HAS_GENERIC_SETUP = True
+
 from utils import _wwwdir
 
 class PluginRegistry( SimpleItem ):
@@ -38,7 +46,7 @@
 
     o Each plugin type holds an ordered list of ( id, wrapper ) tuples.
     """
-    __implements__ = ( IPluginRegistry, )
+    __implements__ = ( IPluginRegistry, WriteLockInterface )
 
     security = ClassSecurityInfo()
 
@@ -315,6 +323,48 @@
                    + SimpleItem.manage_options
                    )
 
+    if _HAS_GENERIC_SETUP:
+        security.declareProtected( ManageUsers, 'manage_exportImportForm' )
+        manage_exportImportForm = PageTemplateFile( 'export_import', _wwwdir )
+
+        security.declareProtected( ManageUsers, 'getConfigAsXML' )
+        def getConfigAsXML(self):
+            """ Return XML representing the registry's configuration.
+            """
+            from exportimport import PluginRegistryExporter
+            pre = PluginRegistryExporter(self).__of__(self)
+            return pre.generateXML()
+
+        security.declareProtected( ManageUsers, 'manage_exportImport' )
+        def manage_exportImport(self, updated_xml, should_purge, RESPONSE):
+            """ Parse XML and update the registry.
+            """
+            #XXX encoding?
+            _updatePluginRegistry(self, updated_xml, should_purge)
+            RESPONSE.redirect('%s/manage_exportImportForm'
+                              '?manage_tabs_message=Registry+updated.'
+                                % self.absolute_url())
+
+        security.declareProtected( ManageUsers, 'manage_FTPget' )
+        def manage_FTPget(self, REQUEST, RESPONSE):
+            """
+            """
+            return self.getConfigAsXML()
+
+        security.declareProtected( ManageUsers, 'PUT' )
+        def PUT(self, REQUEST, RESPONSE):
+            """
+            """
+            xml = REQUEST['BODYFILE'].read()
+            _updatePluginRegistry(self, xml, True)
+
+        manage_options = ( manage_options[:2]
+                         + ( { 'label' : 'Export / Import'
+                             , 'action' : 'manage_exportImportForm'
+                             },)
+                         + manage_options[2:]
+                         )
+
     #
     #   Helper methods
     #

Modified: PluginRegistry/trunk/exportimport.py
===================================================================
--- PluginRegistry/trunk/exportimport.py	2005-11-04 21:38:03 UTC (rev 39897)
+++ PluginRegistry/trunk/exportimport.py	2005-11-04 22:53:48 UTC (rev 39898)
@@ -59,18 +59,10 @@
 
     return 'Plugin registry exported.'
 
-def importPluginRegistry(context):
-    """ Import plugin registry from an XML file.
-    """
-    registry = _getRegistry(context.getSite())
-    encoding = context.getEncoding()
+def _updatePluginRegistry(registry, xml, should_purge, encoding=None):
 
-    xml = context.readDataFile(_FILENAME)
-    if xml is None:
-        return 'Site properties: Nothing to import.'
+    if should_purge:
 
-    if context.shouldPurge():
-
         registry._plugin_types = []
         registry._plugin_type_info = PersistentMapping()
         registry._plugins = PersistentMapping()
@@ -87,6 +79,18 @@
                                             }
         registry._plugins[iface] = tuple([x['id'] for x in info['plugins']])
 
+def importPluginRegistry(context):
+    """ Import plugin registry from an XML file.
+    """
+    registry = _getRegistry(context.getSite())
+    encoding = context.getEncoding()
+
+    xml = context.readDataFile(_FILENAME)
+    if xml is None:
+        return 'Site properties: Nothing to import.'
+
+    _updatePluginRegistry(registry, xml, context.shouldPurge(), encoding)
+
     return 'Plugin registry imported.'
 
 class PluginRegistryExporter(ExportConfiguratorBase):

Added: PluginRegistry/trunk/www/export_import.zpt
===================================================================
--- PluginRegistry/trunk/www/export_import.zpt	2005-11-04 21:38:03 UTC (rev 39897)
+++ PluginRegistry/trunk/www/export_import.zpt	2005-11-04 22:53:48 UTC (rev 39898)
@@ -0,0 +1,45 @@
+<h1 tal:replace="structure here/manage_page_header"> PAGE HEADER </h1>
+<h2 tal:replace="structure here/manage_tabs"> TABS </h2>
+
+<h3> Export / Import Registry Configuration </h3>
+
+<p class="form-help">
+  This view allows you to view and edit the registry configuration as
+  a single XML document.
+</p>
+
+<form action="." method="POST" enctype="multipart/form-data"
+      tal:attributes="action
+                        string:${context/absolute_url}/manage_exportImportForm;
+                     ">
+<table>
+
+ <tr>
+  <th> Purge old config? </th>
+  <td>
+   <input type="hidden" name="should_purge:default:int" value="0" />
+   <input type="checkbox" name="should_purge:int" value="1" checked="checked" />
+  </td>
+ </tr>
+
+ <tr>
+  <th> Configuration </th>
+  <td>
+   <textarea name="xml:text" rows="30" cols="80"
+             tal:content="context/getConfigAsXML"
+   ></textarea>
+  </td>
+ </tr>
+
+ <tr>
+  <td />
+  <td>
+   <input type="submit" value=" Save " />
+  </td>
+ </tr>
+
+</table>
+</form>
+
+<h1 tal:replace="structure here/manage_page_footer"> PAGE FOOTER </h1>
+


Property changes on: PluginRegistry/trunk/www/export_import.zpt
___________________________________________________________________
Name: svn:eol-style
   + native

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.