# Copyright (C) 2005-2025 Splunk Inc. All Rights Reserved. from ITOA.version_check import VersionCheck from .migration_precheck_registry import MIGRATION_PRECHECK_REGISTRY class MigrationPreCheckResolver(object): """ Resolves the list of migration prechecks to execute given a source version and target version """ def __init__(self, migration_pre_check_registry=MIGRATION_PRECHECK_REGISTRY): self.migration_pre_check_registry = migration_pre_check_registry def resolve_pre_check_specs(self, old_version, new_version): """ Resolve the prechecks given the old version to migrate from and new version to migrate to :param old_version: the version to migrate from :param new_version: the version to migrate to :return: a list of precheck items """ def _registry_filter(pre_check_spec): old_version_allowed_range = pre_check_spec['old_version'] new_version_allowed_range = pre_check_spec['new_version'] if isinstance(new_version_allowed_range, str): new_version_allowed_range = (new_version_allowed_range, None) if isinstance(old_version_allowed_range, str): old_version_allowed_range = (old_version_allowed_range, None) old_version_start, old_version_end = old_version_allowed_range new_version_start, new_version_end = new_version_allowed_range old_version_in_range = VersionCheck.in_range(old_version, old_version_start, old_version_end) new_version_in_range = VersionCheck.in_range(new_version, new_version_start, new_version_end) return old_version_in_range and new_version_in_range resolved_pre_check_specs = list(filter(_registry_filter, self.migration_pre_check_registry)) return resolved_pre_check_specs