dropbox / dropbox-sdk-python

The Official Dropbox API V2 SDK for Python
https://www.dropbox.com/developers
MIT License
932 stars 317 forks source link

Dependency version specifier invalid with packaging 23.0 #458

Closed andrew8er closed 1 year ago

andrew8er commented 1 year ago

Describe the bug With package managers using packaging 23.0, dependency version specifiers like stone >= 2.* are considered invalid and will fail to install a projects dependencies.

See also:

To Reproduce

Expected Behavior Dependencies install cleanly

Actual Behavior

The installation process fails while parsing the dependencies of the `dropbox` package: ``` pdm.termui: Adding requirement requests>=2.16.2(from dropbox 11.36.0) pdm.termui: Adding requirement six>=1.12.0(from dropbox 11.36.0) pdm.termui: Adding requirement b''(from dropbox 11.36.0) Traceback (most recent call last): File "/usr/local/bin/pdm", line 8, in sys.exit(main()) ^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 259, in main return Core().main(args) ^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 191, in main raise cast(Exception, err).with_traceback(traceback) File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/core.py", line 186, in main f(project, options) File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/cli/commands/install.py", line 58, in handle actions.do_lock( File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/cli/actions.py", line 95, in do_lock mapping, dependencies = resolve( ^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/core.py", line 35, in resolve result = resolver.resolve(requirements, max_rounds) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 521, in resolve state = resolution.resolve(requirements, max_rounds=max_rounds) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 402, in resolve failure_causes = self._attempt_to_pin_criterion(name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 238, in _attempt_to_pin_criterion criteria = self._get_updated_criteria(candidate) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 229, in _get_updated_criteria self._add_to_criteria(criteria, requirement, parent=candidate) File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/resolvers.py", line 172, in _add_to_criteria if not criterion.candidates: File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/resolvelib/structs.py", line 127, in __bool__ next(iter(self)) File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 261, in matches_gen yield from super_find() ^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 150, in matches_gen candidates = self._find_candidates(reqs[0]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/resolver/providers.py", line 127, in _find_candidates can = make_candidate(requirement) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/candidates.py", line 626, in make_candidate return Candidate(req, name, version, link) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/candidates.py", line 145, in __init__ link = req.as_file_link() # type: ignore ^^^^^^^^^^^^^^^^^^ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/pdm/models/requirements.py", line 321, in as_file_link return Link(url) ^^^^^^^^^ File "", line 9, in __init__ File "/usr/local/Cellar/pdm/2.4.0/libexec/lib/python3.11/site-packages/unearth/link.py", line 54, in __post_init__ if self.url.startswith(vcs_prefixes): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: a bytes-like object is required, not 'str' ```

Versions

greg-db commented 1 year ago

Thanks for the report! I'll ask the team to look into this.

chickahoona commented 1 year ago

I am dropping support for dropbox at the moment due to this issue here.

greg-db commented 1 year ago

@chickahoona Thanks for the note!

edsalloor commented 1 year ago

I'm experiencing the same issue. Looking forward to the next release. 🙏🏻

trollwookiee commented 1 year ago

when can we expect a new release fixing the issue for dependency version specifiers like stone >= 2.* ?

greg-db commented 1 year ago

I don't have an update to share yet. I'm checking in with the team.

andrew8er commented 1 year ago

I don't have an update to share yet. I'm checking in with the team.

Don't want to to be too cocky, but when a one line change takes this much time to process, you should investigate your internal processes. This is embarrassing.

greg-db commented 1 year ago

Thanks for the feedback!

andrew8er commented 1 year ago

On a more helpful note, PDM can handle this since version 2.4.1. For anyone affected, this might be a solution to consider.

sagarvora commented 1 year ago

This should be fixed after #456 gets released.

andrew8er commented 1 year ago

Fixed in version 11.36.1.

greg-db commented 1 year ago

For reference, there was an issue publishing v11.36.1 with this to PyPI, but v11.36.2 is now published on PyPI.