Skip to content

Bump cryptography from 3.4.6 to 3.4.7#116

Merged
marcelveldt merged 1 commit intomasterfrom
dependabot/pip/cryptography-3.4.7
Jun 23, 2021
Merged

Bump cryptography from 3.4.6 to 3.4.7#116
marcelveldt merged 1 commit intomasterfrom
dependabot/pip/cryptography-3.4.7

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github Jun 7, 2021

Bumps cryptography from 3.4.6 to 3.4.7.

Changelog

Sourced from cryptography's changelog.

3.4.7 - 2021-03-25


* Updated Windows, macOS, and ``manylinux`` wheels to be compiled with
  OpenSSL 1.1.1k.

.. _v3-4-6:

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [cryptography](https://github.com/pyca/cryptography) from 3.4.6 to 3.4.7.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](pyca/cryptography@3.4.6...3.4.7)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@marcelveldt marcelveldt merged commit e6b5b2e into master Jun 23, 2021
@marcelveldt marcelveldt deleted the dependabot/pip/cryptography-3.4.7 branch June 23, 2021 16:26
MarvinSchenkel pushed a commit that referenced this pull request Apr 28, 2026
…nc improvements (#3606)

Syncs the Yandex Music provider in MA core with the out-of-tree provider
repo
[`trudenboy/ma-provider-yandex-music`](https://github.com/trudenboy/ma-provider-yandex-music)
through **v3.4.0**.

The last in-tree version was pre-v3. This PR folds in several release
lines worth of functional, infrastructure and UX work.

## Highlights

### v3.4.0 — rotor session API + Wave Modes + user presets
([#118](trudenboy/ma-provider-yandex-music#118))

**Rotor session API migration.** My Wave, tagged stations (genre:rock /
mood:calm / activity:workout / epoch:*) and track-seed similar-tracks
all moved from the legacy `/rotor/station/{id}/*` endpoint to Yandex's
newer `/rotor/session/{new,tracks,feedback}`. The server returns a
long-lived `radioSessionId` on `POST /rotor/session/new` (together with
`includeWaveModel=true` + `interactive=true` flags) that anchors all
subsequent feedback, so wave state now survives across browse /
recommendations / play entry points instead of losing a per-request
`batch_id` on every entry.

**Wave Modes browse folder (11 playable presets).** diversity (Discover
/ Favorites / Popular), moodEnergy (Calm / Active / Fun / Sad) and
language (Russian / Non-Russian / Without Words). Each is a separate
playable BrowseFolder that creates a rotor session with the matching
seed setting. Composite item_ids encode the preset, so rotor feedback
lands on the right session.

**User-defined wave presets** — advanced settings expose a small
builder: name + three dropdowns + Save / Delete action buttons. Presets
are persisted in a hidden JSON config key and surface as playable
folders under Radio → My Presets. Unlimited count, no hand-editing of
JSON.

**Rotor likes / prefetch.** `library_add` on a wave track also fires a
rotor `like` event on the active session (so _this_ session adapts, not
just the next one). `on_played` kicks off a background prefetch of the
next wave batch into `wave.prefetched` so MA's DSTM refill (if the user
enables it) gets Yandex-curated tracks without an extra round-trip. The
provider does **not** toggle DSTM — that stays a user decision.

**`is_dynamic` on autoplaylists.** Feed-generated playlists (Playlist of
the Day / DejaVu / Premiere / Missed Likes) now carry `is_dynamic=True`
so MA doesn't long-cache their content — Yandex regenerates them on a
schedule.

**Browse fixes that landed in the same release.**
- Collection child paths are nested (`<prov>://collection/tracks`) so
the back button returns to the listing instead of the provider root;
dispatcher still delegates `collection/<sub>` to core's default library
handler.
- Wave Modes / My Presets back-navigation — same dual-form path contract
(`item_id` underscore form so play-time reconstruction works, `path`
slash form so back-nav works).
- Listening History was empty because MarshalX stopped populating
`full_model` — switched to collecting `track_id`s from `item_id` and
batch-hydrating via `get_tracks`. 42 tracks returned where before 0.
- AI Wave Sets / Featured Waves rendered empty sub-folders because the
payload uses camelCase (`stationId`, `compactImageUrl`) while the code
asked for snake_case. Both forms now accepted.

### v3.3.1 — search fix

`fix(search): apply limit per bucket after classify_album`
([#116](trudenboy/ma-provider-yandex-music#116)).
Album/audiobook split now respects the requested `limit` per media-type
bucket, not per raw API page.

### v3.3.0 — audiobook progress sync & discovery
([#115](trudenboy/ma-provider-yandex-music#115))

- **Progress sync to Yandex.** `on_played` / `on_streamed` push chapter
position via a new `play_audio` API wrapper so the user's Yandex apps
stay in sync with MA's resume point. `parse_audiobook` propagates
`album.listening_finished` → `Audiobook.fully_played`.
- **Audiobook search.** `MediaType.AUDIOBOOK` maps to Yandex `album`
search; results split by `classify_album` into albums / audiobooks.
Dedup so `ALBUM + AUDIOBOOK` issues a single API call.
- **Collection browse.** *My Audiobooks* / *My Podcasts* sub-folders (RU
+ EN) routed through base `MusicProvider.browse` → existing
`get_library_audiobooks` / `get_library_podcasts` generators.
- **Robustness.** Advisory progress path swallows any
non-`CancelledError` failure from chapter-map resolution;
`_audiobook_progress_point` helper handles EOF (reports end of last
chapter, not start) and clamps `track_length_seconds ≥ 1` / offset into
`[0, track_length]`. Caches (`_audiobook_chapter_cache`,
`_audiobook_play_ids`) cleared on `on_streamed` and `unload`.

### v3.2.x — audiobook streaming

- `fix(audiobook): wire seek through can_seek and bound chapter
failures` (v3.2.1).
- `feat(audiobook): stream audiobooks via chapter concatenation`
(v3.2.0) — CUSTOM StreamType iterating per-chapter byte streams with
seek translation + failure tolerance.

### v3.1.x — library classifier + auth fixes

- Podcast + audiobook classifier (Phase 1): liked albums routed to music
/ podcast / audiobook via `meta_type` / `type`.
- Short-lived `_get_liked_albums_cached` dedupes the three library
syncs.
- `fix(auth)` series: clear stale refresh_token on QR re-auth, wrap
transient Passport errors, don't clear creds on transient failures.

### v3.0.x — yandex-music v3 migration

- `yandex-music[async]` v2 → v3.0.0, parsers updated for stricter
typing.
- Device Flow auth added alongside QR; auto-refresh via
`ya-passport-auth` v1.3.0.
- `/get-file-info` unified for all quality tiers with native byte-range
seek.
- Pinned items + Listening History browse folders.

## Dependencies

- `yandex-music==3.0.0`
- `ya-passport-auth==1.3.0`


## Documentation

Docs PR adding the v3.4 feature coverage to music-assistant.io (Wave
Modes / My Presets / Device Flow auth, podcast & audiobook support,
Known Issues note about Listening History):
[music-assistant/music-assistant.io#629](music-assistant/music-assistant.io#629).

## Review history on the upstream repo

PR
[#118](trudenboy/ma-provider-yandex-music#118)
went through three rounds of Copilot review that caught:
- rotor session request swallowing `NetworkError` before
`_call_with_retry` could see it (transient retry never fired);
- `_fetch_similar_tracks_for_seed` creating an unbounded `_wave_states`
entry per seed (cached, but stateful) — now stateless;
- `_prefetch_rotor_session` mutating shared state between lock phases —
now direct `rotor_session_tracks` without going through the session
helper;
- locking gaps in `_get_my_wave_recommendations`,
`get_rotor_station_tracks`, `_prefetch_rotor_session`;
- duplicated JSON preset parser in two files — extracted to
`provider/presets.py`.

All 14 review threads resolved before merge. Also addressed Marvin
Schenkel's review on
[#3234](#3234) about
providers not toggling queue UX settings on the user's behalf —
`_ensure_dont_stop_the_music` / `queue.radio_source` writes were
removed.

## Test plan

- [x] Provider unit tests green — 254 passed covering rotor session
plumbing, wave state machine, preset routing, prefetch, rotor feedback,
browse listings, audiobook progress, search routing, auth, parsers.
- [x] ruff / mypy clean.
- [x] Live validation against a real Yandex account in Docker — session
API round-trips verified for user:onyourwave / track:{id} / genre:rock /
mood:calm / activity:workout / epoch:eighties; feedback + pagination;
browse back-nav; history hydration.
- [ ] Core-side: provider loads; library sync still works; My Wave
plays; Wave Modes / My Presets render and play; audiobook position
round-trips with Yandex mobile app; search returns audiobooks under
`MediaType.AUDIOBOOK`.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
fionn-r pushed a commit to fionn-r/music-assistant-server that referenced this pull request May 4, 2026
…nc improvements (music-assistant#3606)

Syncs the Yandex Music provider in MA core with the out-of-tree provider
repo
[`trudenboy/ma-provider-yandex-music`](https://github.com/trudenboy/ma-provider-yandex-music)
through **v3.4.0**.

The last in-tree version was pre-v3. This PR folds in several release
lines worth of functional, infrastructure and UX work.

## Highlights

### v3.4.0 — rotor session API + Wave Modes + user presets
([music-assistant#118](trudenboy/ma-provider-yandex-music#118))

**Rotor session API migration.** My Wave, tagged stations (genre:rock /
mood:calm / activity:workout / epoch:*) and track-seed similar-tracks
all moved from the legacy `/rotor/station/{id}/*` endpoint to Yandex's
newer `/rotor/session/{new,tracks,feedback}`. The server returns a
long-lived `radioSessionId` on `POST /rotor/session/new` (together with
`includeWaveModel=true` + `interactive=true` flags) that anchors all
subsequent feedback, so wave state now survives across browse /
recommendations / play entry points instead of losing a per-request
`batch_id` on every entry.

**Wave Modes browse folder (11 playable presets).** diversity (Discover
/ Favorites / Popular), moodEnergy (Calm / Active / Fun / Sad) and
language (Russian / Non-Russian / Without Words). Each is a separate
playable BrowseFolder that creates a rotor session with the matching
seed setting. Composite item_ids encode the preset, so rotor feedback
lands on the right session.

**User-defined wave presets** — advanced settings expose a small
builder: name + three dropdowns + Save / Delete action buttons. Presets
are persisted in a hidden JSON config key and surface as playable
folders under Radio → My Presets. Unlimited count, no hand-editing of
JSON.

**Rotor likes / prefetch.** `library_add` on a wave track also fires a
rotor `like` event on the active session (so _this_ session adapts, not
just the next one). `on_played` kicks off a background prefetch of the
next wave batch into `wave.prefetched` so MA's DSTM refill (if the user
enables it) gets Yandex-curated tracks without an extra round-trip. The
provider does **not** toggle DSTM — that stays a user decision.

**`is_dynamic` on autoplaylists.** Feed-generated playlists (Playlist of
the Day / DejaVu / Premiere / Missed Likes) now carry `is_dynamic=True`
so MA doesn't long-cache their content — Yandex regenerates them on a
schedule.

**Browse fixes that landed in the same release.**
- Collection child paths are nested (`<prov>://collection/tracks`) so
the back button returns to the listing instead of the provider root;
dispatcher still delegates `collection/<sub>` to core's default library
handler.
- Wave Modes / My Presets back-navigation — same dual-form path contract
(`item_id` underscore form so play-time reconstruction works, `path`
slash form so back-nav works).
- Listening History was empty because MarshalX stopped populating
`full_model` — switched to collecting `track_id`s from `item_id` and
batch-hydrating via `get_tracks`. 42 tracks returned where before 0.
- AI Wave Sets / Featured Waves rendered empty sub-folders because the
payload uses camelCase (`stationId`, `compactImageUrl`) while the code
asked for snake_case. Both forms now accepted.

### v3.3.1 — search fix

`fix(search): apply limit per bucket after classify_album`
([music-assistant#116](trudenboy/ma-provider-yandex-music#116)).
Album/audiobook split now respects the requested `limit` per media-type
bucket, not per raw API page.

### v3.3.0 — audiobook progress sync & discovery
([music-assistant#115](trudenboy/ma-provider-yandex-music#115))

- **Progress sync to Yandex.** `on_played` / `on_streamed` push chapter
position via a new `play_audio` API wrapper so the user's Yandex apps
stay in sync with MA's resume point. `parse_audiobook` propagates
`album.listening_finished` → `Audiobook.fully_played`.
- **Audiobook search.** `MediaType.AUDIOBOOK` maps to Yandex `album`
search; results split by `classify_album` into albums / audiobooks.
Dedup so `ALBUM + AUDIOBOOK` issues a single API call.
- **Collection browse.** *My Audiobooks* / *My Podcasts* sub-folders (RU
+ EN) routed through base `MusicProvider.browse` → existing
`get_library_audiobooks` / `get_library_podcasts` generators.
- **Robustness.** Advisory progress path swallows any
non-`CancelledError` failure from chapter-map resolution;
`_audiobook_progress_point` helper handles EOF (reports end of last
chapter, not start) and clamps `track_length_seconds ≥ 1` / offset into
`[0, track_length]`. Caches (`_audiobook_chapter_cache`,
`_audiobook_play_ids`) cleared on `on_streamed` and `unload`.

### v3.2.x — audiobook streaming

- `fix(audiobook): wire seek through can_seek and bound chapter
failures` (v3.2.1).
- `feat(audiobook): stream audiobooks via chapter concatenation`
(v3.2.0) — CUSTOM StreamType iterating per-chapter byte streams with
seek translation + failure tolerance.

### v3.1.x — library classifier + auth fixes

- Podcast + audiobook classifier (Phase 1): liked albums routed to music
/ podcast / audiobook via `meta_type` / `type`.
- Short-lived `_get_liked_albums_cached` dedupes the three library
syncs.
- `fix(auth)` series: clear stale refresh_token on QR re-auth, wrap
transient Passport errors, don't clear creds on transient failures.

### v3.0.x — yandex-music v3 migration

- `yandex-music[async]` v2 → v3.0.0, parsers updated for stricter
typing.
- Device Flow auth added alongside QR; auto-refresh via
`ya-passport-auth` v1.3.0.
- `/get-file-info` unified for all quality tiers with native byte-range
seek.
- Pinned items + Listening History browse folders.

## Dependencies

- `yandex-music==3.0.0`
- `ya-passport-auth==1.3.0`


## Documentation

Docs PR adding the v3.4 feature coverage to music-assistant.io (Wave
Modes / My Presets / Device Flow auth, podcast & audiobook support,
Known Issues note about Listening History):
[music-assistant/music-assistant.io#629](music-assistant/music-assistant.io#629).

## Review history on the upstream repo

PR
[music-assistant#118](trudenboy/ma-provider-yandex-music#118)
went through three rounds of Copilot review that caught:
- rotor session request swallowing `NetworkError` before
`_call_with_retry` could see it (transient retry never fired);
- `_fetch_similar_tracks_for_seed` creating an unbounded `_wave_states`
entry per seed (cached, but stateful) — now stateless;
- `_prefetch_rotor_session` mutating shared state between lock phases —
now direct `rotor_session_tracks` without going through the session
helper;
- locking gaps in `_get_my_wave_recommendations`,
`get_rotor_station_tracks`, `_prefetch_rotor_session`;
- duplicated JSON preset parser in two files — extracted to
`provider/presets.py`.

All 14 review threads resolved before merge. Also addressed Marvin
Schenkel's review on
[music-assistant#3234](music-assistant#3234) about
providers not toggling queue UX settings on the user's behalf —
`_ensure_dont_stop_the_music` / `queue.radio_source` writes were
removed.

## Test plan

- [x] Provider unit tests green — 254 passed covering rotor session
plumbing, wave state machine, preset routing, prefetch, rotor feedback,
browse listings, audiobook progress, search routing, auth, parsers.
- [x] ruff / mypy clean.
- [x] Live validation against a real Yandex account in Docker — session
API round-trips verified for user:onyourwave / track:{id} / genre:rock /
mood:calm / activity:workout / epoch:eighties; feedback + pagination;
browse back-nav; history hydration.
- [ ] Core-side: provider loads; library sync still works; My Wave
plays; Wave Modes / My Presets render and play; audiobook position
round-trips with Yandex mobile app; search returns audiobooks under
`MediaType.AUDIOBOOK`.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant