[Checkins] SVN: Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/ initial support for <genericsetup:upgradeDepends> ZCML tag, tests coming next

Rob Miller ra at burningman.com
Wed Aug 6 20:01:37 EDT 2008


Log message for revision 89476:
  initial support for <genericsetup:upgradeDepends> ZCML tag, tests coming next
  

Changed:
  U   Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/meta.zcml
  U   Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/upgrade.py
  U   Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/zcml.py

-=-
Modified: Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/meta.zcml
===================================================================
--- Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/meta.zcml	2008-08-06 22:38:01 UTC (rev 89475)
+++ Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/meta.zcml	2008-08-07 00:01:35 UTC (rev 89476)
@@ -15,17 +15,16 @@
         schema=".zcml.IExportStepDirective"
         handler=".zcml.exportStep"
         />
+
     <meta:complexDirective
         name="importStep"
         schema=".zcml.IImportStepDirective"
         handler=".zcml.importStep"
         >
-
       <meta:subdirective
           name="depends"
           schema=".zcml.IImportStepDependsDirective"
           />
-
     </meta:complexDirective>
 
     <meta:directive
@@ -34,17 +33,25 @@
         handler=".zcml.upgradeStep"
         />
 
+    <meta:directive
+       name="upgradeDepends"
+       schema=".zcml.IUpgradeDependsDirective"
+       handler=".zcml.upgradeDepends"
+       />
+
     <meta:complexDirective
         name="upgradeSteps"
         schema=".zcml.IUpgradeStepsDirective"
         handler=".zcml.upgradeSteps"
         >
-       
       <meta:subdirective
-          name="upgradeStep"
-          schema=".zcml.IUpgradeStepsStepSubDirective"
-          />
-
+         name="upgradeStep"
+         schema=".zcml.IUpgradeStepsStepSubDirective"
+         />
+      <meta:subdirective
+         name="upgradeDepends"
+         schema=".zcml.IUpgradeDependsSubDirective"
+         />
     </meta:complexDirective>
         
 

Modified: Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/upgrade.py
===================================================================
--- Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/upgrade.py	2008-08-06 22:38:01 UTC (rev 89475)
+++ Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/upgrade.py	2008-08-07 00:01:35 UTC (rev 89476)
@@ -78,11 +78,12 @@
 
 _upgrade_registry = UpgradeRegistry()
 
-class UpgradeStep(object):
-    """A step to upgrade a component.
+class UpgradeEntity(object):
     """
-    def __init__(self, title, profile, source, dest, desc, handler,
-                 checker=None, sortkey=0):
+    Base class for actions to be taken during an upgrade process.
+    """
+    def __init__(self, title, profile, source, dest, desc, checker=None,
+                 sortkey=0):
         self.id = str(abs(hash('%s%s%s%s' % (title, source, dest, sortkey))))
         self.title = title
         if source == '*':
@@ -96,7 +97,6 @@
             dest = tuple(dest.split('.'))
         self.dest = dest
         self.description = desc
-        self.handler = handler
         self.checker = checker
         self.sortkey = sortkey
         self.profile = profile
@@ -125,9 +125,46 @@
         else:
             return checker(tool)
 
+    
+class UpgradeStep(UpgradeEntity):
+    """A step to upgrade a component.
+    """
+    def __init__(self, title, profile, source, dest, desc, handler,
+                 checker=None, sortkey=0):
+        super(UpgradeStep, self).__init__(title, profile, source, dest,
+                                          desc, checker, sortkey)
+        self.handler = handler
+
     def doStep(self, tool):
         self.handler(tool)
 
+
+class UpgradeDepends(UpgradeEntity):
+    """A specialized upgrade step that re-runs a particular import
+    step from the profile.
+    """
+    def __init__(self, title, profile, source, dest, desc, steps=[],
+                 run_deps=False, purge=False, checker=None, sortkey=0):
+        super(UpgradeStep, self).__init__(title, profile, source, dest,
+                                          desc, checker, sortkey)
+        self.steps = steps
+        self.run_deps = run_deps
+        self.purge = purge
+
+    def doStep(self, tool):
+        if self.steps:
+            for step in self.steps:
+                tool.runImportStepFromProfile(self.profile, step,
+                                              run_dependencies=self.run_deps,
+                                              purge_old=self.purge)
+        else:
+            # if no steps are specified we assume we want to reimport
+            # the entire profile
+            ign_deps = not self.run_deps
+            tool.runAllImportStepsFromProfile(self.profile,
+                                              purge_old=self.purge,
+                                              ignore_dependendencies=ign_deps)
+
 def _registerUpgradeStep(step):
     profile_id = step.profile
     profile_steps = _upgrade_registry.getUpgradeStepsForProfile(profile_id)

Modified: Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/zcml.py
===================================================================
--- Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/zcml.py	2008-08-06 22:38:01 UTC (rev 89475)
+++ Products.GenericSetup/branches/ra-depends-tag/Products/GenericSetup/zcml.py	2008-08-07 00:01:35 UTC (rev 89476)
@@ -197,6 +197,7 @@
 
 import zope.schema
 from upgrade import UpgradeStep
+from upgrade import UpgradeDepends
 from upgrade import _registerUpgradeStep
 from upgrade import _registerNestedUpgradeStep
 
@@ -242,10 +243,47 @@
 
 class IUpgradeStepDirective(IUpgradeStepsDirective, IUpgradeStepsStepSubDirective):
     """
