Spaces:
Running
Running
Fix docker installation & set ssl verification disable by default & support python 3.10+
Browse files- Dockerfile +1 -1
- mediaflow_proxy/routes.py +10 -10
- poetry.lock +149 -115
- pyproject.toml +4 -4
Dockerfile
CHANGED
@@ -26,7 +26,7 @@ COPY --chown=mediaflow_proxy:mediaflow_proxy pyproject.toml poetry.lock* /mediaf
|
|
26 |
|
27 |
# Project initialization:
|
28 |
RUN poetry config virtualenvs.in-project true \
|
29 |
-
&& poetry install --no-interaction --no-ansi --no-
|
30 |
|
31 |
# Copy project files
|
32 |
COPY --chown=mediaflow_proxy:mediaflow_proxy . /mediaflow_proxy
|
|
|
26 |
|
27 |
# Project initialization:
|
28 |
RUN poetry config virtualenvs.in-project true \
|
29 |
+
&& poetry install --no-interaction --no-ansi --no-root --only main
|
30 |
|
31 |
# Copy project files
|
32 |
COPY --chown=mediaflow_proxy:mediaflow_proxy . /mediaflow_proxy
|
mediaflow_proxy/routes.py
CHANGED
@@ -14,7 +14,7 @@ async def hls_stream_proxy(
|
|
14 |
d: HttpUrl,
|
15 |
headers: dict = Depends(get_proxy_headers),
|
16 |
key_url: HttpUrl | None = None,
|
17 |
-
verify_ssl: bool =
|
18 |
):
|
19 |
"""
|
20 |
Proxify HLS stream requests, fetching and processing the m3u8 playlist or streaming the content.
|
@@ -24,7 +24,7 @@ async def hls_stream_proxy(
|
|
24 |
d (HttpUrl): The destination URL to fetch the content from.
|
25 |
key_url (HttpUrl, optional): The HLS Key URL to replace the original key URL. Defaults to None. (Useful for bypassing some sneaky protection)
|
26 |
headers (dict): The headers to include in the request.
|
27 |
-
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to
|
28 |
|
29 |
Returns:
|
30 |
Response: The HTTP response with the processed m3u8 playlist or streamed content.
|
@@ -36,7 +36,7 @@ async def hls_stream_proxy(
|
|
36 |
@proxy_router.head("/stream")
|
37 |
@proxy_router.get("/stream")
|
38 |
async def proxy_stream_endpoint(
|
39 |
-
request: Request, d: HttpUrl, headers: dict = Depends(get_proxy_headers), verify_ssl: bool =
|
40 |
):
|
41 |
"""
|
42 |
Proxies stream requests to the given video URL.
|
@@ -45,7 +45,7 @@ async def proxy_stream_endpoint(
|
|
45 |
request (Request): The incoming HTTP request.
|
46 |
d (HttpUrl): The URL of the video to stream.
|
47 |
headers (dict): The headers to include in the request.
|
48 |
-
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to
|
49 |
|
50 |
Returns:
|
51 |
Response: The HTTP response with the streamed content.
|
@@ -61,7 +61,7 @@ async def manifest_endpoint(
|
|
61 |
headers: dict = Depends(get_proxy_headers),
|
62 |
key_id: str = None,
|
63 |
key: str = None,
|
64 |
-
verify_ssl: bool =
|
65 |
):
|
66 |
"""
|
67 |
Retrieves and processes the MPD manifest, converting it to an HLS manifest.
|
@@ -72,7 +72,7 @@ async def manifest_endpoint(
|
|
72 |
headers (dict): The headers to include in the request.
|
73 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
74 |
key (str, optional): The DRM key. Defaults to None.
|
75 |
-
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to
|
76 |
|
77 |
Returns:
|
78 |
Response: The HTTP response with the HLS manifest.
|
@@ -88,7 +88,7 @@ async def playlist_endpoint(
|
|
88 |
headers: dict = Depends(get_proxy_headers),
|
89 |
key_id: str = None,
|
90 |
key: str = None,
|
91 |
-
verify_ssl: bool =
|
92 |
):
|
93 |
"""
|
94 |
Retrieves and processes the MPD manifest, converting it to an HLS playlist for a specific profile.
|
@@ -100,7 +100,7 @@ async def playlist_endpoint(
|
|
100 |
headers (dict): The headers to include in the request.
|
101 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
102 |
key (str, optional): The DRM key. Defaults to None.
|
103 |
-
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to
|
104 |
|
105 |
Returns:
|
106 |
Response: The HTTP response with the HLS playlist.
|
@@ -116,7 +116,7 @@ async def segment_endpoint(
|
|
116 |
headers: dict = Depends(get_proxy_headers),
|
117 |
key_id: str = None,
|
118 |
key: str = None,
|
119 |
-
verify_ssl: bool =
|
120 |
):
|
121 |
"""
|
122 |
Retrieves and processes a media segment, decrypting it if necessary.
|
@@ -128,7 +128,7 @@ async def segment_endpoint(
|
|
128 |
headers (dict): The headers to include in the request.
|
129 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
130 |
key (str, optional): The DRM key. Defaults to None.
|
131 |
-
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to
|
132 |
|
133 |
Returns:
|
134 |
Response: The HTTP response with the processed segment.
|
|
|
14 |
d: HttpUrl,
|
15 |
headers: dict = Depends(get_proxy_headers),
|
16 |
key_url: HttpUrl | None = None,
|
17 |
+
verify_ssl: bool = False,
|
18 |
):
|
19 |
"""
|
20 |
Proxify HLS stream requests, fetching and processing the m3u8 playlist or streaming the content.
|
|
|
24 |
d (HttpUrl): The destination URL to fetch the content from.
|
25 |
key_url (HttpUrl, optional): The HLS Key URL to replace the original key URL. Defaults to None. (Useful for bypassing some sneaky protection)
|
26 |
headers (dict): The headers to include in the request.
|
27 |
+
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to False.
|
28 |
|
29 |
Returns:
|
30 |
Response: The HTTP response with the processed m3u8 playlist or streamed content.
|
|
|
36 |
@proxy_router.head("/stream")
|
37 |
@proxy_router.get("/stream")
|
38 |
async def proxy_stream_endpoint(
|
39 |
+
request: Request, d: HttpUrl, headers: dict = Depends(get_proxy_headers), verify_ssl: bool = False
|
40 |
):
|
41 |
"""
|
42 |
Proxies stream requests to the given video URL.
|
|
|
45 |
request (Request): The incoming HTTP request.
|
46 |
d (HttpUrl): The URL of the video to stream.
|
47 |
headers (dict): The headers to include in the request.
|
48 |
+
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to False.
|
49 |
|
50 |
Returns:
|
51 |
Response: The HTTP response with the streamed content.
|
|
|
61 |
headers: dict = Depends(get_proxy_headers),
|
62 |
key_id: str = None,
|
63 |
key: str = None,
|
64 |
+
verify_ssl: bool = False,
|
65 |
):
|
66 |
"""
|
67 |
Retrieves and processes the MPD manifest, converting it to an HLS manifest.
|
|
|
72 |
headers (dict): The headers to include in the request.
|
73 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
74 |
key (str, optional): The DRM key. Defaults to None.
|
75 |
+
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to False.
|
76 |
|
77 |
Returns:
|
78 |
Response: The HTTP response with the HLS manifest.
|
|
|
88 |
headers: dict = Depends(get_proxy_headers),
|
89 |
key_id: str = None,
|
90 |
key: str = None,
|
91 |
+
verify_ssl: bool = False,
|
92 |
):
|
93 |
"""
|
94 |
Retrieves and processes the MPD manifest, converting it to an HLS playlist for a specific profile.
|
|
|
100 |
headers (dict): The headers to include in the request.
|
101 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
102 |
key (str, optional): The DRM key. Defaults to None.
|
103 |
+
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to False.
|
104 |
|
105 |
Returns:
|
106 |
Response: The HTTP response with the HLS playlist.
|
|
|
116 |
headers: dict = Depends(get_proxy_headers),
|
117 |
key_id: str = None,
|
118 |
key: str = None,
|
119 |
+
verify_ssl: bool = False,
|
120 |
):
|
121 |
"""
|
122 |
Retrieves and processes a media segment, decrypting it if necessary.
|
|
|
128 |
headers (dict): The headers to include in the request.
|
129 |
key_id (str, optional): The DRM key ID. Defaults to None.
|
130 |
key (str, optional): The DRM key. Defaults to None.
|
131 |
+
verify_ssl (bool, optional): Whether to verify the SSL certificate of the destination. Defaults to False.
|
132 |
|
133 |
Returns:
|
134 |
Response: The HTTP response with the processed segment.
|
poetry.lock
CHANGED
@@ -23,8 +23,10 @@ files = [
|
|
23 |
]
|
24 |
|
25 |
[package.dependencies]
|
|
|
26 |
idna = ">=2.8"
|
27 |
sniffio = ">=1.1"
|
|
|
28 |
|
29 |
[package.extras]
|
30 |
doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
|
@@ -68,6 +70,8 @@ mypy-extensions = ">=0.4.3"
|
|
68 |
packaging = ">=22.0"
|
69 |
pathspec = ">=0.9.0"
|
70 |
platformdirs = ">=2"
|
|
|
|
|
71 |
|
72 |
[package.extras]
|
73 |
colorama = ["colorama (>=0.4.3)"]
|
@@ -122,15 +126,29 @@ files = [
|
|
122 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
123 |
]
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
[[package]]
|
126 |
name = "fastapi"
|
127 |
-
version = "0.
|
128 |
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
129 |
optional = false
|
130 |
python-versions = ">=3.8"
|
131 |
files = [
|
132 |
-
{file = "fastapi-0.
|
133 |
-
{file = "fastapi-0.
|
134 |
]
|
135 |
|
136 |
[package.dependencies]
|
@@ -223,15 +241,18 @@ zstd = ["zstandard (>=0.18.0)"]
|
|
223 |
|
224 |
[[package]]
|
225 |
name = "idna"
|
226 |
-
version = "3.
|
227 |
description = "Internationalized Domain Names in Applications (IDNA)"
|
228 |
optional = false
|
229 |
python-versions = ">=3.6"
|
230 |
files = [
|
231 |
-
{file = "idna-3.
|
232 |
-
{file = "idna-3.
|
233 |
]
|
234 |
|
|
|
|
|
|
|
235 |
[[package]]
|
236 |
name = "mypy-extensions"
|
237 |
version = "1.0.0"
|
@@ -267,19 +288,19 @@ files = [
|
|
267 |
|
268 |
[[package]]
|
269 |
name = "platformdirs"
|
270 |
-
version = "4.
|
271 |
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
|
272 |
optional = false
|
273 |
python-versions = ">=3.8"
|
274 |
files = [
|
275 |
-
{file = "platformdirs-4.
|
276 |
-
{file = "platformdirs-4.
|
277 |
]
|
278 |
|
279 |
[package.extras]
|
280 |
-
docs = ["furo (>=
|
281 |
-
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=
|
282 |
-
type = ["mypy (>=1.
|
283 |
|
284 |
[[package]]
|
285 |
name = "pycryptodome"
|
@@ -324,18 +345,18 @@ files = [
|
|
324 |
|
325 |
[[package]]
|
326 |
name = "pydantic"
|
327 |
-
version = "2.
|
328 |
description = "Data validation using Python type hints"
|
329 |
optional = false
|
330 |
python-versions = ">=3.8"
|
331 |
files = [
|
332 |
-
{file = "pydantic-2.
|
333 |
-
{file = "pydantic-2.
|
334 |
]
|
335 |
|
336 |
[package.dependencies]
|
337 |
-
annotated-types = ">=0.
|
338 |
-
pydantic-core = "2.
|
339 |
typing-extensions = [
|
340 |
{version = ">=4.12.2", markers = "python_version >= \"3.13\""},
|
341 |
{version = ">=4.6.1", markers = "python_version < \"3.13\""},
|
@@ -343,103 +364,104 @@ typing-extensions = [
|
|
343 |
|
344 |
[package.extras]
|
345 |
email = ["email-validator (>=2.0.0)"]
|
|
|
346 |
|
347 |
[[package]]
|
348 |
name = "pydantic-core"
|
349 |
-
version = "2.
|
350 |
description = "Core functionality for Pydantic validation and serialization"
|
351 |
optional = false
|
352 |
python-versions = ">=3.8"
|
353 |
files = [
|
354 |
-
{file = "pydantic_core-2.
|
355 |
-
{file = "pydantic_core-2.
|
356 |
-
{file = "pydantic_core-2.
|
357 |
-
{file = "pydantic_core-2.
|
358 |
-
{file = "pydantic_core-2.
|
359 |
-
{file = "pydantic_core-2.
|
360 |
-
{file = "pydantic_core-2.
|
361 |
-
{file = "pydantic_core-2.
|
362 |
-
{file = "pydantic_core-2.
|
363 |
-
{file = "pydantic_core-2.
|
364 |
-
{file = "pydantic_core-2.
|
365 |
-
{file = "pydantic_core-2.
|
366 |
-
{file = "pydantic_core-2.
|
367 |
-
{file = "pydantic_core-2.
|
368 |
-
{file = "pydantic_core-2.
|
369 |
-
{file = "pydantic_core-2.
|
370 |
-
{file = "pydantic_core-2.
|
371 |
-
{file = "pydantic_core-2.
|
372 |
-
{file = "pydantic_core-2.
|
373 |
-
{file = "pydantic_core-2.
|
374 |
-
{file = "pydantic_core-2.
|
375 |
-
{file = "pydantic_core-2.
|
376 |
-
{file = "pydantic_core-2.
|
377 |
-
{file = "pydantic_core-2.
|
378 |
-
{file = "pydantic_core-2.
|
379 |
-
{file = "pydantic_core-2.
|
380 |
-
{file = "pydantic_core-2.
|
381 |
-
{file = "pydantic_core-2.
|
382 |
-
{file = "pydantic_core-2.
|
383 |
-
{file = "pydantic_core-2.
|
384 |
-
{file = "pydantic_core-2.
|
385 |
-
{file = "pydantic_core-2.
|
386 |
-
{file = "pydantic_core-2.
|
387 |
-
{file = "pydantic_core-2.
|
388 |
-
{file = "pydantic_core-2.
|
389 |
-
{file = "pydantic_core-2.
|
390 |
-
{file = "pydantic_core-2.
|
391 |
-
{file = "pydantic_core-2.
|
392 |
-
{file = "pydantic_core-2.
|
393 |
-
{file = "pydantic_core-2.
|
394 |
-
{file = "pydantic_core-2.
|
395 |
-
{file = "pydantic_core-2.
|
396 |
-
{file = "pydantic_core-2.
|
397 |
-
{file = "pydantic_core-2.
|
398 |
-
{file = "pydantic_core-2.
|
399 |
-
{file = "pydantic_core-2.
|
400 |
-
{file = "pydantic_core-2.
|
401 |
-
{file = "pydantic_core-2.
|
402 |
-
{file = "pydantic_core-2.
|
403 |
-
{file = "pydantic_core-2.
|
404 |
-
{file = "pydantic_core-2.
|
405 |
-
{file = "pydantic_core-2.
|
406 |
-
{file = "pydantic_core-2.
|
407 |
-
{file = "pydantic_core-2.
|
408 |
-
{file = "pydantic_core-2.
|
409 |
-
{file = "pydantic_core-2.
|
410 |
-
{file = "pydantic_core-2.
|
411 |
-
{file = "pydantic_core-2.
|
412 |
-
{file = "pydantic_core-2.
|
413 |
-
{file = "pydantic_core-2.
|
414 |
-
{file = "pydantic_core-2.
|
415 |
-
{file = "pydantic_core-2.
|
416 |
-
{file = "pydantic_core-2.
|
417 |
-
{file = "pydantic_core-2.
|
418 |
-
{file = "pydantic_core-2.
|
419 |
-
{file = "pydantic_core-2.
|
420 |
-
{file = "pydantic_core-2.
|
421 |
-
{file = "pydantic_core-2.
|
422 |
-
{file = "pydantic_core-2.
|
423 |
-
{file = "pydantic_core-2.
|
424 |
-
{file = "pydantic_core-2.
|
425 |
-
{file = "pydantic_core-2.
|
426 |
-
{file = "pydantic_core-2.
|
427 |
-
{file = "pydantic_core-2.
|
428 |
-
{file = "pydantic_core-2.
|
429 |
-
{file = "pydantic_core-2.
|
430 |
-
{file = "pydantic_core-2.
|
431 |
-
{file = "pydantic_core-2.
|
432 |
-
{file = "pydantic_core-2.
|
433 |
-
{file = "pydantic_core-2.
|
434 |
-
{file = "pydantic_core-2.
|
435 |
-
{file = "pydantic_core-2.
|
436 |
-
{file = "pydantic_core-2.
|
437 |
-
{file = "pydantic_core-2.
|
438 |
-
{file = "pydantic_core-2.
|
439 |
-
{file = "pydantic_core-2.
|
440 |
-
{file = "pydantic_core-2.
|
441 |
-
{file = "pydantic_core-2.
|
442 |
-
{file = "pydantic_core-2.
|
443 |
]
|
444 |
|
445 |
[package.dependencies]
|
@@ -447,13 +469,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
|
|
447 |
|
448 |
[[package]]
|
449 |
name = "pydantic-settings"
|
450 |
-
version = "2.
|
451 |
description = "Settings management using Pydantic"
|
452 |
optional = false
|
453 |
python-versions = ">=3.8"
|
454 |
files = [
|
455 |
-
{file = "pydantic_settings-2.
|
456 |
-
{file = "pydantic_settings-2.
|
457 |
]
|
458 |
|
459 |
[package.dependencies]
|
@@ -503,13 +525,13 @@ files = [
|
|
503 |
|
504 |
[[package]]
|
505 |
name = "starlette"
|
506 |
-
version = "0.38.
|
507 |
description = "The little ASGI library that shines."
|
508 |
optional = false
|
509 |
python-versions = ">=3.8"
|
510 |
files = [
|
511 |
-
{file = "starlette-0.38.
|
512 |
-
{file = "starlette-0.38.
|
513 |
]
|
514 |
|
515 |
[package.dependencies]
|
@@ -533,6 +555,17 @@ files = [
|
|
533 |
doc = ["reno", "sphinx"]
|
534 |
test = ["pytest", "tornado (>=4.5)", "typeguard"]
|
535 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
536 |
[[package]]
|
537 |
name = "typing-extensions"
|
538 |
version = "4.12.2"
|
@@ -558,6 +591,7 @@ files = [
|
|
558 |
[package.dependencies]
|
559 |
click = ">=7.0"
|
560 |
h11 = ">=0.8"
|
|
|
561 |
|
562 |
[package.extras]
|
563 |
standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
|
@@ -575,5 +609,5 @@ files = [
|
|
575 |
|
576 |
[metadata]
|
577 |
lock-version = "2.0"
|
578 |
-
python-versions = "
|
579 |
-
content-hash = "
|
|
|
23 |
]
|
24 |
|
25 |
[package.dependencies]
|
26 |
+
exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
|
27 |
idna = ">=2.8"
|
28 |
sniffio = ">=1.1"
|
29 |
+
typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
|
30 |
|
31 |
[package.extras]
|
32 |
doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
|
|
|
70 |
packaging = ">=22.0"
|
71 |
pathspec = ">=0.9.0"
|
72 |
platformdirs = ">=2"
|
73 |
+
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
74 |
+
typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
|
75 |
|
76 |
[package.extras]
|
77 |
colorama = ["colorama (>=0.4.3)"]
|
|
|
126 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
127 |
]
|
128 |
|
129 |
+
[[package]]
|
130 |
+
name = "exceptiongroup"
|
131 |
+
version = "1.2.2"
|
132 |
+
description = "Backport of PEP 654 (exception groups)"
|
133 |
+
optional = false
|
134 |
+
python-versions = ">=3.7"
|
135 |
+
files = [
|
136 |
+
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
|
137 |
+
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
|
138 |
+
]
|
139 |
+
|
140 |
+
[package.extras]
|
141 |
+
test = ["pytest (>=6)"]
|
142 |
+
|
143 |
[[package]]
|
144 |
name = "fastapi"
|
145 |
+
version = "0.114.2"
|
146 |
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
147 |
optional = false
|
148 |
python-versions = ">=3.8"
|
149 |
files = [
|
150 |
+
{file = "fastapi-0.114.2-py3-none-any.whl", hash = "sha256:44474a22913057b1acb973ab90f4b671ba5200482e7622816d79105dcece1ac5"},
|
151 |
+
{file = "fastapi-0.114.2.tar.gz", hash = "sha256:0adb148b62edb09e8c6eeefa3ea934e8f276dabc038c5a82989ea6346050c3da"},
|
152 |
]
|
153 |
|
154 |
[package.dependencies]
|
|
|
241 |
|
242 |
[[package]]
|
243 |
name = "idna"
|
244 |
+
version = "3.10"
|
245 |
description = "Internationalized Domain Names in Applications (IDNA)"
|
246 |
optional = false
|
247 |
python-versions = ">=3.6"
|
248 |
files = [
|
249 |
+
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
|
250 |
+
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
|
251 |
]
|
252 |
|
253 |
+
[package.extras]
|
254 |
+
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
|
255 |
+
|
256 |
[[package]]
|
257 |
name = "mypy-extensions"
|
258 |
version = "1.0.0"
|
|
|
288 |
|
289 |
[[package]]
|
290 |
name = "platformdirs"
|
291 |
+
version = "4.3.3"
|
292 |
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
|
293 |
optional = false
|
294 |
python-versions = ">=3.8"
|
295 |
files = [
|
296 |
+
{file = "platformdirs-4.3.3-py3-none-any.whl", hash = "sha256:50a5450e2e84f44539718293cbb1da0a0885c9d14adf21b77bae4e66fc99d9b5"},
|
297 |
+
{file = "platformdirs-4.3.3.tar.gz", hash = "sha256:d4e0b7d8ec176b341fb03cb11ca12d0276faa8c485f9cd218f613840463fc2c0"},
|
298 |
]
|
299 |
|
300 |
[package.extras]
|
301 |
+
docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"]
|
302 |
+
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
|
303 |
+
type = ["mypy (>=1.11.2)"]
|
304 |
|
305 |
[[package]]
|
306 |
name = "pycryptodome"
|
|
|
345 |
|
346 |
[[package]]
|
347 |
name = "pydantic"
|
348 |
+
version = "2.9.1"
|
349 |
description = "Data validation using Python type hints"
|
350 |
optional = false
|
351 |
python-versions = ">=3.8"
|
352 |
files = [
|
353 |
+
{file = "pydantic-2.9.1-py3-none-any.whl", hash = "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612"},
|
354 |
+
{file = "pydantic-2.9.1.tar.gz", hash = "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2"},
|
355 |
]
|
356 |
|
357 |
[package.dependencies]
|
358 |
+
annotated-types = ">=0.6.0"
|
359 |
+
pydantic-core = "2.23.3"
|
360 |
typing-extensions = [
|
361 |
{version = ">=4.12.2", markers = "python_version >= \"3.13\""},
|
362 |
{version = ">=4.6.1", markers = "python_version < \"3.13\""},
|
|
|
364 |
|
365 |
[package.extras]
|
366 |
email = ["email-validator (>=2.0.0)"]
|
367 |
+
timezone = ["tzdata"]
|
368 |
|
369 |
[[package]]
|
370 |
name = "pydantic-core"
|
371 |
+
version = "2.23.3"
|
372 |
description = "Core functionality for Pydantic validation and serialization"
|
373 |
optional = false
|
374 |
python-versions = ">=3.8"
|
375 |
files = [
|
376 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6"},
|
377 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5"},
|
378 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b"},
|
379 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700"},
|
380 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01"},
|
381 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed"},
|
382 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec"},
|
383 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba"},
|
384 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee"},
|
385 |
+
{file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe"},
|
386 |
+
{file = "pydantic_core-2.23.3-cp310-none-win32.whl", hash = "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b"},
|
387 |
+
{file = "pydantic_core-2.23.3-cp310-none-win_amd64.whl", hash = "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83"},
|
388 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27"},
|
389 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45"},
|
390 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611"},
|
391 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61"},
|
392 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5"},
|
393 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0"},
|
394 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8"},
|
395 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8"},
|
396 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48"},
|
397 |
+
{file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5"},
|
398 |
+
{file = "pydantic_core-2.23.3-cp311-none-win32.whl", hash = "sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1"},
|
399 |
+
{file = "pydantic_core-2.23.3-cp311-none-win_amd64.whl", hash = "sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa"},
|
400 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305"},
|
401 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb"},
|
402 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa"},
|
403 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162"},
|
404 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801"},
|
405 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb"},
|
406 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326"},
|
407 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c"},
|
408 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c"},
|
409 |
+
{file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab"},
|
410 |
+
{file = "pydantic_core-2.23.3-cp312-none-win32.whl", hash = "sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c"},
|
411 |
+
{file = "pydantic_core-2.23.3-cp312-none-win_amd64.whl", hash = "sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b"},
|
412 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f"},
|
413 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2"},
|
414 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791"},
|
415 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423"},
|
416 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63"},
|
417 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9"},
|
418 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5"},
|
419 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855"},
|
420 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4"},
|
421 |
+
{file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d"},
|
422 |
+
{file = "pydantic_core-2.23.3-cp313-none-win32.whl", hash = "sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8"},
|
423 |
+
{file = "pydantic_core-2.23.3-cp313-none-win_amd64.whl", hash = "sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1"},
|
424 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d063c6b9fed7d992bcbebfc9133f4c24b7a7f215d6b102f3e082b1117cddb72c"},
|
425 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6cb968da9a0746a0cf521b2b5ef25fc5a0bee9b9a1a8214e0a1cfaea5be7e8a4"},
|
426 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbefe079a520c5984e30e1f1f29325054b59534729c25b874a16a5048028d16"},
|
427 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbaaf2ef20d282659093913da9d402108203f7cb5955020bd8d1ae5a2325d1c4"},
|
428 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb539d7e5dc4aac345846f290cf504d2fd3c1be26ac4e8b5e4c2b688069ff4cf"},
|
429 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e6f33503c5495059148cc486867e1d24ca35df5fc064686e631e314d959ad5b"},
|
430 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04b07490bc2f6f2717b10c3969e1b830f5720b632f8ae2f3b8b1542394c47a8e"},
|
431 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03795b9e8a5d7fda05f3873efc3f59105e2dcff14231680296b87b80bb327295"},
|
432 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c483dab0f14b8d3f0df0c6c18d70b21b086f74c87ab03c59250dbf6d3c89baba"},
|
433 |
+
{file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b2682038e255e94baf2c473dca914a7460069171ff5cdd4080be18ab8a7fd6e"},
|
434 |
+
{file = "pydantic_core-2.23.3-cp38-none-win32.whl", hash = "sha256:f4a57db8966b3a1d1a350012839c6a0099f0898c56512dfade8a1fe5fb278710"},
|
435 |
+
{file = "pydantic_core-2.23.3-cp38-none-win_amd64.whl", hash = "sha256:13dd45ba2561603681a2676ca56006d6dee94493f03d5cadc055d2055615c3ea"},
|
436 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82da2f4703894134a9f000e24965df73cc103e31e8c31906cc1ee89fde72cbd8"},
|
437 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dd9be0a42de08f4b58a3cc73a123f124f65c24698b95a54c1543065baca8cf0e"},
|
438 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b731f25c80830c76fdb13705c68fef6a2b6dc494402987c7ea9584fe189f5d"},
|
439 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6de1ec30c4bb94f3a69c9f5f2182baeda5b809f806676675e9ef6b8dc936f28"},
|
440 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb68b41c3fa64587412b104294b9cbb027509dc2f6958446c502638d481525ef"},
|
441 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c3980f2843de5184656aab58698011b42763ccba11c4a8c35936c8dd6c7068c"},
|
442 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94f85614f2cba13f62c3c6481716e4adeae48e1eaa7e8bac379b9d177d93947a"},
|
443 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:510b7fb0a86dc8f10a8bb43bd2f97beb63cffad1203071dc434dac26453955cd"},
|
444 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1eba2f7ce3e30ee2170410e2171867ea73dbd692433b81a93758ab2de6c64835"},
|
445 |
+
{file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b259fd8409ab84b4041b7b3f24dcc41e4696f180b775961ca8142b5b21d0e70"},
|
446 |
+
{file = "pydantic_core-2.23.3-cp39-none-win32.whl", hash = "sha256:40d9bd259538dba2f40963286009bf7caf18b5112b19d2b55b09c14dde6db6a7"},
|
447 |
+
{file = "pydantic_core-2.23.3-cp39-none-win_amd64.whl", hash = "sha256:5a8cd3074a98ee70173a8633ad3c10e00dcb991ecec57263aacb4095c5efb958"},
|
448 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d"},
|
449 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4"},
|
450 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211"},
|
451 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961"},
|
452 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e"},
|
453 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc"},
|
454 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4"},
|
455 |
+
{file = "pydantic_core-2.23.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b"},
|
456 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e89513f014c6be0d17b00a9a7c81b1c426f4eb9224b15433f3d98c1a071f8433"},
|
457 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4f62c1c953d7ee375df5eb2e44ad50ce2f5aff931723b398b8bc6f0ac159791a"},
|
458 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2718443bc671c7ac331de4eef9b673063b10af32a0bb385019ad61dcf2cc8f6c"},
|
459 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d90e08b2727c5d01af1b5ef4121d2f0c99fbee692c762f4d9d0409c9da6541"},
|
460 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b676583fc459c64146debea14ba3af54e540b61762dfc0613dc4e98c3f66eeb"},
|
461 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:50e4661f3337977740fdbfbae084ae5693e505ca2b3130a6d4eb0f2281dc43b8"},
|
462 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:68f4cf373f0de6abfe599a38307f4417c1c867ca381c03df27c873a9069cda25"},
|
463 |
+
{file = "pydantic_core-2.23.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:59d52cf01854cb26c46958552a21acb10dd78a52aa34c86f284e66b209db8cab"},
|
464 |
+
{file = "pydantic_core-2.23.3.tar.gz", hash = "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690"},
|
465 |
]
|
466 |
|
467 |
[package.dependencies]
|
|
|
469 |
|
470 |
[[package]]
|
471 |
name = "pydantic-settings"
|
472 |
+
version = "2.5.2"
|
473 |
description = "Settings management using Pydantic"
|
474 |
optional = false
|
475 |
python-versions = ">=3.8"
|
476 |
files = [
|
477 |
+
{file = "pydantic_settings-2.5.2-py3-none-any.whl", hash = "sha256:2c912e55fd5794a59bf8c832b9de832dcfdf4778d79ff79b708744eed499a907"},
|
478 |
+
{file = "pydantic_settings-2.5.2.tar.gz", hash = "sha256:f90b139682bee4d2065273d5185d71d37ea46cfe57e1b5ae184fc6a0b2484ca0"},
|
479 |
]
|
480 |
|
481 |
[package.dependencies]
|
|
|
525 |
|
526 |
[[package]]
|
527 |
name = "starlette"
|
528 |
+
version = "0.38.5"
|
529 |
description = "The little ASGI library that shines."
|
530 |
optional = false
|
531 |
python-versions = ">=3.8"
|
532 |
files = [
|
533 |
+
{file = "starlette-0.38.5-py3-none-any.whl", hash = "sha256:632f420a9d13e3ee2a6f18f437b0a9f1faecb0bc42e1942aa2ea0e379a4c4206"},
|
534 |
+
{file = "starlette-0.38.5.tar.gz", hash = "sha256:04a92830a9b6eb1442c766199d62260c3d4dc9c4f9188360626b1e0273cb7077"},
|
535 |
]
|
536 |
|
537 |
[package.dependencies]
|
|
|
555 |
doc = ["reno", "sphinx"]
|
556 |
test = ["pytest", "tornado (>=4.5)", "typeguard"]
|
557 |
|
558 |
+
[[package]]
|
559 |
+
name = "tomli"
|
560 |
+
version = "2.0.1"
|
561 |
+
description = "A lil' TOML parser"
|
562 |
+
optional = false
|
563 |
+
python-versions = ">=3.7"
|
564 |
+
files = [
|
565 |
+
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
566 |
+
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
567 |
+
]
|
568 |
+
|
569 |
[[package]]
|
570 |
name = "typing-extensions"
|
571 |
version = "4.12.2"
|
|
|
591 |
[package.dependencies]
|
592 |
click = ">=7.0"
|
593 |
h11 = ">=0.8"
|
594 |
+
typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
|
595 |
|
596 |
[package.extras]
|
597 |
standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
|
|
|
609 |
|
610 |
[metadata]
|
611 |
lock-version = "2.0"
|
612 |
+
python-versions = ">=3.10"
|
613 |
+
content-hash = "f782c7d095086e1a3c589cdf64dce8c61937c2cf73e52cc6e4fcf04ce0daa2c1"
|
pyproject.toml
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
[tool.poetry]
|
2 |
name = "mediaflow-proxy"
|
3 |
-
version = "1.5.
|
4 |
description = "A high-performance proxy server for streaming media, supporting HTTP(S), HLS, and MPEG-DASH with real-time DRM decryption."
|
5 |
authors = ["mhdzumair <[email protected]>"]
|
6 |
readme = "README.md"
|
@@ -22,13 +22,13 @@ include = ["LICENSE", "README.md", "mediaflow_proxy/static/*"]
|
|
22 |
|
23 |
|
24 |
[tool.poetry.dependencies]
|
25 |
-
python = "
|
26 |
-
fastapi = "^0.
|
27 |
httpx = {extras = ["socks"], version = "^0.27.2"}
|
28 |
tenacity = "^9.0.0"
|
29 |
xmltodict = "^0.13.0"
|
30 |
cachetools = "^5.4.0"
|
31 |
-
pydantic-settings = "^2.
|
32 |
gunicorn = "^23.0.0"
|
33 |
pycryptodome = "^3.20.0"
|
34 |
uvicorn = "^0.30.6"
|
|
|
1 |
[tool.poetry]
|
2 |
name = "mediaflow-proxy"
|
3 |
+
version = "1.5.1"
|
4 |
description = "A high-performance proxy server for streaming media, supporting HTTP(S), HLS, and MPEG-DASH with real-time DRM decryption."
|
5 |
authors = ["mhdzumair <[email protected]>"]
|
6 |
readme = "README.md"
|
|
|
22 |
|
23 |
|
24 |
[tool.poetry.dependencies]
|
25 |
+
python = ">=3.10"
|
26 |
+
fastapi = "^0.114.2"
|
27 |
httpx = {extras = ["socks"], version = "^0.27.2"}
|
28 |
tenacity = "^9.0.0"
|
29 |
xmltodict = "^0.13.0"
|
30 |
cachetools = "^5.4.0"
|
31 |
+
pydantic-settings = "^2.5.2"
|
32 |
gunicorn = "^23.0.0"
|
33 |
pycryptodome = "^3.20.0"
|
34 |
uvicorn = "^0.30.6"
|