示例#1
0
    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
示例#2
0
    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
示例#3
0
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))
示例#4
0
文件: models.py 项目: alexxa/pulp
    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