# HG changeset patch # User Thierry Florac # Date 1520643525 -3600 # Node ID 1a58b78a8f99ca90a9487e1273e05ea7d3e7c561 # Parent c9e3cfbbe4addf8fad8ca27d95db0b39d46810d6 Updated database upgrade code diff -r c9e3cfbbe4ad -r 1a58b78a8f99 src/pyams_utils/interfaces/site.py --- a/src/pyams_utils/interfaces/site.py Thu Mar 08 09:13:06 2018 +0100 +++ b/src/pyams_utils/interfaces/site.py Sat Mar 10 01:58:45 2018 +0100 @@ -41,10 +41,11 @@ class ISiteGenerations(Interface): """Site generations interface""" + order = Attribute("Order in which generations should be upgraded") generation = Attribute("Current schema generation") def evolve(self, site, current=None): - """Evolve from current generation to last one""" + """Evolve database from current generation to last one""" class IStaticConfigurationManager(IAttributeAnnotatable): diff -r c9e3cfbbe4ad -r 1a58b78a8f99 src/pyams_utils/site.py --- a/src/pyams_utils/site.py Thu Mar 08 09:13:06 2018 +0100 +++ b/src/pyams_utils/site.py Sat Mar 10 01:58:45 2018 +0100 @@ -131,11 +131,14 @@ generations = annotations.get(SITE_GENERATIONS_KEY) if generations is None: generations = annotations[SITE_GENERATIONS_KEY] = PersistentDict() - for name, utility in get_utilities_for(ISiteGenerations): + for name, utility in sorted(get_utilities_for(ISiteGenerations), + key=lambda x: x[1].order): if not name: name = '.'.join((utility.__module__, utility.__class__.__name__)) current = generations.get(name) - if (not current) or (current < utility.generation): + if not current: + print("Upgrading {0} to generation {1}...".format(name, utility.generation)) + elif current < utility.generation: print("Upgrading {0} from generation {1} to {2}...".format(name, current, utility.generation)) utility.evolve(application, current) generations[name] = utility.generation diff -r c9e3cfbbe4ad -r 1a58b78a8f99 src/pyams_utils/timezone/utility.py --- a/src/pyams_utils/timezone/utility.py Thu Mar 08 09:13:06 2018 +0100 +++ b/src/pyams_utils/timezone/utility.py Sat Mar 10 01:58:45 2018 +0100 @@ -18,14 +18,12 @@ # import interfaces from pyams_utils.interfaces.site import ISiteGenerations from pyams_utils.interfaces.timezone import IServerTimezone -from zope.site.interfaces import INewLocalSite # import packages from persistent import Persistent from pyams_utils.property import DocFieldProperty from pyams_utils.registry import utility_config from pyams_utils.site import check_required_utilities -from pyramid.events import subscriber from zope.container.contained import Contained from zope.interface import implementer @@ -39,17 +37,11 @@ REQUIRED_UTILITIES = ((IServerTimezone, '', ServerTimezoneUtility, 'Server timezone'),) -@subscriber(INewLocalSite) -def handle_new_local_site(event): - """Create a new ServerTimezoneUtility when a site is created""" - site = event.manager.__parent__ - check_required_utilities(site, REQUIRED_UTILITIES) - - @utility_config(name='PyAMS timezone', provides=ISiteGenerations) class TimezoneGenerationsChecker(object): """Timezone generations checker""" + order = 10 generation = 1 def evolve(self, site, current=None):