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
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
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
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, )