[Checkins] SVN: z3ext.product/trunk/ Added product dependencies (required attribute)
Nikolay Kim
fafhrd at datacom.kz
Tue Sep 2 08:33:06 EDT 2008
Log message for revision 90697:
Added product dependencies (required attribute)
Changed:
U z3ext.product/trunk/CHANGES.txt
U z3ext.product/trunk/src/z3ext/product/interfaces.py
U z3ext.product/trunk/src/z3ext/product/product.py
U z3ext.product/trunk/src/z3ext/product/zcml.py
-=-
Modified: z3ext.product/trunk/CHANGES.txt
===================================================================
--- z3ext.product/trunk/CHANGES.txt 2008-09-02 12:29:54 UTC (rev 90696)
+++ z3ext.product/trunk/CHANGES.txt 2008-09-02 12:33:06 UTC (rev 90697)
@@ -2,6 +2,12 @@
CHANGES
=======
+1.2.0 (2008-??-??)
+------------------
+
+- Added product dependencies (required attribute)
+
+
1.1.2 (2008-08-13)
------------------
Modified: z3ext.product/trunk/src/z3ext/product/interfaces.py
===================================================================
--- z3ext.product/trunk/src/z3ext/product/interfaces.py 2008-09-02 12:29:54 UTC (rev 90696)
+++ z3ext.product/trunk/src/z3ext/product/interfaces.py 2008-09-02 12:33:06 UTC (rev 90697)
@@ -41,6 +41,10 @@
""" dependencies error """
+class RequiredProductNotFound(ProductError):
+ """ """
+
+
class IProduct(interface.Interface):
""" product information """
@@ -48,6 +52,8 @@
title = u'Product name',
required = True)
+ __required__ = interface.Attribute(u'Required products.')
+
__installed__ = interface.Attribute(u'Is product installed.')
def install():
Modified: z3ext.product/trunk/src/z3ext/product/product.py
===================================================================
--- z3ext.product/trunk/src/z3ext/product/product.py 2008-09-02 12:29:54 UTC (rev 90696)
+++ z3ext.product/trunk/src/z3ext/product/product.py 2008-09-02 12:33:06 UTC (rev 90697)
@@ -41,7 +41,29 @@
registry = getattr(z3ext.product, self.__product_name__)
return registry in sm.__bases__
+ def _checkRequiredInstall(self):
+ for productId in self.__required__:
+ product = queryUtility(IProduct, productId)
+ if product is None:
+ raise interfaces.RequiredProductNotFound(
+ _('Required product is not found.'))
+ if not product.__installed__:
+ product.install()
+
+ def _checkRequiredUpdate(self):
+ for productId in self.__required__:
+ product = queryUtility(IProduct, productId)
+ if product is None:
+ raise interfaces.RequiredProductNotFound(
+ _('Required product is not found.'))
+ if not product.__installed__:
+ product.install()
+ else:
+ product.update()
+
def install(self):
+ self._checkRequiredInstall()
+
if self.__installed__:
raise interfaces.ProductAlreadyInstalledError(
_('Product already installed.'))
@@ -64,6 +86,8 @@
event.notify(
interfaces.ProductUpdatedEvent(self.__product_name__, self))
+ self._checkRequiredUpdate()
+
def uninstall(self):
for name, ext in self.items():
if IProductExtension.providedBy(ext) and ext.__installed__:
Modified: z3ext.product/trunk/src/z3ext/product/zcml.py
===================================================================
--- z3ext.product/trunk/src/z3ext/product/zcml.py 2008-09-02 12:29:54 UTC (rev 90696)
+++ z3ext.product/trunk/src/z3ext/product/zcml.py 2008-09-02 12:33:06 UTC (rev 90697)
@@ -37,12 +37,18 @@
default = False,
required = False)
+ required = fields.Tokens(
+ title = u'Required',
+ value_type = schema.TextLine(),
+ required = False)
+
class ProductDirective(ConfigletDirective):
def __init__(self, _context, name, schema, title,
description='', class_=None, provides=(),
- permission='z3ext.ManageProducts', tests=(), configurable=False):
+ permission='z3ext.ManageProducts', tests=(),
+ configurable=False, required = ()):
if '.' not in name:
product_class = Product
@@ -74,6 +80,7 @@
_context, name, schema, title,
description, class_, provides, permission, tests)
+ self._class.__required__ = required
self._class.__product_name__ = productName
if configurable:
More information about the Checkins
mailing list