def _select_pragma_version(pragma_string, version_list): comparator_set_range = pragma_string.replace(" ", "").split("||") comparator_regex = re.compile(r"(([<>]?=?|\^)\d+\.\d+\.\d+)+") version = None for comparator_set in comparator_set_range: spec = SimpleSpec(*(i[0] for i in comparator_regex.findall(comparator_set))) selected = spec.select(version_list) if selected and (not version or version < selected): version = selected if version: return str(version)
def resolve_ca_version(self, version): # Determine if the version is just a version, and return it if so. version_pattern = re.compile('^\\d+\\.\\d+\\.\\d+(?:-\\d+)?$') if version_pattern.match(version): return version # Ensure we have semantic versioning support. if not HAS_SEMANTIC_VERSION: raise Exception(missing_required_lib('semantic_version')) from SEMANTIC_VERSION_IMPORT_ERR # Get the list of possible versions. all_ca_versions = self.get_all_ca_versions() # Select the best possible version. s = SimpleSpec(version) versions = map(Version, all_ca_versions) result = s.select(versions) # Ensure we selected a valid version. if result is None: raise Exception(f'Unable to resolve certificate authority version {version} from available versions {all_ca_versions}') return str(result)