Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reuse packaging and its base classes #2

Open
pombredanne opened this issue Jan 16, 2023 · 2 comments
Open

Reuse packaging and its base classes #2

pombredanne opened this issue Jan 16, 2023 · 2 comments

Comments

@pombredanne
Copy link
Member

This error at https://dev.azure.com/nexB/2b40e32d-2a30-4c1b-b0f0-7fb807f657bb/_apis/build/builds/9618/logs/48

2023-01-15T17:07:54.5426090Z _________________________ test_api_with_specifier_pdt __________________________
2023-01-15T17:07:54.5427340Z [gw0] darwin -- Python 3.7.15 /Users/runner/work/1/s/venv/bin/python
2023-01-15T17:07:54.5427640Z 
2023-01-15T17:07:54.5428050Z     def test_api_with_specifier_pdt():
2023-01-15T17:07:54.5428530Z         result_file = test_env.get_temp_file("json")
2023-01-15T17:07:54.5429740Z         expected_file = test_env.get_test_loc("test-api-pdt-expected.json", must_exist=False)
2023-01-15T17:07:54.5430460Z         with open(result_file, "w") as result:
2023-01-15T17:07:54.5430880Z             result.write(
2023-01-15T17:07:54.5431290Z                 json.dumps(
2023-01-15T17:07:54.5431710Z                     resolver_api(
2023-01-15T17:07:54.5432490Z                         specifiers=["flask==2.1.2"],
2023-01-15T17:07:54.5433370Z                         python_version="3.10",
2023-01-15T17:07:54.5433870Z                         operating_system="linux",
2023-01-15T17:07:54.5434290Z >                       pdt_output=True,
2023-01-15T17:07:54.5435350Z                     ).to_dict()
2023-01-15T17:07:54.5435690Z                 )
2023-01-15T17:07:54.5436080Z             )
2023-01-15T17:07:54.5436210Z 
2023-01-15T17:07:54.5436610Z tests/test_api.py:55: 
2023-01-15T17:07:54.5437100Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2023-01-15T17:07:54.5437660Z src/python_inspector/api.py:160: in resolve_dependencies
2023-01-15T17:07:54.5438300Z     dep = dependencies.get_dependency(specifier=specifier)
2023-01-15T17:07:54.5438890Z src/python_inspector/dependencies.py:69: in get_dependency
2023-01-15T17:07:54.5439390Z     requirement_line=specifier,
2023-01-15T17:07:54.5439940Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
2023-01-15T17:07:54.5440220Z 
2023-01-15T17:07:54.5441510Z self = <[AttributeError("'InstallRequirement' object has no attribute 'req'") raised in repr()] InstallRequirement object at 0x10f3de290>
2023-01-15T17:07:54.5442820Z req = <Requirement('flask==2.1.2')>, requirement_line = 'flask==2.1.2'
2023-01-15T17:07:54.5443510Z link = None, marker = None, install_options = None, global_options = None
2023-01-15T17:07:54.5444250Z hash_options = None, is_constraint = False, extras = (), invalid_options = None
2023-01-15T17:07:54.5444560Z 
2023-01-15T17:07:54.5444930Z     def __init__(
2023-01-15T17:07:54.5445260Z         self,
2023-01-15T17:07:54.5445640Z         req: Optional[Requirement],
2023-01-15T17:07:54.5446130Z         requirement_line: RequirementLine,
2023-01-15T17:07:54.5446590Z         link: Optional[Link] = None,
2023-01-15T17:07:54.5447030Z         marker: Optional[Marker] = None,
2023-01-15T17:07:54.5447490Z         install_options: Optional[List[str]] = None,
2023-01-15T17:07:54.5448060Z         global_options: Optional[List[str]] = None,
2023-01-15T17:07:54.5448570Z         hash_options: Optional[List[str]] = None,
2023-01-15T17:07:54.5449020Z         is_constraint: bool = False,
2023-01-15T17:07:54.5449500Z         extras: Collection[str] = (),
2023-01-15T17:07:54.5450030Z         invalid_options: Optional[Dict[str, Any]] = None,
2023-01-15T17:07:54.5450910Z     ) -> None:
2023-01-15T17:07:54.5451280Z         """
2023-01-15T17:07:54.5451720Z         Initialize a new pip requirement
2023-01-15T17:07:54.5452090Z     
2023-01-15T17:07:54.5453010Z         - ``req`` is a packaging Requirement object that may be None
2023-01-15T17:07:54.5454170Z         - ``requirement_line`` is the original line this requirement was found
2023-01-15T17:07:54.5455330Z         - ``link`` is a Link object provided when the requirement is a path or URL
2023-01-15T17:07:54.5456560Z         - ``marker`` is a packaging Marker object.
2023-01-15T17:07:54.5457160Z           This is provided when a marker is used and there is no ``req`` Requirement.
2023-01-15T17:07:54.5458380Z         - ``install_options``, ``global_options`` and ``hash_options`` are the
2023-01-15T17:07:54.5459550Z           CLI-style pip options for this specifc requirement.
2023-01-15T17:07:54.5460630Z         - ``is_constraint`` is True if this requirement came from loading a
2023-01-15T17:07:54.5461650Z            nested ``-c/--constraint`` file.
2023-01-15T17:07:54.5462740Z         - ``extras`` is a list of [extra] strings for this package.
2023-01-15T17:07:54.5463360Z            This is provided when extras are used and there is no ``req`` Requirement.
2023-01-15T17:07:54.5464690Z         - ``invalid_options`` are global pip options that are mistakenly set at the line-level.
2023-01-15T17:07:54.5465350Z            This is an error.
2023-01-15T17:07:54.5465690Z         """
2023-01-15T17:07:54.5466170Z >       assert req is None or isinstance(req, Requirement), req
2023-01-15T17:07:54.5467210Z E       AssertionError: <Requirement('flask==2.1.2')>
2023-01-15T17:07:54.5468660Z E       assert (<Requirement('flask==2.1.2')> is None or False)
2023-01-15T17:07:54.5470340Z E        +  where False = isinstance(<Requirement('flask==2.1.2')>, Requirement)
2023-01-15T17:07:54.5470670Z 
2023-01-15T17:07:54.5471700Z venv/lib/python3.7/site-packages/pip_requirements_parser.py:1970: AssertionError

is because packvers and packaging have different class hierarchies and it would be better to adopt a different approach.

None of these two approached is satisfying. We should go a different way, which would be making packavers a lightweight fork of packaging.version that WOULD USE the packaging.version base classes.

@benjamb
Copy link

benjamb commented Apr 26, 2023

Are you thinking something along the lines of: https://github.com/nexB/packvers/compare/main2...benjamb:packvers:base-classes?expand=1

Though perhaps even further stripped back.

@pombredanne
Copy link
Member Author

@benjamb yes either something like this, or just extracting the LegacyVersion only and only provide support for this. packaging as evolved massively since this fork was done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants