From c1fab91e3ab04b19973e9fc63cb296f86059ac13 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Fri, 1 Sep 2023 13:35:18 +0200 Subject: [PATCH] Switch out conditional requirement parser Fixes ``` Traceback (most recent call last): File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 35, in __init__ parsed = _parse_requirement(requirement_string) File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/_parser.py", line 64, in parse_requirement return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES)) File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/_parser.py", line 73, in _parse_requirement name_token = tokenizer.expect( File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/_tokenizer.py", line 140, in expect raise self.raise_syntax_error(f"Expected {expected}") File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/_tokenizer.py", line 165, in raise_syntax_error raise ParserSyntaxError( pkg_resources.extern.packaging._tokenizer.ParserSyntaxError: Expected package name at the start of dependency specifier "git+https://github.com/jakobmerljak/pyarcrest.git@dev" ^ The above exception was the direct cause of the following exception: Traceback (most recent call last): File "", line 1, in File "/storage/srv/galaxy/server/lib/galaxy/dependencies/__init__.py", line 312, in optional conditional = ConditionalDependencies(config_file) File "/storage/srv/galaxy/server/lib/galaxy/dependencies/__init__.py", line 45, in __init__ self.get_conditional_requirements() File "/storage/srv/galaxy/server/lib/galaxy/dependencies/__init__.py", line 176, in get_conditional_requirements for req in pkg_resources.parse_requirements(open(crfile).readlines()): File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/__init__.py", line 3174, in __init__ super(Requirement, self).__init__(requirement_string) File "/storage/srv/galaxy/server/.venv/lib64/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 37, in __init__ raise InvalidRequirement(str(e)) from e pkg_resources.extern.packaging.requirements.InvalidRequirement: Expected package name at the start of dependency specifier "git+https://github.com/jakobmerljak/pyarcrest.git@dev" ^ ``` for advanced package specifiers that might be used during development. --- lib/galaxy/dependencies/__init__.py | 14 ++++++++------ lib/galaxy/dependencies/pinned-requirements.txt | 1 + pyproject.toml | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index eb484b9dcbd..1530b48fb3c 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -10,8 +10,8 @@ from os.path import ( join, ) -import pkg_resources import yaml +from dparse import parse from galaxy.util import ( asbool, @@ -173,8 +173,10 @@ class ConditionalDependencies: def get_conditional_requirements(self): crfile = join(dirname(__file__), "conditional-requirements.txt") - for req in pkg_resources.parse_requirements(open(crfile).readlines()): - self.conditional_reqs.append(req) + with open(crfile) as fh: + dependency_file = parse(fh.read(), file_type="requirements.txt") + for dep in dependency_file.dependencies: + self.conditional_reqs.append(dep) def check(self, name): try: @@ -307,7 +309,7 @@ def optional(config_file=None): return [] rval = [] conditional = ConditionalDependencies(config_file) - for opt in conditional.conditional_reqs: - if conditional.check(opt.key): - rval.append(str(opt)) + for dependency in conditional.conditional_reqs: + if conditional.check(dependency.name): + rval.append(dependency.line) return rval diff --git a/lib/galaxy/dependencies/pinned-requirements.txt b/lib/galaxy/dependencies/pinned-requirements.txt index 2985546ff68..f754ad8be39 100644 --- a/lib/galaxy/dependencies/pinned-requirements.txt +++ b/lib/galaxy/dependencies/pinned-requirements.txt @@ -61,6 +61,7 @@ dictobj==0.4 ; python_version >= "3.7" and python_version < "3.12" dnspython==2.3.0 ; python_version >= "3.7" and python_version < "3.12" docopt==0.6.2 ; python_version >= "3.7" and python_version < "3.12" docutils==0.18.1 ; python_version >= "3.7" and python_version < "3.12" +dparse==0.6.3 ; python_version >= "3.7" and python_version < "3.12" ecdsa==0.18.0 ; python_version >= "3.7" and python_version < "3.12" edam-ontology==1.25.2 ; python_version >= "3.7" and python_version < "3.12" email-validator==2.0.0.post2 ; python_version >= "3.7" and python_version < "3.12" diff --git a/pyproject.toml b/pyproject.toml index 0d96d9c7502..44f2cd221b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,7 @@ conda-package-streaming = "*" dictobj = "*" dnspython = "*" docutils = "!=0.17, !=0.17.1" +dparse = "*" edam-ontology = "*" fastapi = ">=0.71.0, !=0.89.0, <0.99" # https://github.com/tiangolo/fastapi/issues/4041 https://github.com/tiangolo/fastapi/issues/5861 fastapi-utils = "*"