def is_plugin_updated(plugin_name): try: old_version = VersionInfo.parse( normalize_version_to_semver( config["PLUGIN_VERSIONS"][plugin_name])) new_version = VersionInfo.parse( normalize_version_to_semver(_get_plugin_version(plugin_name))) return new_version != old_version except KeyError: # We have no previous record of this plugin, so it is updated return True
def matches_version(version, version_range): if version_range is None or not version: return True # For the purposes of upgrade comparison, treat dev versions as alphas version = normalize_version_to_semver(version).replace("dev", "a") version_range = "".join(get_version_and_operator_from_range(version_range)) return match(version, version_range)
def _update_plugin(self, plugin_name): # Import here to prevent circular import from kolibri.plugins.registry import registered_plugins app_configs = [] plugin_instance = registered_plugins.get(plugin_name) if plugin_instance is None: logger.error( "Tried to run upgrades for plugin {} but it doesn't exist". format(plugin_name)) return for app in plugin_instance.INSTALLED_APPS: if not isinstance(app, AppConfig) and isinstance(app, str): app = apps.get_containing_app_config(app) app_configs.append(app) old_version = config["PLUGIN_VERSIONS"].get(plugin_name, "") new_version = _get_plugin_version(plugin_name) try: self._migrate_plugin(plugin_name, app_configs) except Exception as e: logger.error( "Unhandled exception while migrating {}, exception was:\n\n{}". format(plugin_name, e)) return if old_version: if VersionInfo.parse(normalize_version_to_semver( old_version)) < VersionInfo.parse( normalize_version_to_semver(new_version)): logger.info( "Running upgrade routines for {}, upgrading from {} to {}". format(plugin_name, old_version, new_version)) else: logger.info( "Running downgrade routines for {}, downgrading from {} to {}" .format(plugin_name, old_version, new_version)) else: logger.info( "Running installation routines for {}, installing {}".format( plugin_name, new_version)) try: run_upgrades(old_version, new_version, app_configs=app_configs) except Exception as e: logger.error( "An exception occured running upgrades for plugin {}: {}". format(plugin_name, e)) return return new_version
from importlib import import_module from django.apps import apps from semver import match from semver import VersionInfo import kolibri from kolibri.utils.version import get_version_and_operator_from_range from kolibri.utils.version import normalize_version_to_semver CURRENT_VERSION = VersionInfo.parse( normalize_version_to_semver(kolibri.__version__)) class VersionUpgrade(object): """ Class for version upgrade operations """ __slots__ = ["OLD_VERSION", "NEW_VERSION", "upgrade", "module"] def __init__(self, old_version=None, new_version=None, upgrade=None): # Semver version range specification for the previous version # of Kolibri when this should be applied. # If None - should be applied to all. self.OLD_VERSION = old_version try: assert self._old except AssertionError: raise TypeError( "Unparseable semver version or range passed to upgrade object for old_version"
def matches_version(version, version_range): if version_range is None or not version: return True version = normalize_version_to_semver(version) version_range = "".join(get_version_and_operator_from_range(version_range)) return match(version, version_range)