mnamer 2.6.1.dev5__tar.gz → 2.6.1.dev13__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.
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/PKG-INFO +1 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/__version__.py +1 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/argument.py +7 -3
- mnamer-2.6.1.dev13/mnamer/const.py +110 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/endpoints.py +185 -59
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/frontends.py +5 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/language.py +4 -3
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/metadata.py +20 -11
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/providers.py +112 -63
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/setting_spec.py +0 -2
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/setting_store.py +5 -6
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/target.py +9 -11
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/tty.py +4 -8
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/types.py +2 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/utils.py +61 -43
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/PKG-INFO +1 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/pyproject.toml +5 -2
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_utils.py +1 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_endpoints__omdb.py +59 -59
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_endpoints__tvdb.py +49 -49
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_endpoints__tvmaze.py +5 -5
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_providers__tmdb.py +3 -1
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_providers__tvdb.py +5 -3
- mnamer-2.6.1.dev5/mnamer/const.py +0 -77
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/actions/init/action.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/actions/lint/action.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/actions/test/action.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/dependabot.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/workflows/publish.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/workflows/pull_request.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.github/workflows/push.yml +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.gitignore +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.python-version +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/.vscode/settings.json +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/Dockerfile +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/LICENSE.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/MANIFEST.in +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/README.md +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/design.eps +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/logo-2.png +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/logo-3.png +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/logo.png +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/recording.mov +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/screenshot.eps +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/assets/screenshot.png +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/makefile +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/__init__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/__main__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/exceptions.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer/py.typed +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/SOURCES.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/dependency_links.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/entry_points.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/requires.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/mnamer.egg-info/top_level.txt +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/pytest.ini +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/setup.cfg +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/__init__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/conftest.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/e2e/__init__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/e2e/conftest.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/e2e/test_directives.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/e2e/test_errors.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/e2e/test_moving.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/__init__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_argument.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_language.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_metadata.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_setting_spec.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_setting_store.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_target.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/local/test_tty.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/__init__.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_endpoints__tmdb.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_providers__omdb.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/tests/network/test_providers__tvmaze.py +0 -0
- {mnamer-2.6.1.dev5 → mnamer-2.6.1.dev13}/uv.lock +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any, final, override
|
|
3
3
|
|
|
4
4
|
from mnamer.const import USAGE
|
|
5
5
|
from mnamer.setting_spec import SettingSpec
|
|
@@ -28,6 +28,7 @@ DIRECTIVES:
|
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
@final
|
|
31
32
|
class ArgLoader(argparse.ArgumentParser):
|
|
32
33
|
"""
|
|
33
34
|
An overridden ArgumentParser class which is build to accommodate mnamer's setting
|
|
@@ -49,7 +50,9 @@ class ArgLoader(argparse.ArgumentParser):
|
|
|
49
50
|
SettingType.PARAMETER,
|
|
50
51
|
SettingType.POSITIONAL,
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
for spec in specs:
|
|
54
|
+
if spec.group in groups:
|
|
55
|
+
self._add_spec(spec)
|
|
53
56
|
|
|
54
57
|
def _add_spec(self, spec: SettingSpec):
|
|
55
58
|
if spec.group is SettingType.PARAMETER:
|
|
@@ -63,7 +66,7 @@ class ArgLoader(argparse.ArgumentParser):
|
|
|
63
66
|
args, kwargs = spec.registration
|
|
64
67
|
if not args or not kwargs.get("help"):
|
|
65
68
|
raise RuntimeError("Cannot register ArgumentSpec")
|
|
66
|
-
group.add_argument(*args, **kwargs)
|
|
69
|
+
_action = group.add_argument(*args, **kwargs)
|
|
67
70
|
|
|
68
71
|
__iadd__ = _add_spec
|
|
69
72
|
|
|
@@ -73,6 +76,7 @@ class ArgLoader(argparse.ArgumentParser):
|
|
|
73
76
|
raise RuntimeError(f"invalid arguments: {','.join(unknowns)}")
|
|
74
77
|
return vars(load_arguments)
|
|
75
78
|
|
|
79
|
+
@override
|
|
76
80
|
def format_help(self) -> str:
|
|
77
81
|
"""
|
|
78
82
|
Overrides ArgumentParser's format_help to dynamically generate a help message
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Shared constant definitions."""
|
|
2
|
+
|
|
3
|
+
import datetime as dt
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from platform import platform, python_version
|
|
6
|
+
from sys import argv, gettrace, version_info
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _resolve_version() -> str:
|
|
10
|
+
try:
|
|
11
|
+
from mnamer.__version__ import __version__
|
|
12
|
+
|
|
13
|
+
return __version__
|
|
14
|
+
except ModuleNotFoundError:
|
|
15
|
+
from setuptools_scm import get_version # type: ignore[import-untyped]
|
|
16
|
+
|
|
17
|
+
return get_version(root="..", relative_to=__file__, local_scheme="dirty-tag")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _resolve_appdirs_version() -> str:
|
|
21
|
+
try:
|
|
22
|
+
from appdirs import __version__ # type: ignore[import-untyped]
|
|
23
|
+
|
|
24
|
+
return __version__
|
|
25
|
+
except ModuleNotFoundError:
|
|
26
|
+
return "N/A"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _resolve_cache_dir() -> str:
|
|
30
|
+
try:
|
|
31
|
+
from appdirs import user_cache_dir # type: ignore[import-untyped]
|
|
32
|
+
|
|
33
|
+
return user_cache_dir()
|
|
34
|
+
except ModuleNotFoundError:
|
|
35
|
+
return "N/A"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _resolve_guessit_version() -> str:
|
|
39
|
+
try:
|
|
40
|
+
from guessit import __version__ # type: ignore[import-untyped]
|
|
41
|
+
|
|
42
|
+
return __version__
|
|
43
|
+
except ModuleNotFoundError:
|
|
44
|
+
return "N/A"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _resolve_requests_version() -> str:
|
|
48
|
+
try:
|
|
49
|
+
from requests import __version__
|
|
50
|
+
|
|
51
|
+
return __version__
|
|
52
|
+
except ModuleNotFoundError:
|
|
53
|
+
return "N/A"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _resolve_requests_cache_version() -> str:
|
|
57
|
+
try:
|
|
58
|
+
from requests_cache import __version__
|
|
59
|
+
|
|
60
|
+
return __version__
|
|
61
|
+
except ModuleNotFoundError:
|
|
62
|
+
return "N/A"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _resolve_teletype_version() -> str:
|
|
66
|
+
try:
|
|
67
|
+
from teletype import VERSION
|
|
68
|
+
|
|
69
|
+
return VERSION
|
|
70
|
+
except ModuleNotFoundError:
|
|
71
|
+
return "N/A"
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
VERSION: str = _resolve_version()
|
|
75
|
+
appdirs_version: str = _resolve_appdirs_version()
|
|
76
|
+
cache_dir: str = _resolve_cache_dir()
|
|
77
|
+
guessit_version: str = _resolve_guessit_version()
|
|
78
|
+
requests_version: str = _resolve_requests_version()
|
|
79
|
+
requests_cache_version: str = _resolve_requests_cache_version()
|
|
80
|
+
teletype_version: str = _resolve_teletype_version()
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
CACHE_PATH = Path(
|
|
84
|
+
cache_dir, f"mnamer-py{version_info.major}.{version_info.minor}"
|
|
85
|
+
).absolute()
|
|
86
|
+
|
|
87
|
+
CURRENT_YEAR = dt.datetime.now().year
|
|
88
|
+
|
|
89
|
+
DEPRECATED = {"no_replace", "replacements"}
|
|
90
|
+
|
|
91
|
+
IS_DEBUG = gettrace() is not None
|
|
92
|
+
|
|
93
|
+
SUBTITLE_CONTAINERS = [".srt", ".idx", ".sub"]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
SYSTEM = {
|
|
97
|
+
"date": dt.date.today(),
|
|
98
|
+
"platform": platform(),
|
|
99
|
+
"arguments": argv[1:],
|
|
100
|
+
"cache location": f"{CACHE_PATH}.sqlite",
|
|
101
|
+
"python version": python_version(),
|
|
102
|
+
"mnamer version": VERSION,
|
|
103
|
+
"appdirs version": appdirs_version,
|
|
104
|
+
"guessit version": guessit_version,
|
|
105
|
+
"requests version": requests_version,
|
|
106
|
+
"requests cache version": requests_cache_version,
|
|
107
|
+
"teletype version": teletype_version,
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
USAGE = "USAGE: mnamer [preferences] [directives] target [targets ...]"
|