def migrations(self): """ Finds all available migration modules for the MigrationPackage, and then sorts by the version. Return a list of MigrationModules. :rtype: list """ # Generate a list of the names of the modules found inside this package module_names = [ name for module_loader, name, ispkg in iter_modules( [os.path.dirname(self._package.__file__)]) ] migration_modules = [] for module_name in module_names: try: module_name = '%s.%s' % (self.name, module_name) migration_modules.append(MigrationModule(module_name)) except MigrationModule.MissingMigrate: msg = _( "The module %(m)s doesn't have a migrate function. It will be ignored." ) msg = msg % {'m': module_name} logger.debug(msg) except MigrationModule.MissingVersion: msg = _( "The module %(m)s doesn't conform to the migration package naming conventions. It " "will be ignored.") msg = msg % {'m': module_name} logger.debug(msg) migration_modules.sort() # We should have migrations starting at version 1, which each module version being exactly # one larger than the migration preceeding it. last_version = 0 for module in migration_modules: if module.version == 0: error_message = _( '0 is a reserved migration version number, but the ' 'module %(n)s has been assigned that version.') error_message = error_message % {'n': module.name} raise self.__class__.DuplicateVersions(error_message) if module.version == last_version: error_message = _( 'There are two migration modules that share version %(v)s in ' '%(n)s.') error_message = error_message % { 'v': module.version, 'n': self.name } raise self.__class__.DuplicateVersions(error_message) if module.version != last_version + 1: msg = _('Migration version %(v)s is missing in %(n)s.') msg = msg % ({'v': last_version + 1, 'n': self.name}) raise self.__class__.MissingVersion(msg) last_version = module.version return migration_modules
def migrations(self): """ Finds all available migration modules for the MigrationPackage, and then sorts by the version. Return a list of MigrationModules. :rtype: list """ # Generate a list of the names of the modules found inside this package module_names = [name for module_loader, name, ispkg in iter_modules([os.path.dirname(self._package.__file__)])] migration_modules = [] for module_name in module_names: try: module_name = "%s.%s" % (self.name, module_name) migration_modules.append(MigrationModule(module_name)) except MigrationModule.MissingMigrate: logger.debug( _("The module %(m)s doesn't have a migrate function. " "It will be ignored.") % {"m": module_name} ) except MigrationModule.MissingVersion: logger.debug( _( "The module %(m)s doesn't conform to the migration package naming " "conventions. It will be ignored." ) % {"m": module_name} ) migration_modules.sort() # We should have migrations starting at version 1, which each module version being exactly # one larger than the migration preceeding it. last_version = 0 for module in migration_modules: if module.version == 0: error_message = _( "0 is a reserved migration version number, but the " "module %(n)s has been assigned that version." ) % {"n": module.name} raise self.__class__.DuplicateVersions(error_message) if module.version == last_version: error_message = _("There are two migration modules that share version %(v)s in " "%(n)s.") % { "v": module.version, "n": self.name, } raise self.__class__.DuplicateVersions(error_message) if module.version != last_version + 1: raise self.__class__.MissingVersion( _("Migration version %(v)s is " "missing in %(n)s.") % ({"v": last_version + 1, "n": self.name}) ) last_version = module.version return migration_modules
def get_migration_packages(): """ This method finds and returns all Python packages in pulp.server.db.migrations. It sorts them alphabetically by name, except that pulp.server.db.platform unconditionally sorts to the front of the list. Returns a list of MigrationPackages. :rtype: list """ migration_package_names = [ "%s.%s" % (migrations.__name__, name) for module_loader, name, ispkg in iter_modules([os.path.dirname(migrations.__file__)]) ] migration_packages = [] for name in migration_package_names: try: migration_packages.append(MigrationPackage(name)) except (MigrationPackage.DuplicateVersions, MigrationPackage.MissingVersion), e: logger.error(str(e))
def migrations(self): """ Finds all available migration modules for the MigrationPackage, and then sorts by the version. Return a list of MigrationModules. :rtype: list """ # Generate a list of the names of the modules found inside this package module_names = [name for module_loader, name, ispkg in iter_modules([os.path.dirname(self._package.__file__)])] migration_modules = [] for module_name in module_names: try: module_name = '%s.%s' % (self.name, module_name) migration_modules.append(MigrationModule(module_name)) except MigrationModule.MissingMigrate: msg = _("The module %(m)s doesn't have a migrate function. It will be ignored.") msg = msg % {'m': module_name} _logger.debug(msg) except MigrationModule.MissingVersion: msg = _("The module %(m)s doesn't conform to the migration package naming " "conventions. It will be ignored.") msg = msg % {'m': module_name} _logger.debug(msg) migration_modules.sort() last_version = 0 for module in migration_modules: if module.version == 0: error_message = _('0 is a reserved migration version number, but the ' 'module %(n)s has been assigned that version.') error_message = error_message % {'n': module.name} raise self.__class__.DuplicateVersions(error_message) if module.version == last_version: error_message = _('There are two migration modules that share version %(v)s in ' '%(n)s.') error_message = error_message % {'v': module.version, 'n': self.name} raise self.__class__.DuplicateVersions(error_message) last_version = module.version return migration_modules