Example #1
0
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)
Example #2
0
    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)