def find_start_version(profile): upgrades = list(_upgrade_registry.getUpgradeStepsForProfile(profile).values()) upgrades.sort(key=attrgetter('dest')) if len(upgrades) > 0: return upgrades[-1].dest else: return str(10 ** 13)
def beforeTearDown(self): # Remove the extra step from the upgrade registry, # otherwise this bleeds over into other tests. from Products.GenericSetup.upgrade import _upgrade_registry profile_steps = _upgrade_registry.getUpgradeStepsForProfile( _DEFAULT_PROFILE) profile_steps.pop(self.step_id, None)
def find_start_version(profile): upgrades = _upgrade_registry.getUpgradeStepsForProfile(profile).values() upgrades = sorted(upgrades, key=attrgetter('dest')) if len(upgrades) > 0: return upgrades[-1].dest else: return str(10 ** 13)
def _upgrade_add_on( self, source, destination, add_on_name='collective.logbook', profile='default' ): u"""Run the upgrade steps for an add-on. Arguments: add_on_name -- Add-on name. Eg.: "my.package". profile -- Generic Setup profile. Eg.: "default". source -- Source version (string). Eg.: "1". destination -- Destination version (string). Eg.: "2". Return: boolean which is true if and only if at least one upgrade step ran. """ setup = api.portal.get_tool('portal_setup') full_profile_id = u'{}:{}'.format(add_on_name, profile) ran = False groups = _upgrade_registry.getUpgradeStepsForProfile(full_profile_id) for step_or_steps in groups.values(): try: steps = sorted([s[1] for s in step_or_steps], key=lambda x: x.sortkey) except TypeError: steps = [step_or_steps] for step in steps: if (source in step.source) and (destination in step.dest): step.doStep(setup) ran = True return ran
def run_migration_step(self): import transaction transaction.savepoint() # Now run the migration step profile_id = "collective.lineage:default" setup_tool = self.layer['portal'].portal_setup steps_to_run = _upgrade_registry.getUpgradeStepsForProfile(profile_id) for step_id in steps_to_run: step = _upgrade_registry.getUpgradeStep(profile_id, step_id) if step is not None: if step.title == "Migrate the Child Folder objects": step.doStep(setup_tool)
def testUpgradeCallOnReinstall(self): # Get upgrade steps upgrades = _upgrade_registry.getUpgradeStepsForProfile(self.profile) upgrades = dict([(u.sortkey, u) for u in upgrades.values()]) try: # Replace original handlers with patched ones for test calls called = [] upgrades[1].handler = lambda st:called.append("1.0 to 1.1") upgrades[2].handler = lambda st:called.append("1.1 to 1.2") # Run reinstallation self.portal.portal_quickinstaller.reinstallProducts(products=config.PROJECTNAME) # Test upgrades call self.assertEqual("1.0 to 1.1" in called, True) self.assertEqual("1.1 to 1.2" in called, True) finally: # Restore original upgrade handlers upgrades[1].handler = gsm_upgrades.upgrade_1_0_to_1_1 upgrades[2].handler = gsm_upgrades.upgrade_1_1_to_1_2
def find_start_version(profile): upgrades = _upgrade_registry.getUpgradeStepsForProfile(profile).values() dests = set() for upgrade in upgrades: if isinstance(upgrade, list): # Those are combined upgrade steps # (registered with the upgradeSteps directive) [ dests.update(partial_upgrade[1].dest) for partial_upgrade in upgrade ] else: # Those are simple upgrade steps # (registered with the upgradeStep directive) dests.update(upgrade.dest) if dests: return max(dests) else: return str(10**13)