Beispiel #1
0
    def is_old(latest, specifiers):
        """
        :param latest Version:
        :param required SpecifierSet:
        """

        if not isinstance(latest, Version):
            raise TypeError('latest is not of type Version')

        if not isinstance(specifiers, SpecifierSet):
            raise TypeError('specifiers is not of type SpecifierSet')

        old = False

        for spec in specifiers:
            if spec.operator in ['>', '>=']:
                continue

            latest_op = '<'
            if spec.operator in ['<']:
                latest_op = '<='

            latest_spec = Specifier('{}{}'.format(latest_op, str(latest)))

            if list(latest_spec.filter([spec.version])):
                old = True

        return old
Beispiel #2
0
    def update_version_macos(self, identifier: str, version: Version,
                             spec: Specifier) -> ConfigMacOS | None:

        # see note above on Specifier.filter
        unsorted_versions = spec.filter(self.versions_dict)
        sorted_versions = sorted(unsorted_versions, reverse=True)

        if version <= Version("3.8.9999"):
            file_ident = "macosx10.9.pkg"
        else:
            file_ident = "macos11.pkg"

        for new_version in sorted_versions:
            # Find the first patch version that contains the requested file
            uri = self.versions_dict[new_version]
            response = requests.get(
                f"https://www.python.org/api/v2/downloads/release_file/?release={uri}"
            )
            response.raise_for_status()
            file_info = response.json()

            urls = [rf["url"] for rf in file_info if file_ident in rf["url"]]
            if urls:
                return ConfigMacOS(
                    identifier=identifier,
                    version=f"{new_version.major}.{new_version.minor}",
                    url=urls[0],
                )

        return None
Beispiel #3
0
    def test_specifier_filter(self, specifier, prereleases, input, expected):
        spec = Specifier(specifier)

        kwargs = ({
            "prereleases": prereleases
        } if prereleases is not None else {})

        assert list(spec.filter(input, **kwargs)) == expected
    def test_specifier_filter(self, specifier, prereleases, input, expected):
        spec = Specifier(specifier)

        kwargs = (
            {"prereleases": prereleases} if prereleases is not None else {}
        )

        assert list(spec.filter(input, **kwargs)) == expected
Beispiel #5
0
    def update_version_windows(self, spec: Specifier) -> ConfigWinCP | None:

        # Specifier.filter selects all non pre-releases that match the spec,
        # unless there are only pre-releases, then it selects pre-releases
        # instead (like pip)
        unsorted_versions = spec.filter(self.version_dict)
        versions = sorted(unsorted_versions, reverse=True)

        log.debug(
            f"Windows {self.arch} {spec} has {', '.join(str(v) for v in versions)}"
        )

        if not versions:
            return None

        version = versions[0]
        identifier = f"cp{version.major}{version.minor}-{self.arch}"
        return ConfigWinCP(
            identifier=identifier,
            version=self.version_dict[version],
            arch=self.arch_str,
        )