Skip to content

build: modernise dependencies so streamrip installs on Python 3.10-3.14 - #1039

Closed
Stensel8 wants to merge 1 commit into
nathom:devfrom
Stensel8:autofix/adoring-curie-ihqmqz
Closed

Stensel8 wants to merge 1 commit into
nathom:devfrom
Stensel8:autofix/adoring-curie-ihqmqz

Conversation

@Stensel8

Copy link
Copy Markdown

Installing on Python 3.14 failed because Pillow was capped at <11, and 10.4.0 has no cp314 wheels, so pip tried (and failed) to compile it from source (upstream #1032, #953, #904).

  • Move pyproject.toml to the PEP 621 [project] table (poetry-core 2.x)
  • Bump every dependency to current releases with 3.14 wheels: Pillow 12, pathvalidate 3, tomlkit 0.15, m3u8 6, aiofiles 25, rich 15, deezer-py 1.3.7, aiohttp 3.14
  • Drop appdirs (only used by the dead streamrip/rip/user_paths.py module, now removed) and aiodns (never imported; it only forced Windows onto the SelectorEventLoop)
  • Drop the Windows SelectorEventLoop policy: that loop cannot spawn subprocesses, so every ffmpeg conversion failed on Windows (upstream [BUG] aiodns needs a SelectorEventLoop on Windows? #729)
  • Force aiohttp's ThreadedResolver so a leftover aiodns in an existing virtualenv cannot bring the problem back
  • Replace aiohttp's deprecated verify_ssl= connector argument with ssl=
  • Replace unused black/isort/flake8 dev deps with ruff, update pytest stack
  • Version 2.3.0 (config version bumped too; old configs auto-update)

Installing on Python 3.14 failed because Pillow was capped at <11, and
10.4.0 has no cp314 wheels, so pip tried (and failed) to compile it from
source (upstream nathom#1032, nathom#953, nathom#904).

- Move pyproject.toml to the PEP 621 [project] table (poetry-core 2.x)
- Bump every dependency to current releases with 3.14 wheels: Pillow 12,
  pathvalidate 3, tomlkit 0.15, m3u8 6, aiofiles 25, rich 15,
  deezer-py 1.3.7, aiohttp 3.14
- Drop appdirs (only used by the dead streamrip/rip/user_paths.py module,
  now removed) and aiodns (never imported; it only forced Windows onto the
  SelectorEventLoop)
- Drop the Windows SelectorEventLoop policy: that loop cannot spawn
  subprocesses, so every ffmpeg conversion failed on Windows (upstream nathom#729)
- Force aiohttp's ThreadedResolver so a leftover aiodns in an existing
  virtualenv cannot bring the problem back
- Replace aiohttp's deprecated verify_ssl= connector argument with ssl=
- Replace unused black/isort/flake8 dev deps with ruff, update pytest stack
- Version 2.3.0 (config version bumped too; old configs auto-update)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019R4WVjfCbmXZyQGNbyDfam
Copilot AI lite review requested due to automatic review settings September 27, 2026 17:44
@Stensel8 Stensel8 closed this Sep 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Critical Poetry CI incompatibility and a stale SSL mock must be fixed.

Review effort: Lite
Findings: 2 High severity

Open (2)
What changed in this PR

Modernizes dependencies and packaging for Python 3.10–3.14, including aiohttp SSL handling and Windows compatibility.

Changes:

  • Migrates to PEP 621 and Poetry 2.x.
  • Updates dependencies and removes obsolete appdirs/aiodns handling.
  • Bumps version/configuration to 2.3.0 and updates tests.
File Summary
tests/​test_ssl_verification.py SSL expectations updated; stale verify_ssl mock still causes test failure.
tests/​test_config.toml Updates test configuration version.
tests/​test_config.py Updates configuration assertions.
streamrip/​utils/​ssl_utils.py Migrates aiohttp connector arguments to ssl=.
streamrip/​rip/​user_paths.py Removes obsolete path management module.
streamrip/​rip/​main.py Removes the Windows selector event-loop policy.
streamrip/​rip/​cli.py Uses threaded DNS resolution.
streamrip/​media/​playlist.py Updates playlist connector configuration.
streamrip/​config.toml Updates bundled configuration version.
streamrip/​config.py Updates configuration version handling.
streamrip/​client/​qobuz.py Updates connector API; associated SSL mock remains incompatible.
streamrip/​client/​client.py Updates client connector setup and resolver handling.
streamrip/​__init__.py Bumps package version.
pyproject.toml Modernizes metadata and dependencies; requires Poetry 2.x while CI uses Poetry 1.5.1.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread pyproject.toml
Comment on lines 74 to +75
[build-system]
requires = ["poetry-core>=1.0.0"]
requires = ["poetry-core>=2.0.0,<3.0.0"]
Comment thread streamrip/client/qobuz.py
Comment on lines +133 to +135
connector = aiohttp.TCPConnector(
**connector_kwargs, resolver=aiohttp.ThreadedResolver()
)
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

Successfully merging this pull request may close these issues.

3 participants