-    Define multiple upgrade steps without repeating all of the parameters
+    Define a standalone upgrade step
     """
 
+class IUpgradeDependsSubDirective(Interface):
+    """
+    Define a profile import step dependency of an upgrade process
+    (i.e. a profile step that should be reimported when performing an
+    upgrade due to a profile change.
+    """
+    title = zope.schema.TextLine(
+        title=u"Title",
+        required=True,
+        )
 
+    description = zope.schema.TextLine(
+        title=u"Upgrade dependency description",
+        required=False,
+        )
+
+    import_steps = zope.schema.List(
+        title=u"Import steps to rerun",
+        required=False,
+        value_type=zope.schema.TextLine(title=u"Import step"),
+        )
+
+    run_deps = zope.schema.Bool(
+        title=u"Run import step dependencies?",
+        required=False,
+        )
+
+    purge = zope.schema.Bool(
+        title=u"Import steps w/ purge=True?",
+        required=False,
+        )
+        
+class IUpgradeDependsDirective(IUpgradeStepsDirective,
+                               IUpgradeDependsSubDirective):
+    """
+    Define a standalone upgrade profile import step dependency
+    """
+
 def upgradeStep(_context, title, profile, handler, description=None, source='*',
                 destination='*', sortkey=0, checker=None):
     step = UpgradeStep(title, profile, source, destination, description, handler,
@@ -256,6 +294,19 @@
         args = (step,),
         )
 
+def upgradeDepends(_context, title, profile, description, import_steps=[],
+                   source='*', destination='*', run_deps=False, purge=False,
+                   checker=None, sortkey=0):
+    step = UpgradeDepends(title, profile, source, destination, description,
+                          import_steps, run_deps, purge, checker, sortkey)
+    _context.action(
+        discriminator = ('upgradeDepends', source, destination, import_steps,
+                         checker, sortkey),
+        callable = _registerUpgradeStep,
+        args = (step,),
+        )
+
+
 class upgradeSteps(object):
     """
     Allows nested upgrade steps.
@@ -269,6 +320,7 @@
 
     def upgradeStep(self, _context, title, handler,
                     description=None, checker=None):
+        """ nested upgradeStep directive """
         step = UpgradeStep(title, self.profile, self.source, self.dest,
                            description, handler, checker, self.sortkey)
         if self.id is None:
@@ -281,6 +333,22 @@
             args = (step, self.id),
             )
 
+    def upgradeDepends(self, _context, title, description=None, import_steps=[],
+                       run_deps=False, purge=False, checker=None):
+        """ nested upgradeDepends directive """
+        step = UpgradeDepends(title, self.profile, self.source, self.dest,
+                              description, import_steps, run_deps, purge,
+                              checker, self.sortkey)
+        if self.id is None:
+            self.id = str(abs(hash('%s%s%s%s' % (title, self.source, self.dest,
+                                                 self.sortkey))))
+        _context.action(
+            discriminator = ('upgradeDepends', self.source, self.dest,
+                             import_steps, self.sortkey),
+            callable = _registerNestedUpgradeStep,
+            args = (step, self.id)
+            )
+
     def __call__(self):
         return ()
 



More information about the Checkins mailing list