-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Description
Description
Any operation which would update the lockfile results in a list index out of range error. This includes poetry add <package>, poetry remove <package>, and poetry lock --no-update. Trying to add or remove any package triggers the error.
This doesn't affect all of my poetry projects, but the issue does seem to be "spreading" – I first noticed it a while ago but it just started happening in another one of my projects in the last couple days, and I can't think of any changes I made that might have caused it.
Other collaborators on these same projects do not have this issue, even on the same version of poetry.
Workarounds
I have not found any workarounds.
I've tried removing the poetry environment (poetry env remove $(basename $(poetry env info --path))) and reinstalling, clearing caches (poetry cache clear --all .) and reinstalling, deleting poetry.lock and reinstalling, deleting the entire local repository and re-cloning it, uninstalling and reinstalling poetry via pipx, and rebooting my computer, all to no avail.
Poetry Installation Method
pipx
Operating System
MacOS 15.0.1
Poetry Version
1.8.4
Poetry Configuration
> $ poetry config --list
cache-dir = "/Users/ethanneid/Library/Caches/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /Users/ethanneid/Library/Caches/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = truePython Sysconfig
> $ python -m sysconfig
Platform: "macosx-14.7-arm64"
Python version: "3.12"
Current installation scheme: "venv"
Paths:
data = "/Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12"
include = "/Users/ethanneid/.pyenv/versions/3.12.7/include/python3.12"
platinclude = "/Users/ethanneid/.pyenv/versions/3.12.7/include/python3.12"
platlib = "/Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12/lib/python3.12/site-packages"
platstdlib = "/Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12/lib/python3.12"
purelib = "/Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12/lib/python3.12/site-packages"
scripts = "/Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12/bin"
stdlib = "/Users/ethanneid/.pyenv/versions/3.12.7/lib/python3.12"
Variables:
[cut due to length, will post below if necessary]Example pyproject.toml
[tool.poetry]
name = "erp-clients"
version = "0.0.1"
description = "Interfaces for connecting to ERP systems"
authors = ["Tech Admin <[email protected]>"]
readme = "README.md"
packages = [{include = "src"}]
[tool.poetry.dependencies]
python = "^3.9"
arrow = "^1.3.0"
eulxml = "^1.1.3"
pydantic = "^1.9.1"
simplejson = "^3.19.3"
types-simplejson = "^3.19.0.20240801"
requests = "2.31.0"
types-requests = "2.31.0.6"
zeep = "^4.2.1"
types-urllib3 = "^1.26.25.14"
setuptools = "^75.1.0"
requests-toolbelt = "^1.0.0"
python-magic = "^0.4.27"
fastapi = "^0.115.0"
[tool.poetry.group.dev.dependencies]
black = "^24.8.0"
isort = "^5.13.2"
mypy = "^1.11.2"
pycodestyle = "^2.12.1"
autoflake = "^2.3.1"
pytest = "^8.3.3"
pytest-mock = "^3.14.0"
pytest-unordered = "^0.6.1"
requests-mock = "^1.12.1"
mock = "^5.1.0"
types-mock = "^5.1.0.20240425"
coverage = "^7.6.1"
pytest-cov = "^5.0.0"
pytest-xdist = "^3.6.1"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.scripts]
lint="scripts.lint:run_lint"
format="scripts.lint:run_formatting"
ci_test="scripts.ci_test:run"
[tool.mypy]
ignore_missing_imports = true
explicit_package_bases = true
namespace_packages = true
check_untyped_defs = true
exclude = ["venv/"]Poetry Runtime Logs
> $ poetry remove fastapi -vvv
Loading configuration file /Users/ethanneid/Library/Application Support/pypoetry/config.toml
Using virtualenv: /Users/ethanneid/Library/Caches/pypoetry/virtualenvs/erp-clients-Yf6K96dB-py3.12
Updating dependencies
Resolving dependencies...
1: fact: erp-clients is 0.0.1
1: derived: erp-clients
1: fact: erp-clients depends on arrow (^1.3.0)
1: fact: erp-clients depends on eulxml (^1.1.3)
1: fact: erp-clients depends on pydantic (^1.9.1)
1: fact: erp-clients depends on simplejson (^3.19.3)
1: fact: erp-clients depends on types-simplejson (^3.19.0.20240801)
1: fact: erp-clients depends on requests (2.31.0)
1: fact: erp-clients depends on types-requests (2.31.0.6)
1: fact: erp-clients depends on zeep (^4.2.1)
1: fact: erp-clients depends on types-urllib3 (^1.26.25.14)
1: fact: erp-clients depends on setuptools (^75.1.0)
1: fact: erp-clients depends on requests-toolbelt (^1.0.0)
1: fact: erp-clients depends on python-magic (^0.4.27)
1: fact: erp-clients depends on black (^24.8.0)
1: fact: erp-clients depends on isort (^5.13.2)
1: fact: erp-clients depends on mypy (^1.11.2)
1: fact: erp-clients depends on pycodestyle (^2.12.1)
1: fact: erp-clients depends on autoflake (^2.3.1)
1: fact: erp-clients depends on pytest (^8.3.3)
1: fact: erp-clients depends on pytest-mock (^3.14.0)
1: fact: erp-clients depends on pytest-unordered (^0.6.1)
1: fact: erp-clients depends on requests-mock (^1.12.1)
1: fact: erp-clients depends on mock (^5.1.0)
1: fact: erp-clients depends on types-mock (^5.1.0.20240425)
1: fact: erp-clients depends on coverage (^7.6.1)
1: fact: erp-clients depends on pytest-cov (^5.0.0)
1: fact: erp-clients depends on pytest-xdist (^3.6.1)
1: selecting erp-clients (0.0.1)
1: derived: pytest-xdist (>=3.6.1,<4.0.0)
1: derived: pytest-cov (>=5.0.0,<6.0.0)
1: derived: coverage (>=7.6.1,<8.0.0)
1: derived: types-mock (>=5.1.0.20240425,<6.0.0.0)
1: derived: mock (>=5.1.0,<6.0.0)
1: derived: requests-mock (>=1.12.1,<2.0.0)
1: derived: pytest-unordered (>=0.6.1,<0.7.0)
1: derived: pytest-mock (>=3.14.0,<4.0.0)
1: derived: pytest (>=8.3.3,<9.0.0)
1: derived: autoflake (>=2.3.1,<3.0.0)
1: derived: pycodestyle (>=2.12.1,<3.0.0)
1: derived: mypy (>=1.11.2,<2.0.0)
1: derived: isort (>=5.13.2,<6.0.0)
1: derived: black (>=24.8.0,<25.0.0)
1: derived: python-magic (>=0.4.27,<0.5.0)
1: derived: requests-toolbelt (>=1.0.0,<2.0.0)
1: derived: setuptools (>=75.1.0,<76.0.0)
1: derived: types-urllib3 (>=1.26.25.14,<2.0.0.0)
1: derived: zeep (>=4.2.1,<5.0.0)
1: derived: types-requests (==2.31.0.6)
1: derived: requests (==2.31.0)
1: derived: types-simplejson (>=3.19.0.20240801,<4.0.0.0)
1: derived: simplejson (>=3.19.3,<4.0.0)
1: derived: pydantic (>=1.9.1,<2.0.0)
1: derived: eulxml (>=1.1.3,<2.0.0)
1: derived: arrow (>=1.3.0,<2.0.0)
1: fact: pytest-xdist (3.6.1) depends on execnet (>=2.1)
1: fact: pytest-xdist (3.6.1) depends on pytest (>=7.0.0)
1: selecting pytest-xdist (3.6.1)
1: derived: execnet (>=2.1)
1: fact: pytest-cov (5.0.0) depends on pytest (>=4.6)
1: fact: pytest-cov (5.0.0) depends on coverage[toml] (>=5.2.1)
1: selecting pytest-cov (5.0.0)
1: derived: coverage[toml] (>=5.2.1)
1: selecting coverage (7.6.1)
1: selecting types-mock (5.1.0.20240425)
1: selecting mock (5.1.0)
1: fact: requests-mock (1.12.1) depends on requests (>=2.22,<3)
1: selecting requests-mock (1.12.1)
1: fact: pytest-unordered (0.6.1) depends on pytest (>=7.0.0)
1: selecting pytest-unordered (0.6.1)
1: fact: pytest-mock (3.14.0) depends on pytest (>=6.2.5)
1: selecting pytest-mock (3.14.0)
1: fact: pytest (8.3.3) depends on iniconfig (*)
1: fact: pytest (8.3.3) depends on packaging (*)
1: fact: pytest (8.3.3) depends on pluggy (>=1.5,<2)
1: fact: pytest (8.3.3) depends on exceptiongroup (>=1.0.0rc8)
1: fact: pytest (8.3.3) depends on tomli (>=1)
1: fact: pytest (8.3.3) depends on colorama (*)
1: selecting pytest (8.3.3)
1: derived: colorama
1: derived: tomli (>=1)
1: derived: exceptiongroup (>=1.0.0rc8)
1: derived: pluggy (>=1.5,<2)
1: derived: packaging
1: derived: iniconfig
1: fact: autoflake (2.3.1) depends on pyflakes (>=3.0.0)
1: fact: autoflake (2.3.1) depends on tomli (>=2.0.1)
1: selecting autoflake (2.3.1)
1: derived: tomli (>=2.0.1)
1: derived: pyflakes (>=3.0.0)
1: selecting pycodestyle (2.12.1)
1: fact: mypy (1.11.2) depends on typing-extensions (>=4.6.0)
1: fact: mypy (1.11.2) depends on mypy-extensions (>=1.0.0)
1: fact: mypy (1.11.2) depends on tomli (>=1.1.0)
1: selecting mypy (1.11.2)
1: derived: mypy-extensions (>=1.0.0)
1: derived: typing-extensions (>=4.6.0)
1: selecting isort (5.13.2)
1: fact: black (24.8.0) depends on click (>=8.0.0)
1: fact: black (24.8.0) depends on mypy-extensions (>=0.4.3)
1: fact: black (24.8.0) depends on packaging (>=22.0)
1: fact: black (24.8.0) depends on pathspec (>=0.9.0)
1: fact: black (24.8.0) depends on platformdirs (>=2)
1: fact: black (24.8.0) depends on tomli (>=1.1.0)
1: fact: black (24.8.0) depends on typing-extensions (>=4.0.1)
1: selecting black (24.8.0)
1: derived: platformdirs (>=2)
1: derived: pathspec (>=0.9.0)
1: derived: packaging (>=22.0)
1: derived: click (>=8.0.0)
1: selecting python-magic (0.4.27)
1: fact: requests-toolbelt (1.0.0) depends on requests (>=2.0.1,<3.0.0)
1: selecting requests-toolbelt (1.0.0)
1: selecting setuptools (75.1.0)
1: selecting types-urllib3 (1.26.25.14)
1: fact: zeep (4.2.1) depends on attrs (>=17.2.0)
1: fact: zeep (4.2.1) depends on isodate (>=0.5.4)
1: fact: zeep (4.2.1) depends on lxml (>=4.6.0)
1: fact: zeep (4.2.1) depends on platformdirs (>=1.4.0)
1: fact: zeep (4.2.1) depends on requests (>=2.7.0)
1: fact: zeep (4.2.1) depends on requests-toolbelt (>=0.7.1)
1: fact: zeep (4.2.1) depends on requests-file (>=1.5.1)
1: fact: zeep (4.2.1) depends on pytz (*)
1: selecting zeep (4.2.1)
1: derived: pytz
1: derived: requests-file (>=1.5.1)
1: derived: lxml (>=4.6.0)
1: derived: isodate (>=0.5.4)
1: derived: attrs (>=17.2.0)
1: fact: types-requests (2.31.0.6) depends on types-urllib3 (*)
1: selecting types-requests (2.31.0.6)
1: fact: requests (2.31.0) depends on charset-normalizer (>=2,<4)
1: fact: requests (2.31.0) depends on idna (>=2.5,<4)
1: fact: requests (2.31.0) depends on urllib3 (>=1.21.1,<3)
1: fact: requests (2.31.0) depends on certifi (>=2017.4.17)
1: selecting requests (2.31.0)
1: derived: certifi (>=2017.4.17)
1: derived: urllib3 (>=1.21.1,<3)
1: derived: idna (>=2.5,<4)
1: derived: charset-normalizer (>=2,<4)
1: selecting types-simplejson (3.19.0.20240801)
1: selecting simplejson (3.19.3)
1: fact: pydantic (1.10.18) depends on typing-extensions (>=4.2.0)
1: selecting pydantic (1.10.18)
1: fact: eulxml (1.1.3) depends on ply (>=3.8)
1: fact: eulxml (1.1.3) depends on lxml (>=3.4)
1: fact: eulxml (1.1.3) depends on six (>=1.10)
1: selecting eulxml (1.1.3)
1: derived: six (>=1.10)
1: derived: ply (>=3.8)
1: fact: arrow (1.3.0) depends on python-dateutil (>=2.7.0)
1: fact: arrow (1.3.0) depends on types-python-dateutil (>=2.8.10)
1: selecting arrow (1.3.0)
1: derived: types-python-dateutil (>=2.8.10)
1: derived: python-dateutil (>=2.7.0)
1: selecting execnet (2.1.1)
1: fact: coverage[toml] (7.6.1) depends on coverage (7.6.1)
1: fact: coverage[toml] (7.6.1) depends on tomli (*)
1: selecting coverage[toml] (7.6.1)
1: selecting pluggy (1.5.0)
1: selecting packaging (24.1)
1: selecting iniconfig (2.0.0)
1: selecting pyflakes (3.2.0)
1: selecting mypy-extensions (1.0.0)
1: selecting typing-extensions (4.12.2)
1: selecting platformdirs (4.3.6)
1: selecting pathspec (0.12.1)
1: fact: click (8.1.7) depends on colorama (*)
1: selecting click (8.1.7)
1: selecting pytz (2024.2)
1: fact: requests-file (2.1.0) depends on requests (>=1.0.0)
1: selecting requests-file (2.1.0)
1: selecting lxml (5.3.0)
Source (PyPI): Getting info for isodate (0.7.0) from PyPI
Checking if keyring is available
[keyring:keyring.backend] Loading KWallet
[keyring:keyring.backend] Loading SecretService
[keyring:keyring.backend] Loading Windows
[keyring:keyring.backend] Loading chainer
[keyring:keyring.backend] Loading libsecret
[keyring:keyring.backend] Loading macOS
Using keyring backend 'macOS Keyring'
Creating new session for pypi.org
[urllib3:urllib3.connectionpool] Starting new HTTPS connection (1): pypi.org:443
[urllib3:urllib3.connectionpool] https://pypi.org:443 "GET /pypi/isodate/0.7.0/json HTTP/11" 304 0
[filelock:filelock] Attempting to acquire lock 4357348656 on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/0/0/4/6/800469fe0dd874dfc32bf2d9c557e2485ea3ee8d9d1f92c1cbf65b9e.lock
[filelock:filelock] Lock 4357348656 acquired on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/0/0/4/6/800469fe0dd874dfc32bf2d9c557e2485ea3ee8d9d1f92c1cbf65b9e.lock
[filelock:filelock] Attempting to release lock 4357348656 on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/0/0/4/6/800469fe0dd874dfc32bf2d9c557e2485ea3ee8d9d1f92c1cbf65b9e.lock
[filelock:filelock] Lock 4357348656 released on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/0/0/4/6/800469fe0dd874dfc32bf2d9c557e2485ea3ee8d9d1f92c1cbf65b9e.lock
Source (PyPI): No dependencies found, downloading metadata and/or archives
[urllib3:urllib3.connectionpool] https://pypi.org:443 "GET /simple/isodate/ HTTP/11" 304 0
[filelock:filelock] Attempting to acquire lock 4357331920 on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/9/d/e/5/89de5de283364f58ce73419b263951b80158f08eeba0e52a3be44b7e.lock
[filelock:filelock] Lock 4357331920 acquired on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/9/d/e/5/89de5de283364f58ce73419b263951b80158f08eeba0e52a3be44b7e.lock
[filelock:filelock] Attempting to release lock 4357331920 on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/9/d/e/5/89de5de283364f58ce73419b263951b80158f08eeba0e52a3be44b7e.lock
[filelock:filelock] Lock 4357331920 released on /Users/ethanneid/Library/Caches/pypoetry/cache/repositories/PyPI/_http/8/9/d/e/5/89de5de283364f58ce73419b263951b80158f08eeba0e52a3be44b7e.lock
1: Version solving took 0.150 seconds.
1: Tried 1 solutions.
Stack trace:
22 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:327 in run
325│
326│ try:
→ 327│ exit_code = self._run(io)
328│ except BrokenPipeError:
329│ # If we are piped to another process, it may close early and send a
21 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/application.py:190 in _run
188│ self._load_plugins(io)
189│
→ 190│ exit_code: int = super()._run(io)
191│ return exit_code
192│
20 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:431 in _run
429│ io.input.interactive(interactive)
430│
→ 431│ exit_code = self._run_command(command, io)
432│ self._running_command = None
433│
19 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:473 in _run_command
471│
472│ if error is not None:
→ 473│ raise error
474│
475│ return terminate_event.exit_code
18 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:457 in _run_command
455│
456│ if command_event.command_should_run():
→ 457│ exit_code = command.run(io)
458│ else:
459│ exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
17 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/commands/base_command.py:117 in run
115│ io.input.validate()
116│
→ 117│ return self.execute(io) or 0
118│
119│ def merge_application_definition(self, merge_args: bool = True) -> None:
16 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/commands/command.py:61 in execute
59│
60│ try:
→ 61│ return self.handle()
62│ except KeyboardInterrupt:
63│ return 1
15 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/commands/remove.py:117 in handle
115│ self.installer.whitelist(removed_set)
116│
→ 117│ status = self.installer.run()
118│
119│ if not self.option("dry-run") and status == 0:
14 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/installation/installer.py:104 in run
102│ self.verbose(True)
103│
→ 104│ return self._do_install()
105│
106│ def dry_run(self, dry_run: bool = True) -> Installer:
13 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/installation/installer.py:241 in _do_install
239│ source_root=self._env.path.joinpath("src")
240│ ):
→ 241│ ops = solver.solve(use_latest=self._whitelist).calculate_operations()
242│ else:
243│ self._io.write_line("Installing dependencies from lock file")
12 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/puzzle/solver.py:71 in solve
69│ with self._progress(), self._provider.use_latest_for(use_latest or []):
70│ start = time.time()
→ 71│ packages, depths = self._solve()
72│ end = time.time()
73│
11 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/puzzle/solver.py:154 in _solve
152│
153│ try:
→ 154│ result = resolve_version(self._package, self._provider)
155│
156│ packages = result.packages
10 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/mixology/__init__.py:18 in resolve_version
16│ solver = VersionSolver(root, provider)
17│
→ 18│ return solver.solve()
19│
9 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/mixology/version_solver.py:175 in solve
173│ while next is not None:
174│ self._propagate(next)
→ 175│ next = self._choose_package_version()
176│
177│ return self._result()
8 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/mixology/version_solver.py:514 in _choose_package_version
512│ package = locked
513│
→ 514│ package = self._provider.complete_package(package)
515│
516│ conflict = False
7 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/puzzle/provider.py:489 in complete_package
487│ dependency_package = DependencyPackage(
488│ dependency,
→ 489│ self._pool.package(
490│ package.pretty_name,
491│ package.version,
6 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/repository_pool.py:204 in package
202│ for repo in self.repositories:
203│ try:
→ 204│ return repo.package(name, version, extras=extras)
205│ except PackageNotFound:
206│ continue
5 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/cached_repository.py:75 in package
73│ extras: list[str] | None = None,
74│ ) -> Package:
→ 75│ return self.get_release_info(canonicalize_name(name), version).to_package(
76│ name=name, extras=extras
77│ )
4 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/cached_repository.py:52 in get_release_info
50│ return PackageInfo.load(self._get_release_info(name, version))
51│
→ 52│ cached = self._release_cache.remember(
53│ f"{name}:{version}", lambda: self._get_release_info(name, version)
54│ )
3 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/utils/cache.py:147 in remember
145│ value = self.get(key)
146│ if value is None:
→ 147│ value = callback() if callable(callback) else callback
148│ self.put(key, value, minutes)
149│ return value
2 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/cached_repository.py:53 in <lambda>
51│
52│ cached = self._release_cache.remember(
→ 53│ f"{name}:{version}", lambda: self._get_release_info(name, version)
54│ )
55│
1 ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/pypi_repository.py:177 in _get_release_info
175│ page = self.get_page(name)
176│ links = list(page.links_for_version(name, version))
→ 177│ info = self._get_info_from_links(links)
178│
179│ data.requires_dist = info.requires_dist
IndexError
list index out of range
at ~/Library/Application Support/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/http_repository.py:328 in _get_info_from_links
324│ return self._get_info_from_metadata(
325│ first_wheel
326│ ) or self._get_info_from_wheel(first_wheel)
327│
→ 328│ return self._get_info_from_metadata(sdists[0]) or self._get_info_from_sdist(
329│ sdists[0]
330│ )
331│
332│ def _links_to_data(self, links: list[Link], data: PackageInfo) -> dict[str, Any]: