Skip to content
Snippets Groups Projects
Commit fa3669f6 authored by Marek Chrastina's avatar Marek Chrastina
Browse files

Fix requires-python

parent c9326b03
No related branches found
No related tags found
No related merge requests found
Pipeline #13063 failed
This commit is part of merge request !9. Comments created here will be created in the context of that merge request.
...@@ -328,53 +328,50 @@ def get_metadata(package, version): ...@@ -328,53 +328,50 @@ def get_metadata(package, version):
break break
return metadata return metadata
def metadata_version(data):
"""
Return metadata version or None
"""
version = None
for line in data:
if 'Metadata-Version' in line.decode('utf-8'):
version = line.replace('Metadata-Version:', '').strip()
break
return version
def validate_pyver(metadata):
"""
Return True if python version satisfies
"""
if metadata is None:
return None
mversion = metadata_version(metadata)
if mversion and is_in_specifiers(mversion, ['>=2.0']):
py_ver = ", ".join([line.replace('Requires-Python:', '').strip() \
for line in metadata if re.search(r'^Requires-Python:', line)])
py_ver = py_ver.split(',')
if py_ver:
return is_in_specifiers(PY_VER, py_ver)
return True
def parse_metadata(metadata, extra): def parse_metadata(metadata, extra):
""" """
Return dependencies parsed from metadata Return dependencies parsed from metadata
""" """
if metadata is None: if metadata is None:
return None return None
for line in metadata: mversion = metadata_version(metadata)
if 'Metadata-Version' in line.decode('utf-8'): if mversion and is_in_specifiers(mversion, ['>=2.0']):
metadata_version = line.replace('Metadata-Version:', '').strip()
break
arr = []
if metadata_version and \
packaging.version.Version(metadata_version) >= packaging.version.Version('2.0'):
arr = [] arr = []
lines = [line.replace('Requires-Dist:', '').strip() \ lines = [line.replace('Requires-Dist:', '').strip() \
for line in metadata if re.search(r'^Requires-Dist:', line)] for line in metadata if re.search(r'^Requires-Dist:', line)]
for line in lines: for line in lines:
data = pkginfo(str(line), req_extra=extra, repair=True) data = pkginfo(str(line), req_extra=extra, repair=True)
if data: if data:
arr.append(pkginfo(str(line), req_extra=extra, repair=True)) arr.append(data)
return arr return arr
def get_pkg_data():
"""
Return package data
"""
packages_data = {}
# pylint: disable=protected-access
for pkg in pip._internal.utils.misc.get_installed_distributions():
pkg_name, pkg_ver, _pkg_extra = pkginfo(str(pkg))
rev = {'installed_version': pkg_ver,
'requires': [pkginfo(str(dep), repair=True) for dep in pkg.requires()]}
packages_data[pkg_name] = rev
packages_data = insert_extras(packages_data)
packages_data = insert_availables(packages_data)
packages_data = insert_news(packages_data)
while True:
new_packages_data = new_packages(packages_data)
if not new_packages_data:
break
new_packages_data = insert_availables(new_packages_data)
new_packages_data = insert_news(new_packages_data)
packages_data = merge_two_dicts(packages_data, new_packages_data)
check_new_extras(packages_data)
return packages_data
def pkginfo(data, req_extra=None, repair=False): def pkginfo(data, req_extra=None, repair=False):
""" """
Return parsed pkginfo Return parsed pkginfo
...@@ -418,6 +415,31 @@ def pkginfo(data, req_extra=None, repair=False): ...@@ -418,6 +415,31 @@ def pkginfo(data, req_extra=None, repair=False):
return None return None
return (pkg_name.lower(), pkg_ver, pkg_extra) return (pkg_name.lower(), pkg_ver, pkg_extra)
def get_pkg_data():
"""
Return package data
"""
packages_data = {}
# pylint: disable=protected-access
for pkg in pip._internal.utils.misc.get_installed_distributions():
pkg_name, pkg_ver, _pkg_extra = pkginfo(str(pkg))
rev = {'installed_version': pkg_ver,
'requires': [pkginfo(str(dep), repair=True) for dep in pkg.requires()]}
packages_data[pkg_name] = rev
packages_data = insert_extras(packages_data)
packages_data = insert_availables(packages_data)
packages_data = insert_news(packages_data)
while True:
new_packages_data = new_packages(packages_data)
if not new_packages_data:
break
new_packages_data = insert_availables(new_packages_data)
new_packages_data = insert_news(new_packages_data)
packages_data = merge_two_dicts(packages_data, new_packages_data)
check_new_extras(packages_data)
return packages_data
def insert_extras(data): def insert_extras(data):
""" """
Insert extras Insert extras
...@@ -474,8 +496,8 @@ def get_available_vers(package): ...@@ -474,8 +496,8 @@ def get_available_vers(package):
if requires_python: if requires_python:
requires_python = list(set(requires_python)) requires_python = list(set(requires_python))
if len(packagetype) == 1 and packagetype[0] == 'bdist_wheel' and len(python_version) == 1: if len(packagetype) == 1 and packagetype[0] == 'bdist_wheel' and len(python_version) == 1:
pyt_ver = re.search(r"^py([0-9])", python_version[0]) py_ver = re.search(r"^py([0-9])", python_version[0])
if pyt_ver is not None and not is_in_specifiers(PY_VER, [">= %s" % pyt_ver.group(1)]): if py_ver is not None and not is_in_specifiers(PY_VER, [">= %s" % py_ver.group(1)]):
continue continue
if is_version(release) and is_in_specifiers(PY_VER, requires_python): if is_version(release) and is_in_specifiers(PY_VER, requires_python):
versions.append(release) versions.append(release)
...@@ -505,7 +527,9 @@ def insert_news(data): ...@@ -505,7 +527,9 @@ def insert_news(data):
if new_version: if new_version:
res = {} res = {}
for version in new_version: for version in new_version:
content = parse_metadata(get_metadata(pkg, version), pkg_data['extras']) metadata = get_metadata(pkg, version)
print validate_pyver(metadata)
content = parse_metadata(metadata, pkg_data['extras'])
if content is not None: if content is not None:
res[version] = content res[version] = content
if res: if res:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment