def migrate_files(current_version, target_version, data_directory): # look up the version names has_updated = False if current_version is None: return False if NumberedVersion(current_version) < NumberedVersion("0.4.0rc1.dev3"): if migrate_files_pre_0_4_0_rc1_dev3(current_version, data_directory): has_updated = True return has_updated
def migrate_settings(current_version, settings_dict, default_settings_directory, data_directory): # extract the settings version # note that the version moved from settings.version to settings.main_settings.version version = get_version(settings_dict) settings_version = get_settings_version(settings_dict) if version == 'unknown': raise Exception("Could not find version information within the settings json, cannot perform migration.") if version == "0+unknown": raise Exception("An unknown settings version was detected, cannot perform migration.") # create a copy of the settings original_settings_copy = copy.deepcopy(settings_dict) # create a flag to indicate that we've updated settings has_updated = False if settings_version is None and NumberedVersion(version) <= NumberedVersion("0.3.3rc3.dev0"): has_updated = True settings_dict = migrate_pre_0_3_3_rc3_dev(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.3.3rc3.dev0.json')) if settings_version is None and NumberedVersion(version) < NumberedVersion("0.4.0rc1.dev0"): has_updated = True settings_dict = migrate_pre_0_3_5_rc1_dev(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.4.0rc1.dev0.json')) if settings_version is None and NumberedVersion(version) < NumberedVersion("0.4.0rc1.dev2"): has_updated = True settings_dict = migrate_pre_0_4_0_rc1_dev2(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.4.0rc1.dev2.json')) if settings_version is None and NumberedVersion(version) < NumberedVersion("0.4.0rc1.dev3"): has_updated = True settings_dict = migrate_pre_0_4_0_rc1_dev3(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.4.0rc1.dev3.json')) if settings_version is None and NumberedVersion(version) < NumberedVersion("0.4.0rc1.dev4"): has_updated = True settings_dict = migrate_pre_0_4_0_rc1_dev4(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.4.0rc1.dev4.json')) # Start using main_settings.settings_version for migrations # this value will start off as None if settings_version is None: # None < 0.4.0 has_updated = True settings_dict = migrate_pre_0_4_0(current_version, settings_dict, os.path.join(default_settings_directory, 'settings_default_0.4.0.json')) # Add other migrations here in the future... # if we have updated, create a backup of the current settings if has_updated: with open(get_settings_backup_name(version, data_directory), "w+") as f: json.dump(original_settings_copy, f) # Ensure that the version and settings_version within the settings.json file is up to date settings_dict["main_settings"]["version"] = current_version settings_dict["main_settings"]["settings_version"] = NumberedVersion.CurrentSettingsVersion return settings_dict
def test_numbered_version(self): fallback_version = NumberedVersion.clean_version("0.4.0rc3") plugin_version = NumberedVersion.clean_version( get_versions()['version']) #if plugin_version == "0+unknown" or NumberedVersion(plugin_version) < NumberedVersion(fallback_version): if plugin_version == "0+unknown": plugin_version = fallback_version try: # This generates version in the following form: # 0.4.0rc1+?.GUID_GOES_HERE plugin_version += "+u." + versioneer.get_versions( )['full-revisionid'][0:7] except: pass self.assertEqual(plugin_version, fallback_version)
def check_for_updates(available_profiles, updatable_profiles, force_updates, ignore_suppression): profiles_to_update = { "printer": [], "stabilization": [], "trigger": [], "rendering": [], "camera": [], "logging": [], } updates_available = False # loop through printer profiles if (updatable_profiles is not None and available_profiles is not None): # loop through the updatable profile dicts for profile_type, value in six.iteritems(updatable_profiles): # loop through the profiles for updatable_profile in value: # get the available profile for the updatable profile keys key_values = [ x["value"] for x in updatable_profile["key_values"] ] available_profile = ExternalSettings._get_profile_for_keys( available_profiles, key_values, profile_type) if available_profile is None: continue # if we have new model and the version is greater than the update version # and we're not suppressing updates for this version, add the profile # to our update list if (updatable_profile["version"] is None or (NumberedVersion(str(available_profile["version"])) > NumberedVersion(str(updatable_profile["version"])) and (not updatable_profile[ "suppress_update_notification_version"] or (force_updates or ignore_suppression or NumberedVersion(str(available_profile["version"])) > NumberedVersion( str(updatable_profile[ "suppress_update_notification_version"]))))) ): updates_available = True profiles_to_update[profile_type].append( updatable_profile) if not updates_available: return False return profiles_to_update
def _get_best_settings_version(current_version): # load the available versions for the current settings version. This number will be incremented as the # settings change enough to not be backwards compatible versions = ExternalSettings._get_versions()["versions"] if not versions: return None versions.sort(key=NumberedVersion) settings_version = None for version in versions: if NumberedVersion(str(version)) > NumberedVersion( str(NumberedVersion.CurrentSettingsVersion)): break settings_version = version if settings_version is None and len(versions) > 0: settings_version = versions[len(versions) - 1] return settings_version
from distutils.cygwinccompiler import CygwinCCompiler from distutils.version import LooseVersion from octoprint_octolapse_setuptools import NumberedVersion import sys import versioneer ######################################################################################################################## # The plugin's identifier, has to be unique plugin_identifier = "octolapse" # The plugin's python package, should be "octoprint_<plugin identifier>", has to be unique plugin_package = "octoprint_octolapse" # The plugin's human readable name. Can be overwritten within OctoPrint's internal data via __plugin_name__ in the # plugin module plugin_name = "Octolapse" # The plugin's fallback version, in case versioneer can't extract the version from _version.py. # This can happen if the user installs from one of the .zip links in github, not generated with git archive fallback_version = NumberedVersion.clean_version( NumberedVersion.CurrentVersion) # Get the cleaned version number from versioneer plugin_version = NumberedVersion.clean_version( versioneer.get_versions(verbose=True)["version"]) # Depending on the installation method, versioneer might not know the current version # if plugin_version == "0+unknown" or NumberedVersion(plugin_version) < NumberedVersion(fallback_version): if plugin_version == "0+unknown": plugin_version = fallback_version try: # This generates version in the following form: # 0.4.0rc1+?.GUID_GOES_HERE plugin_version += "+u." + versioneer.get_versions( )['full-revisionid'][0:7] except: pass
def test_version(self): # The problem: # Version numbers like V0.4.0rc1 < V0.4.0.rc1.devxxx The dev stuff messed it up! # When comparing version numbers: # V0.4.0 > v0.4.0rc... Always # 0.4.0rc... > 0.4.0rc.dev... # 0.4.0rc2... > 0.4.0rc1... # test stripping off commit level version info test_version = NumberedVersion('0.4.0rc1+u.dec65f5') # make sure identical version numbers are considered to be equal assert (NumberedVersion('0.4.0rc1') == NumberedVersion('0.4.0rc1')) # make sure V prefixes are ignored version numbers are considered to be equal assert (NumberedVersion('v0.4.0rc1') == NumberedVersion('0.4.0rc1')) assert (NumberedVersion('V0.4.0rc1') == NumberedVersion('0.4.0rc1')) assert (NumberedVersion('0.4.0rc1') == NumberedVersion('v0.4.0rc1')) assert (NumberedVersion('0.4.0rc1') == NumberedVersion('V0.4.0rc1')) assert not (NumberedVersion('v0.4.0rc1') < NumberedVersion('0.4.0rc1')) # make sure that rc is always greater than rcX.devX assert (NumberedVersion('0.4.0rc1.dev1') < NumberedVersion('0.4.0rc1')) assert not (NumberedVersion('0.4.0rc1.dev1') > NumberedVersion('0.4.0rc1')) assert not (NumberedVersion('0.4.0rc1.dev1') == NumberedVersion('0.4.0rc1')) assert (NumberedVersion('0.4.0rc1') > NumberedVersion('0.4.0rc1.dev1')) assert not (NumberedVersion('0.4.0rc1') < NumberedVersion('0.4.0rc1.dev1')) assert not (NumberedVersion('0.4.0rc1') == NumberedVersion('0.4.0rc1.dev1')) # Make sure that release versions are always greater than non-release versions assert (NumberedVersion('0.4.0') > NumberedVersion('0.4.0rc1')) assert not (NumberedVersion('0.4.0') < NumberedVersion('0.4.0rc1')) assert not (NumberedVersion('0.4.0') == NumberedVersion('0.4.0rc1')) assert (NumberedVersion('0.4.0rc1') < NumberedVersion('0.4.0')) assert not (NumberedVersion('0.4.0rc1') > NumberedVersion('0.4.0')) assert not (NumberedVersion('0.4.0rc1') == NumberedVersion('0.4.0')) # make sure that higher tag versions are always considered newer than lower ones assert (NumberedVersion('0.4.1') > NumberedVersion('0.4.0')) assert not (NumberedVersion('0.4.1') < NumberedVersion('0.4.0')) assert not (NumberedVersion('0.4.1') == NumberedVersion('0.4.0')) assert (NumberedVersion('0.4.0') < NumberedVersion('0.4.1')) assert not (NumberedVersion('0.4.0') > NumberedVersion('0.4.1')) assert not (NumberedVersion('0.4.0') == NumberedVersion('0.4.1')) # make sure that clean versions are always considered older than dirty versions assert (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') > NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305")) assert not (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') < NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305")) assert not (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') == NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305")) assert (NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305") < NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) assert not (NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305") > NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) assert not (NumberedVersion("v0.4.0rc1.dev5+11.g3ffd305") == NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) # make sure that versions with more commits are higher than those with lower assert (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') > NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty")) assert not (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') < NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty")) assert not (NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty') == NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty")) assert (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty") < NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) assert not (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty") > NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) assert not (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305.dirty") == NumberedVersion('v0.4.0rc1.dev5+11.g3ffd305.dirty')) # When there is not development info within the version, the comparison is ambiguous. Make them equal assert (NumberedVersion('v0.4.0rc1.dev5+u.g3ffd305') == NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305")) assert (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305") == NumberedVersion('v0.4.0rc1.dev5+u.g3ffd305')) # when there is full tag information (i.e. installed from a release), it is older assert (NumberedVersion('v0.4.0rc1.dev5') < NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305")) assert not (NumberedVersion('v0.4.0rc1.dev5') > NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305")) assert not (NumberedVersion('v0.4.0rc1.dev5') == NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305")) assert (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305") > NumberedVersion('v0.4.0rc1.dev5')) assert not (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305") < NumberedVersion('v0.4.0rc1.dev5')) assert not (NumberedVersion("v0.4.0rc1.dev5+10.g3ffd305") == NumberedVersion('v0.4.0rc1.dev5')) assert (NumberedVersion("v0.4.0rc1.dev2") < NumberedVersion('v0.4.0rc1.dev3')) assert (NumberedVersion('v0.4.0rc1.dev3') > NumberedVersion("v0.4.0rc1.dev2")) assert (NumberedVersion('v0.4.0') > NumberedVersion("v0.4.0rc1.dev2")) assert (NumberedVersion("v0.4.0rc1.dev2") < NumberedVersion('v0.4.0'))