[Erp5-report] r36156 jm - /erp5/trunk/products/ERP5/Tool/TemplateTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jun 9 13:50:11 CEST 2010
Author: jm
Date: Wed Jun 9 13:50:10 2010
New Revision: 36156
URL: http://svn.erp5.org?rev=36156&view=rev
Log:
Improve TemplateTool.updateBusinessTemplateFromUrl for automated upgrades
- Log what is removed, kept and executed before and after BT installation.
- Add 'reinstall' parameter to force reinstallation all items.
This is useful for special BT that patch upstream objects.
- Add active_process parameter to log into an active process instead of zLOG.
Also use active_process to track installed item and detect moved objects.
- Use unrestrictedTraverse instead of getattr to access before/after scripts.
Modified:
erp5/trunk/products/ERP5/Tool/TemplateTool.py
Modified: erp5/trunk/products/ERP5/Tool/TemplateTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/TemplateTool.py?rev=36156&r1=36155&r2=36156&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/TemplateTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Tool/TemplateTool.py [utf8] Wed Jun 9 13:50:10 2010
@@ -36,6 +36,7 @@
from Acquisition import Implicit, Explicit
from AccessControl import ClassSecurityInfo
+from Products.CMFActivity.ActiveResult import ActiveResult
from Products.ERP5Type.Globals import InitializeClass, DTMLFile, PersistentMapping
from Products.ERP5Type.DiffUtils import DiffFile
from Products.ERP5Type.Tool.BaseTool import BaseTool
@@ -1078,35 +1079,71 @@
keep_original_list=[],
before_triggered_bt5_id_list=[],
after_triggered_bt5_id_list=[],
- update_catalog=0):
+ update_catalog=0,
+ reinstall=False,
+ active_process=None):
"""
This method download and install a bt5, from a URL.
"""
+ if active_process is None:
+ installed_dict = {}
+ def log(msg):
+ LOG('TemplateTool.updateBusinessTemplateFromUrl', INFO, msg)
+ else:
+ active_process = self.unrestrictedTraverse(active_process)
+ if getattr(aq_base(active_process), 'installed_dict', None) is None:
+ active_process.installed_dict = PersistentMapping()
+ installed_dict = active_process.installed_dict
+ message_list = []
+ log = message_list.append
+
+ log("Installing %s ..." % download_url)
imported_bt5 = self.download(url = download_url, id = id)
+ bt_title = imported_bt5.getTitle()
BusinessTemplate_getModifiedObject = \
aq_base(getattr(self, 'BusinessTemplate_getModifiedObject'))
-
- install_kw = {}
+
listbox_object_list = BusinessTemplate_getModifiedObject.__of__(imported_bt5)()
+ if reinstall:
+ log('Reinstall all items')
+ install_kw = dict.fromkeys(imported_bt5.getItemsList(), 'install')
+ else:
+ install_kw = {}
for listbox_line in listbox_object_list:
+ item = listbox_line.object_id
+ state = listbox_line.object_state
+ removed = state.startswith('Removed')
+ if removed:
+ moved = installed_dict.get(listbox_line.object_id, '')
+ log('%s: %s%s' % (state, item, moved and ' (moved to %s)' % moved))
+ else:
+ installed_dict[item] = bt_title
# if a bt5 item is removed we may still want to keep it
- if (listbox_line.object_state in ('Removed', 'Removed but used', 'Modified', 'New') and
- listbox_line.object_id in keep_original_list):
- install_kw[listbox_line.object_id] = 'nothing' #Keep original
+ if ((removed or state in ('Modified', 'New'))
+ and item in keep_original_list):
+ install_kw[item] = 'nothing'
+ log("Keep %r" % item)
else:
- install_kw[listbox_line.object_id] = listbox_line.choice_item_list[0][1]
-
+ install_kw[item] = listbox_line.choice_item_list[0][1]
+
# Run before script list
for before_triggered_bt5_id in before_triggered_bt5_id_list:
- getattr(imported_bt5, before_triggered_bt5_id)()
-
+ log('Execute %r' % before_triggered_bt5_id)
+ imported_bt5.unrestrictedTraverse(before_triggered_bt5_id)()
+
imported_bt5.install(object_to_update=install_kw,
update_catalog=update_catalog)
-
+
# Run After script list
for after_triggered_bt5_id in after_triggered_bt5_id_list:
- getattr(imported_bt5, after_triggered_bt5_id)()
- LOG('ERP5', INFO, "Updated %s from %s" %(imported_bt5.getTitle(), download_url))
+ log('Execute %r' % after_triggered_bt5_id)
+ imported_bt5.unrestrictedTraverse(after_triggered_bt5_id)()
+ if active_process is not None:
+ active_process.postResult(ActiveResult(
+ '%03u. %s' % (len(active_process.getResultList()) + 1, bt_title),
+ detail='\n'.join(message_list)))
+ else:
+ log("Updated %s from %s" % (bt_title, download_url))
security.declareProtected(Permissions.ManagePortal,
'getBusinessTemplateUrl')
More information about the Erp5-report
mailing list