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

PDM encodes + into %2B, resulting in pdm sync failed #1073

Closed
1 task done
cye18 opened this issue May 9, 2022 · 0 comments · Fixed by #1075
Closed
1 task done

PDM encodes + into %2B, resulting in pdm sync failed #1073

cye18 opened this issue May 9, 2022 · 0 comments · Fixed by #1075
Labels
🐛 bug Something isn't working

Comments

@cye18
Copy link
Contributor

cye18 commented May 9, 2022

  • I have searched the issue tracker and believe that this is not a duplicate.

Make sure you run commands with -v flag before pasting the output.

Steps to reproduce

  • In an empty folder
  • pdm init
  • pdm add ./*+*.whl, adding a local dependency whose file name contains +

Actual behavior

  • PDM will add a dependency line in which + is encoded as %2B
    • The dependency line: "dependency_name @ file:///${PROJECT_ROOT}/dependency_name-dependency_version_number.whl",, where dependency_version_number contains +
  • It works fine in the current project. However, if I copy pyproject.toml and pdm.lock to a new peoject and run pdm sync, it returns KeyError: ('dependency_name', 'dependency_version_number', 'file:///${PROJECT_ROOT}/*%2B*.whl', False)

Entire message of pdm sync -v is below:

Traceback (most recent call last):
  File "/home/ds/.local/bin/pdm", line 8, in <module>
    sys.exit(main())
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/core.py", line 233, in main
    return Core().main(args)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/core.py", line 168, in main
    raise cast(Exception, err).with_traceback(traceback)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/core.py", line 163, in main
    f(options.project, options)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/cli/commands/sync.py", line 26, in handle
    actions.do_sync(
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/cli/actions.py", line 188, in do_sync
    candidates = resolve_candidates_from_lockfile(project, requirements)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/cli/actions.py", line 135, in resolve_candidates_from_lockfile
    mapping, *_ = resolve(
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/resolver/core.py", line 31, in resolve
    result = resolver.resolve(requirements, max_rounds)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/resolvelib/resolvers.py", line 481, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/resolvelib/resolvers.py", line 373, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/resolvelib/resolvers.py", line 213, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/resolvelib/resolvers.py", line 203, in _get_updated_criteria
    for requirement in self._p.get_dependencies(candidate=candidate):
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/resolver/providers.py", line 172, in get_dependencies
    deps, requires_python, _ = self.repository.get_dependencies(candidate)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/models/repositories.py", line 407, in get_dependencies
    reqs, python, summary = super().get_dependencies(candidate)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/models/repositories.py", line 70, in get_dependencies
    requirements, requires_python, summary = getter(candidate)
  File "/home/ds/.local/share/pdm/venv/lib/python3.8/site-packages/pdm/models/repositories.py", line 399, in _get_dependencies_from_lockfile
    return self.candidate_info[self._identify_candidate(candidate)]
KeyError: ('dependency_name', 'dependency_version_number', 'file:///${PROJECT_ROOT}/*%2B*.whl', False)

If I manually replace %2B with + in pyproject.toml and run pdm install, it works well.

Expected behavior

Don't encode + to %2B when running pdm add.

I'm not sure if other characters will be encoded as well. If yes, they may cause the same issue and need to be fixed too.

Environment Information

# Paste the output of `pdm info && pdm info --env` below:
PDM version:        1.14.0
Python Interpreter: /usr/bin/python3.8 (3.8)
Project Root:       /home/ds/projects/test_pdm_2
Project Packages:   /home/ds/projects/test_pdm_2/__pypackages__/3.8

{
  "implementation_name": "cpython",
  "implementation_version": "3.8.10",
  "os_name": "posix",
  "platform_machine": "x86_64",
  "platform_release": "5.13.0-1024-gcp",
  "platform_system": "Linux",
  "platform_version": "#29~20.04.1-Ubuntu SMP Thu Apr 14 23:15:00 UTC 2022",
  "python_full_version": "3.8.10",
  "platform_python_implementation": "CPython",
  "python_version": "3.8",
  "sys_platform": "linux"
}
@cye18 cye18 added the 🐛 bug Something isn't working label May 9, 2022
@cye18 cye18 changed the title PDM converts + into %2B, resulting in pdm sync failed PDM encodes + into %2B, resulting in pdm sync failed May 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant