ymdantic 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ymdantic-0.2.2 → ymdantic-0.2.4}/.pre-commit-config.yaml +1 -1
- {ymdantic-0.2.2 → ymdantic-0.2.4}/PKG-INFO +2 -3
- {ymdantic-0.2.2 → ymdantic-0.2.4}/pyproject.toml +1 -2
- ymdantic-0.2.4/tests/albums/test_get_album_with_tracks.py +64 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/uv.lock +23 -34
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/album.py +1 -1
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/file_info.py +2 -2
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/track.py +2 -0
- ymdantic-0.2.4/ymdantic/py.typed +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/.editorconfig +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/.github/workflows/pypi-release.yml +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/.github/workflows/tests.yml +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/.gitignore +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/LICENSE +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/README.md +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/examples/chart.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/account/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/account/test_settings.py +0 -0
- {ymdantic-0.2.2/tests/search → ymdantic-0.2.4/tests/albums}/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/conftest.py +0 -0
- {ymdantic-0.2.2/tests/tracks → ymdantic-0.2.4/tests/search}/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/search/test_search_instant_mixed.py +0 -0
- {ymdantic-0.2.2/ymdantic/models/clips → ymdantic-0.2.4/tests/tracks}/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/tracks/test_get_track.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/tracks/test_get_track_download_info.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/tracks/test_get_track_file_info.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/tests/tracks/test_get_tracks.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/adapters/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/adapters/pydantic_factory.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/adapters/to_camel.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/adapters/to_query_params.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/client/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/client/session/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/client/session/aiohttp_client.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/client/session/aiohttp_method.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/client/yandex_music.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/editorial_artists.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/editorial_compilation.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/editorial_new_releases.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/editorial_promotion.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/language.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/open_playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/enums/special.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/exceptions/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/exceptions/custom_exceptions.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/mixins.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/account/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/account/settings.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/action_button.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/agent.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/albums/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/albums/album.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/albums/label.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/artist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/artist_data.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/artist_track_chart_position.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/band_link_scanner_link.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/concert.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/counts.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/description.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/extra_action.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/ratings.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/social_link.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/artists/video.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/base.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/chart_position.py +0 -0
- {ymdantic-0.2.2/ymdantic/models/concerts → ymdantic-0.2.4/ymdantic/models/clips}/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/clips/clip.py +0 -0
- /ymdantic-0.2.2/ymdantic/py.typed → /ymdantic-0.2.4/ymdantic/models/concerts/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/concerts/city_case_forms.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/concerts/concert.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/content_restrictions.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/cover.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/custom_wave.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/derived_colors.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/error.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/album.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/artist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/chart.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/chart_block.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/cover.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/editorial/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/editorial/new_releases.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/editorial/response.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/in_style.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/liked_playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/open_playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/personal_playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/promotion.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/skeleton_response.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/tab_block.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/tab_data.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/tab_source.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/tabs_block.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/skeleton/tabs_source.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/special.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/view_all_action.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing/waves.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing3/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing3/block.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing3/chart.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/landing3/menu.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/pager.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/cover.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/owner.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/playlist.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/tag.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/playlists/track.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/response.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/s3.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/search/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/search/base.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/search/results.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/theme.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/__init__.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/download_info.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/fade.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/lyrics_info.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/major.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/podcast.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/position.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/tracks/r128.py +0 -0
- {ymdantic-0.2.2 → ymdantic-0.2.4}/ymdantic/models/trailer.py +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: ymdantic
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Фреймворк предоставляющий доступ к API Яндекс Музыки (с Pydantic валидацией)
|
|
5
5
|
Author-email: KatantDev <vlad26@mail.ru>
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Requires-Python: <3.15,>=3.12
|
|
8
8
|
Requires-Dist: aiohttp<4,>=3.9.0
|
|
9
|
-
Requires-Dist: certifi<2026,>=2025
|
|
10
9
|
Requires-Dist: dataclass-rest>=0.5.0
|
|
11
10
|
Requires-Dist: pydantic<3,>=2.4
|
|
12
11
|
Requires-Dist: strenum<0.5,>=0.4.15
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ymdantic"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.4"
|
|
4
4
|
description = "Фреймворк предоставляющий доступ к API Яндекс Музыки (с Pydantic валидацией)"
|
|
5
5
|
authors = [{ name = "KatantDev", email = "vlad26@mail.ru" }]
|
|
6
6
|
requires-python = ">=3.12,<3.15"
|
|
@@ -8,7 +8,6 @@ readme = "README.md"
|
|
|
8
8
|
dependencies = [
|
|
9
9
|
"aiohttp>=3.9.0,<4",
|
|
10
10
|
"pydantic>=2.4,<3",
|
|
11
|
-
"certifi>=2025,<2026",
|
|
12
11
|
"strenum>=0.4.15,<0.5",
|
|
13
12
|
"dataclass-rest>=0.5.0",
|
|
14
13
|
]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import secrets
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
from ymdantic import YMClient
|
|
6
|
+
from ymdantic.exceptions import YMError
|
|
7
|
+
from ymdantic.models import Album
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.mark.anyio
|
|
11
|
+
async def test_get_available_album_with_tracks(client: YMClient) -> None:
|
|
12
|
+
album_id = 1814060
|
|
13
|
+
|
|
14
|
+
result = await client.get_album_with_tracks(album_id=album_id)
|
|
15
|
+
|
|
16
|
+
assert result is not None
|
|
17
|
+
assert isinstance(result, Album)
|
|
18
|
+
assert result.meta_type == "music"
|
|
19
|
+
assert result.id == album_id
|
|
20
|
+
assert result.title is not None
|
|
21
|
+
assert result.artists is not None
|
|
22
|
+
assert len(result.artists) > 0
|
|
23
|
+
assert result.track_count > 0
|
|
24
|
+
assert result.volumes is not None
|
|
25
|
+
assert len(result.volumes) > 0
|
|
26
|
+
assert len(result.volumes[0]) > 0
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.mark.anyio
|
|
30
|
+
async def test_get_not_found_album_with_tracks(client: YMClient) -> None:
|
|
31
|
+
with pytest.raises(YMError):
|
|
32
|
+
await client.get_album_with_tracks(album_id=181406011111)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def test_get_available_album_with_podcast(client: YMClient) -> None:
|
|
36
|
+
album_id = 10141723
|
|
37
|
+
|
|
38
|
+
result = await client.get_album_with_tracks(album_id=album_id)
|
|
39
|
+
|
|
40
|
+
assert result is not None
|
|
41
|
+
assert isinstance(result, Album)
|
|
42
|
+
assert result.meta_type == "podcast"
|
|
43
|
+
assert result.id == album_id
|
|
44
|
+
assert result.title is not None
|
|
45
|
+
assert result.artists is not None
|
|
46
|
+
assert result.track_count > 0
|
|
47
|
+
assert result.volumes is not None
|
|
48
|
+
assert len(result.volumes) > 0
|
|
49
|
+
assert len(result.volumes[0]) > 0
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@pytest.mark.anyio
|
|
53
|
+
async def test_get_random_album(client: YMClient) -> None:
|
|
54
|
+
album_ids = [secrets.randbelow(140_000_000) for _ in range(50)]
|
|
55
|
+
results = await asyncio.gather(
|
|
56
|
+
*[client.get_album_with_tracks(album_id=album_id) for album_id in album_ids],
|
|
57
|
+
return_exceptions=True,
|
|
58
|
+
)
|
|
59
|
+
error_results = [
|
|
60
|
+
result
|
|
61
|
+
for result in results
|
|
62
|
+
if isinstance(result, BaseException) and not isinstance(result, YMError)
|
|
63
|
+
]
|
|
64
|
+
assert len(error_results) == 0
|
|
@@ -4,11 +4,11 @@ requires-python = ">=3.12, <3.15"
|
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "adaptix"
|
|
7
|
-
version = "3.0.
|
|
7
|
+
version = "3.0.0b12"
|
|
8
8
|
source = { registry = "https://pypi.org/simple" }
|
|
9
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
9
|
+
sdist = { url = "https://files.pythonhosted.org/packages/5d/82/aa17eb2968cf7c78caf4915ca62397214f196dc1bef07e4d81bfb4c4abc5/adaptix-3.0.0b12.tar.gz", hash = "sha256:906053a39ff509f0aa4ca9faa07dffa205bd90fa41d9774cd849d3454565b0ea", size = 128634, upload-time = "2026-04-04T17:31:01.084Z" }
|
|
10
10
|
wheels = [
|
|
11
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
11
|
+
{ url = "https://files.pythonhosted.org/packages/11/66/abcca849b17e4a3adf5116e58c51471f37264a190cee2c67f1ba57782a7f/adaptix-3.0.0b12-py3-none-any.whl", hash = "sha256:8156f0549b96fcd193d13efca7bfbda39b3d6389085556d930e204c09f9ae6ed", size = 188651, upload-time = "2026-04-04T17:30:59.17Z" },
|
|
12
12
|
]
|
|
13
13
|
|
|
14
14
|
[[package]]
|
|
@@ -149,15 +149,6 @@ wheels = [
|
|
|
149
149
|
{ url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
|
|
150
150
|
]
|
|
151
151
|
|
|
152
|
-
[[package]]
|
|
153
|
-
name = "certifi"
|
|
154
|
-
version = "2025.11.12"
|
|
155
|
-
source = { registry = "https://pypi.org/simple" }
|
|
156
|
-
sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" }
|
|
157
|
-
wheels = [
|
|
158
|
-
{ url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" },
|
|
159
|
-
]
|
|
160
|
-
|
|
161
152
|
[[package]]
|
|
162
153
|
name = "cfgv"
|
|
163
154
|
version = "3.5.0"
|
|
@@ -948,27 +939,27 @@ wheels = [
|
|
|
948
939
|
|
|
949
940
|
[[package]]
|
|
950
941
|
name = "ruff"
|
|
951
|
-
version = "0.15.
|
|
942
|
+
version = "0.15.9"
|
|
952
943
|
source = { registry = "https://pypi.org/simple" }
|
|
953
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
944
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e6/97/e9f1ca355108ef7194e38c812ef40ba98c7208f47b13ad78d023caa583da/ruff-0.15.9.tar.gz", hash = "sha256:29cbb1255a9797903f6dde5ba0188c707907ff44a9006eb273b5a17bfa0739a2", size = 4617361, upload-time = "2026-04-02T18:17:20.829Z" }
|
|
954
945
|
wheels = [
|
|
955
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
956
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
957
|
-
{ url = "https://files.pythonhosted.org/packages/ca/
|
|
958
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
959
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
960
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
961
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
962
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
963
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
964
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
965
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
966
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
967
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
968
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
969
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
970
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
971
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
946
|
+
{ url = "https://files.pythonhosted.org/packages/0b/1f/9cdfd0ac4b9d1e5a6cf09bedabdf0b56306ab5e333c85c87281273e7b041/ruff-0.15.9-py3-none-linux_armv6l.whl", hash = "sha256:6efbe303983441c51975c243e26dff328aca11f94b70992f35b093c2e71801e1", size = 10511206, upload-time = "2026-04-02T18:16:41.574Z" },
|
|
947
|
+
{ url = "https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4965bac6ac9ea86772f4e23587746f0b7a395eccabb823eb8bfacc3fa06069f7", size = 10923307, upload-time = "2026-04-02T18:17:08.645Z" },
|
|
948
|
+
{ url = "https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf05aad70ca5b5a0a4b0e080df3a6b699803916d88f006efd1f5b46302daab8", size = 10316722, upload-time = "2026-04-02T18:16:44.206Z" },
|
|
949
|
+
{ url = "https://files.pythonhosted.org/packages/48/11/690d75f3fd6278fe55fff7c9eb429c92d207e14b25d1cae4064a32677029/ruff-0.15.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9439a342adb8725f32f92732e2bafb6d5246bd7a5021101166b223d312e8fc59", size = 10623674, upload-time = "2026-04-02T18:16:50.951Z" },
|
|
950
|
+
{ url = "https://files.pythonhosted.org/packages/bd/ec/176f6987be248fc5404199255522f57af1b4a5a1b57727e942479fec98ad/ruff-0.15.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5e6faf9d97c8edc43877c3f406f47446fc48c40e1442d58cfcdaba2acea745", size = 10351516, upload-time = "2026-04-02T18:16:57.206Z" },
|
|
951
|
+
{ url = "https://files.pythonhosted.org/packages/b2/fc/51cffbd2b3f240accc380171d51446a32aa2ea43a40d4a45ada67368fbd2/ruff-0.15.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b34a9766aeec27a222373d0b055722900fbc0582b24f39661aa96f3fe6ad901", size = 11150202, upload-time = "2026-04-02T18:17:06.452Z" },
|
|
952
|
+
{ url = "https://files.pythonhosted.org/packages/d6/d4/25292a6dfc125f6b6528fe6af31f5e996e19bf73ca8e3ce6eb7fa5b95885/ruff-0.15.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89dd695bc72ae76ff484ae54b7e8b0f6b50f49046e198355e44ea656e521fef9", size = 11988891, upload-time = "2026-04-02T18:17:18.575Z" },
|
|
953
|
+
{ url = "https://files.pythonhosted.org/packages/13/e1/1eebcb885c10e19f969dcb93d8413dfee8172578709d7ee933640f5e7147/ruff-0.15.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce187224ef1de1bd225bc9a152ac7102a6171107f026e81f317e4257052916d5", size = 11480576, upload-time = "2026-04-02T18:16:52.986Z" },
|
|
954
|
+
{ url = "https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0c7c341f68adb01c488c3b7d4b49aa8ea97409eae6462d860a79cf55f431b6", size = 11254525, upload-time = "2026-04-02T18:17:02.041Z" },
|
|
955
|
+
{ url = "https://files.pythonhosted.org/packages/42/aa/4bb3af8e61acd9b1281db2ab77e8b2c3c5e5599bf2a29d4a942f1c62b8d6/ruff-0.15.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:55cc15eee27dc0eebdfcb0d185a6153420efbedc15eb1d38fe5e685657b0f840", size = 11204072, upload-time = "2026-04-02T18:17:13.581Z" },
|
|
956
|
+
{ url = "https://files.pythonhosted.org/packages/69/48/d550dc2aa6e423ea0bcc1d0ff0699325ffe8a811e2dba156bd80750b86dc/ruff-0.15.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6537f6eed5cda688c81073d46ffdfb962a5f29ecb6f7e770b2dc920598997ed", size = 10594998, upload-time = "2026-04-02T18:16:46.369Z" },
|
|
957
|
+
{ url = "https://files.pythonhosted.org/packages/63/47/321167e17f5344ed5ec6b0aa2cff64efef5f9e985af8f5622cfa6536043f/ruff-0.15.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6d3fcbca7388b066139c523bda744c822258ebdcfbba7d24410c3f454cc9af71", size = 10359769, upload-time = "2026-04-02T18:17:10.994Z" },
|
|
958
|
+
{ url = "https://files.pythonhosted.org/packages/67/5e/074f00b9785d1d2c6f8c22a21e023d0c2c1817838cfca4c8243200a1fa87/ruff-0.15.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:058d8e99e1bfe79d8a0def0b481c56059ee6716214f7e425d8e737e412d69677", size = 10850236, upload-time = "2026-04-02T18:16:48.749Z" },
|
|
959
|
+
{ url = "https://files.pythonhosted.org/packages/76/37/804c4135a2a2caf042925d30d5f68181bdbd4461fd0d7739da28305df593/ruff-0.15.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8e1ddb11dbd61d5983fa2d7d6370ef3eb210951e443cace19594c01c72abab4c", size = 11358343, upload-time = "2026-04-02T18:16:55.068Z" },
|
|
960
|
+
{ url = "https://files.pythonhosted.org/packages/88/3d/1364fcde8656962782aa9ea93c92d98682b1ecec2f184e625a965ad3b4a6/ruff-0.15.9-py3-none-win32.whl", hash = "sha256:bde6ff36eaf72b700f32b7196088970bf8fdb2b917b7accd8c371bfc0fd573ec", size = 10583382, upload-time = "2026-04-02T18:17:04.261Z" },
|
|
961
|
+
{ url = "https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl", hash = "sha256:45a70921b80e1c10cf0b734ef09421f71b5aa11d27404edc89d7e8a69505e43d", size = 11744969, upload-time = "2026-04-02T18:16:59.611Z" },
|
|
962
|
+
{ url = "https://files.pythonhosted.org/packages/03/36/76704c4f312257d6dbaae3c959add2a622f63fcca9d864659ce6d8d97d3d/ruff-0.15.9-py3-none-win_arm64.whl", hash = "sha256:0694e601c028fd97dc5c6ee244675bc241aeefced7ef80cd9c6935a871078f53", size = 11005870, upload-time = "2026-04-02T18:17:15.773Z" },
|
|
972
963
|
]
|
|
973
964
|
|
|
974
965
|
[[package]]
|
|
@@ -1122,11 +1113,10 @@ wheels = [
|
|
|
1122
1113
|
|
|
1123
1114
|
[[package]]
|
|
1124
1115
|
name = "ymdantic"
|
|
1125
|
-
version = "0.2.
|
|
1116
|
+
version = "0.2.4"
|
|
1126
1117
|
source = { editable = "." }
|
|
1127
1118
|
dependencies = [
|
|
1128
1119
|
{ name = "aiohttp" },
|
|
1129
|
-
{ name = "certifi" },
|
|
1130
1120
|
{ name = "dataclass-rest" },
|
|
1131
1121
|
{ name = "pydantic" },
|
|
1132
1122
|
{ name = "strenum" },
|
|
@@ -1145,7 +1135,6 @@ dev = [
|
|
|
1145
1135
|
[package.metadata]
|
|
1146
1136
|
requires-dist = [
|
|
1147
1137
|
{ name = "aiohttp", specifier = ">=3.9.0,<4" },
|
|
1148
|
-
{ name = "certifi", specifier = ">=2025,<2026" },
|
|
1149
1138
|
{ name = "dataclass-rest", specifier = ">=0.5.0" },
|
|
1150
1139
|
{ name = "pydantic", specifier = ">=2.4,<3" },
|
|
1151
1140
|
{ name = "strenum", specifier = ">=0.4.15,<0.5" },
|
|
@@ -61,8 +61,8 @@ class FileInfo(YMBaseModel):
|
|
|
61
61
|
# Транспорт файла.
|
|
62
62
|
key: str | None = None
|
|
63
63
|
# Ключ файла. При использовании шифрования.
|
|
64
|
-
size: int
|
|
65
|
-
# Размер файла.
|
|
64
|
+
size: int | None = None
|
|
65
|
+
# Размер файла. Яндекс перестал его присылать.
|
|
66
66
|
gain: bool
|
|
67
67
|
# Флаг для нормализации громкости трека (видимо).
|
|
68
68
|
urls: list[HttpUrl]
|
|
@@ -81,6 +81,8 @@ class BaseTrack(YMBaseModel, DeprecatedMixin):
|
|
|
81
81
|
best: bool | None = None
|
|
82
82
|
# Является ли трек лучшим (поле доступно при получении альбома с треками
|
|
83
83
|
# `get_album_with_tracks`).
|
|
84
|
+
listening_finished: bool | None = None
|
|
85
|
+
# Флаг, указывающий, завершено ли прослушивание альбома.
|
|
84
86
|
|
|
85
87
|
@property
|
|
86
88
|
def artists_names(self) -> str | None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ymdantic-0.2.2/ymdantic/models/concerts → ymdantic-0.2.4/ymdantic/models/clips}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|