Skip to content

Commit

Permalink
[Add]: support for non PEP 440 spec versions (#493)
Browse files Browse the repository at this point in the history
* support for non PEP 440 version format
* Update deprecated pkg_resources to packaging.version
  • Loading branch information
rudra-iitm authored Jan 11, 2024
1 parent cc52e5a commit b031776
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 10 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/updatesnaptests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ jobs:
python3 -m pip install flake8
python3 -m pip install requests
python3 -m pip install pyyaml
python3 -m pip install python-debian
python3 -m pip install packaging
- name: Code tests
env:
GITHUB_USER: ubuntu
Expand Down
32 changes: 22 additions & 10 deletions updatesnap/SnapModule/snapmodule.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
import requests
import yaml

import pkg_resources
import packaging.version
import debian.debian_support


class Colors:
Expand Down Expand Up @@ -119,11 +120,22 @@ def _get_version(self, part_name, entry, entry_format, check):
if '%V' in entry_format['format']:
if not entry.startswith(entry_format['format'].split('%')[0]):
return None
version = pkg_resources.parse_version(entry[len(entry_format['format'].split('%')[0]):])
if (("lower-than" in entry_format) and
(version >= pkg_resources.parse_version(str(entry_format["lower-than"])))):
return None
return version
try:
version = packaging.version.parse(
entry[len(entry_format['format'].split('%')[0]):])
if (("lower-than" in entry_format) and
(version >= packaging.version.parse(
str(entry_format["lower-than"])))):
return None
return version
except packaging.version.InvalidVersion:
version = debian.debian_support.Version(
entry[len(entry_format['format'].split('%')[0]):])
if (("lower-than" in entry_format) and
(version >= debian.debian_support.Version(
str(entry_format["lower-than"])))):
return None
return version
major = 0
minor = 0
revision = 0
Expand All @@ -147,12 +159,12 @@ def _get_version(self, part_name, entry, entry_format, check):
if not entry.startswith(part):
return None
entry = entry[len(part):]
version = pkg_resources.parse_version(f"{major}.{minor}.{revision}")
version = packaging.version.parse(f"{major}.{minor}.{revision}")

if "ignore-version" in entry_format:
to_ignore = entry_format["ignore-version"]
if isinstance(to_ignore, str):
if version == pkg_resources.parse_version(to_ignore):
if version == packaging.version.parse(to_ignore):
return None
elif isinstance(to_ignore, list):
for ignore_version in to_ignore:
Expand All @@ -161,7 +173,7 @@ def _get_version(self, part_name, entry, entry_format, check):
"contains an element that is not a string.")
self._print_error(part_name, self._colors.critical, message)
raise ValueError(message)
if version == pkg_resources.parse_version(ignore_version):
if version == packaging.version.parse(ignore_version):
return None
else:
message = (f"The 'ignore-version' entry in {part_name} is neither a string, "
Expand All @@ -170,7 +182,7 @@ def _get_version(self, part_name, entry, entry_format, check):
raise ValueError(message)

if (("lower-than" in entry_format) and
(version >= pkg_resources.parse_version(str(entry_format["lower-than"])))):
(version >= packaging.version.parse(str(entry_format["lower-than"])))):
return None
if self._checkopt("ignore-odd-minor", entry_format) and ((minor % 2) == 1):
return None
Expand Down
92 changes: 92 additions & 0 deletions updatesnap/unittests.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,28 @@ def test_no_source_or_local_source(self):
assert data[0] is None
assert data[1] is None

def test_version_variation_and_beta_release(self):
# pylint: disable=protected-access
""" tests if a part support valid version variation and beta-release"""
obj = ProcessVersion(silent=True)
obj.set_full_silent()
data = get_version_variation_and_beta_release()
for part in data:
version = obj._get_version(
part['part_name'], part['version'], part['entry_format'], False)
assert version is not None

def test_invalid_version_variation_and_beta_release(self):
# pylint: disable=protected-access
""" tests if a part filter out invalid version variation and beta-release"""
obj = ProcessVersion(silent=True)
obj.set_full_silent()
data = get_invalid_version_variation_and_beta_release()
for part in data:
version = obj._get_version(
part['part_name'], part['version'], part['entry_format'], False)
assert version is None


class GitPose:
""" Helper class. It emulates a GitClass class, to allow to test
Expand Down Expand Up @@ -818,4 +840,74 @@ def remove_trailing_nls(data):
return data


def get_version_variation_and_beta_release():
""" returns a list of different types of valid version-variation and beta release"""
return [{
'part_name': 'part1',
'version': '1.0b2',
'entry_format': {'format': '%V'}
}, {
'part_name': 'part2',
'version': '20240109',
'entry_format': {'format': '%V'}
}, {
'part_name': 'part3',
'version': 'debian/3.22.10+dfsg0-4',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part4',
'version': 'debian/0.3-7',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part5',
'version': 'debian/0.8.9-10',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part6',
'version': 'debian/27-11',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part7',
'version': 'debian/20200505dfsg0-2',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part8',
'version': 'debian/1.4+repack0-6',
'entry_format': {'format': 'debian/%V'}
}, {
'part_name': 'part9',
'version': 'v6',
'entry_format': {'format': 'v%V'}
}, {
'part_name': 'part10',
'version': '3.1a2b3',
'entry_format': {'format': '%V'}
}, {
'part_name': 'part10',
'version': '12.0~beta2',
'entry_format': {'format': '%V'}
}]


def get_invalid_version_variation_and_beta_release():
""" returns a list of different types of invalid version-variation and beta release"""
return [{
'part_name': 'part1',
'version': '1.2.3',
'entry_format': {'format': 'debian%V'}
}, {
'part_name': 'part2',
'version': '20240109',
'entry_format': {'format': 'debian%V'}
}, {
'part_name': 'part3',
'version': 'debian/3.22.10+dfsg0-4',
'entry_format': {'format': 'upstream/%V'}
}, {
'part_name': 'part4',
'version': '3.1a2b3',
'entry_format': {'format': 'debian%V'}
}]


unittest.main()

0 comments on commit b031776

Please sign in to comment.