def upgrade_step_directory_action(profile, dottedname, path, soft_dependencies): start_version = find_start_version(profile) scanner = Scanner(dottedname, path) if profile not in _profile_registry.listProfiles(): raise UpgradeStepConfigurationError( 'The profile "{0}" needs to be registered before registering its' ' upgrade step directory.'.format(profile)) profileinfo = _profile_registry.getProfileInfo(profile) if profileinfo.get('version', None) is not None: raise UpgradeStepConfigurationError( 'Registering an upgrades directory for "{0}" requires this profile' ' to not define a version in its metadata.xml.' ' The version is automatically set to the latest upgrade.'.format( profile)) _package, profilename = profile.split(':', 1) last_version = ''.join(find_start_version(profile)) for upgrade_info in scanner.scan(): upgrade_profile_name = '{0}-upgrade-{1}'.format( profilename, upgrade_info['target-version']) upgrade_handler = wrap_upgrade_step( handler=upgrade_info['callable'], upgrade_profile='profile-{0}:{1}'.format(dottedname, upgrade_profile_name), base_profile=profile, target_version=upgrade_info['target-version']) step = UpgradeStep(upgrade_info['title'], profile, upgrade_info['source-version'] or start_version, upgrade_info['target-version'], '', upgrade_handler) _registerUpgradeStep(step) _profile_registry.registerProfile( name=upgrade_profile_name, title='Upgrade {0} to {1}: {2}'.format( profile, upgrade_info['target-version'], upgrade_info['title']), description='', path=upgrade_info['path'], product=dottedname, profile_type=EXTENSION, for_=IMigratingPloneSiteRoot) last_version = upgrade_info['target-version'] profile = GlobalRegistryStorage(IProfile).get(profile) profile['version'] = last_version profile['ftw.upgrade:dependencies'] = soft_dependencies
def __init__(self): self._registry = GlobalRegistryStorage(IUpgradeSteps)