plexflow 0.0.64__py3-none-any.whl
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.
- plexflow/__init__.py +0 -0
- plexflow/__main__.py +15 -0
- plexflow/core/.DS_Store +0 -0
- plexflow/core/__init__.py +0 -0
- plexflow/core/context/__init__.py +0 -0
- plexflow/core/context/metadata/__init__.py +0 -0
- plexflow/core/context/metadata/context.py +32 -0
- plexflow/core/context/metadata/tmdb/__init__.py +0 -0
- plexflow/core/context/metadata/tmdb/context.py +45 -0
- plexflow/core/context/partial_context.py +46 -0
- plexflow/core/context/partials/__init__.py +8 -0
- plexflow/core/context/partials/cache.py +16 -0
- plexflow/core/context/partials/context.py +12 -0
- plexflow/core/context/partials/ids.py +37 -0
- plexflow/core/context/partials/movie.py +115 -0
- plexflow/core/context/partials/tgx_batch.py +33 -0
- plexflow/core/context/partials/tgx_context.py +34 -0
- plexflow/core/context/partials/torrents.py +23 -0
- plexflow/core/context/partials/watchlist.py +35 -0
- plexflow/core/context/plexflow_context.py +29 -0
- plexflow/core/context/plexflow_property.py +36 -0
- plexflow/core/context/root/__init__.py +0 -0
- plexflow/core/context/root/context.py +25 -0
- plexflow/core/context/select/__init__.py +0 -0
- plexflow/core/context/select/context.py +45 -0
- plexflow/core/context/torrent/__init__.py +0 -0
- plexflow/core/context/torrent/context.py +43 -0
- plexflow/core/context/torrent/tpb/__init__.py +0 -0
- plexflow/core/context/torrent/tpb/context.py +45 -0
- plexflow/core/context/torrent/yts/__init__.py +0 -0
- plexflow/core/context/torrent/yts/context.py +45 -0
- plexflow/core/context/watchlist/__init__.py +0 -0
- plexflow/core/context/watchlist/context.py +46 -0
- plexflow/core/downloads/__init__.py +0 -0
- plexflow/core/downloads/candidates/__init__.py +0 -0
- plexflow/core/downloads/candidates/download_candidate.py +210 -0
- plexflow/core/downloads/candidates/filtered.py +51 -0
- plexflow/core/downloads/candidates/utils.py +39 -0
- plexflow/core/env/__init__.py +0 -0
- plexflow/core/env/env.py +31 -0
- plexflow/core/genai/__init__.py +0 -0
- plexflow/core/genai/bot.py +9 -0
- plexflow/core/genai/plexa.py +54 -0
- plexflow/core/genai/torrent/imdb_verify.py +65 -0
- plexflow/core/genai/torrent/movie.py +25 -0
- plexflow/core/genai/utils/__init__.py +0 -0
- plexflow/core/genai/utils/loader.py +5 -0
- plexflow/core/metadata/__init__.py +0 -0
- plexflow/core/metadata/auto/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_meta.py +40 -0
- plexflow/core/metadata/auto/auto_providers/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/auto/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/auto/episode.py +49 -0
- plexflow/core/metadata/auto/auto_providers/auto/item.py +55 -0
- plexflow/core/metadata/auto/auto_providers/auto/movie.py +13 -0
- plexflow/core/metadata/auto/auto_providers/auto/season.py +43 -0
- plexflow/core/metadata/auto/auto_providers/auto/show.py +26 -0
- plexflow/core/metadata/auto/auto_providers/imdb/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/imdb/movie.py +36 -0
- plexflow/core/metadata/auto/auto_providers/imdb/show.py +45 -0
- plexflow/core/metadata/auto/auto_providers/moviemeter/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/moviemeter/movie.py +40 -0
- plexflow/core/metadata/auto/auto_providers/plex/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/plex/movie.py +39 -0
- plexflow/core/metadata/auto/auto_providers/tmdb/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/tmdb/episode.py +30 -0
- plexflow/core/metadata/auto/auto_providers/tmdb/movie.py +36 -0
- plexflow/core/metadata/auto/auto_providers/tmdb/season.py +23 -0
- plexflow/core/metadata/auto/auto_providers/tmdb/show.py +41 -0
- plexflow/core/metadata/auto/auto_providers/tmdb.py +92 -0
- plexflow/core/metadata/auto/auto_providers/tvdb/__init__.py +0 -0
- plexflow/core/metadata/auto/auto_providers/tvdb/episode.py +28 -0
- plexflow/core/metadata/auto/auto_providers/tvdb/movie.py +36 -0
- plexflow/core/metadata/auto/auto_providers/tvdb/season.py +25 -0
- plexflow/core/metadata/auto/auto_providers/tvdb/show.py +41 -0
- plexflow/core/metadata/providers/__init__.py +0 -0
- plexflow/core/metadata/providers/imdb/__init__.py +0 -0
- plexflow/core/metadata/providers/imdb/datatypes.py +53 -0
- plexflow/core/metadata/providers/imdb/imdb.py +112 -0
- plexflow/core/metadata/providers/moviemeter/__init__.py +0 -0
- plexflow/core/metadata/providers/moviemeter/datatypes.py +111 -0
- plexflow/core/metadata/providers/moviemeter/moviemeter.py +42 -0
- plexflow/core/metadata/providers/plex/__init__.py +0 -0
- plexflow/core/metadata/providers/plex/datatypes.py +693 -0
- plexflow/core/metadata/providers/plex/plex.py +167 -0
- plexflow/core/metadata/providers/tmdb/__init__.py +0 -0
- plexflow/core/metadata/providers/tmdb/datatypes.py +460 -0
- plexflow/core/metadata/providers/tmdb/tmdb.py +85 -0
- plexflow/core/metadata/providers/tvdb/__init__.py +0 -0
- plexflow/core/metadata/providers/tvdb/datatypes.py +257 -0
- plexflow/core/metadata/providers/tvdb/tv_datatypes.py +554 -0
- plexflow/core/metadata/providers/tvdb/tvdb.py +65 -0
- plexflow/core/metadata/providers/universal/__init__.py +0 -0
- plexflow/core/metadata/providers/universal/movie.py +130 -0
- plexflow/core/metadata/providers/universal/old.py +192 -0
- plexflow/core/metadata/providers/universal/show.py +107 -0
- plexflow/core/plex/__init__.py +0 -0
- plexflow/core/plex/api/context/authorized.py +15 -0
- plexflow/core/plex/api/context/discover.py +14 -0
- plexflow/core/plex/api/context/library.py +14 -0
- plexflow/core/plex/discover/__init__.py +0 -0
- plexflow/core/plex/discover/activity.py +448 -0
- plexflow/core/plex/discover/comment.py +89 -0
- plexflow/core/plex/discover/feed.py +11 -0
- plexflow/core/plex/hooks/__init__.py +0 -0
- plexflow/core/plex/hooks/plex_authorized.py +60 -0
- plexflow/core/plex/hooks/plexflow_database.py +6 -0
- plexflow/core/plex/library/__init__.py +0 -0
- plexflow/core/plex/library/library.py +103 -0
- plexflow/core/plex/token/__init__.py +0 -0
- plexflow/core/plex/token/auto_token.py +91 -0
- plexflow/core/plex/utils/__init__.py +0 -0
- plexflow/core/plex/utils/paginated.py +39 -0
- plexflow/core/plex/watchlist/__init__.py +0 -0
- plexflow/core/plex/watchlist/datatypes.py +124 -0
- plexflow/core/plex/watchlist/watchlist.py +23 -0
- plexflow/core/storage/__init__.py +0 -0
- plexflow/core/storage/object/__init__.py +0 -0
- plexflow/core/storage/object/plexflow_storage.py +143 -0
- plexflow/core/storage/object/redis_storage.py +169 -0
- plexflow/core/subtitles/__init__.py +0 -0
- plexflow/core/subtitles/providers/__init__.py +0 -0
- plexflow/core/subtitles/providers/auto_subtitles.py +48 -0
- plexflow/core/subtitles/providers/oss/__init__.py +0 -0
- plexflow/core/subtitles/providers/oss/datatypes.py +104 -0
- plexflow/core/subtitles/providers/oss/download.py +48 -0
- plexflow/core/subtitles/providers/oss/old.py +144 -0
- plexflow/core/subtitles/providers/oss/oss.py +400 -0
- plexflow/core/subtitles/providers/oss/oss_subtitle.py +32 -0
- plexflow/core/subtitles/providers/oss/search.py +52 -0
- plexflow/core/subtitles/providers/oss/unlimited_oss.py +231 -0
- plexflow/core/subtitles/providers/oss/utils/__init__.py +0 -0
- plexflow/core/subtitles/providers/oss/utils/config.py +63 -0
- plexflow/core/subtitles/providers/oss/utils/download_client.py +22 -0
- plexflow/core/subtitles/providers/oss/utils/exceptions.py +35 -0
- plexflow/core/subtitles/providers/oss/utils/file_utils.py +83 -0
- plexflow/core/subtitles/providers/oss/utils/languages.py +78 -0
- plexflow/core/subtitles/providers/oss/utils/response_base.py +221 -0
- plexflow/core/subtitles/providers/oss/utils/responses.py +176 -0
- plexflow/core/subtitles/providers/oss/utils/srt.py +561 -0
- plexflow/core/subtitles/results/__init__.py +0 -0
- plexflow/core/subtitles/results/subtitle.py +170 -0
- plexflow/core/torrents/__init__.py +0 -0
- plexflow/core/torrents/analyzers/analyzed_torrent.py +143 -0
- plexflow/core/torrents/analyzers/analyzer.py +45 -0
- plexflow/core/torrents/analyzers/torrentquest/analyzer.py +47 -0
- plexflow/core/torrents/auto/auto_providers/auto/__init__.py +0 -0
- plexflow/core/torrents/auto/auto_providers/auto/torrent.py +64 -0
- plexflow/core/torrents/auto/auto_providers/tpb/torrent.py +62 -0
- plexflow/core/torrents/auto/auto_torrents.py +29 -0
- plexflow/core/torrents/providers/__init__.py +0 -0
- plexflow/core/torrents/providers/ext/__init__.py +0 -0
- plexflow/core/torrents/providers/ext/ext.py +18 -0
- plexflow/core/torrents/providers/ext/utils.py +64 -0
- plexflow/core/torrents/providers/extratorrent/__init__.py +0 -0
- plexflow/core/torrents/providers/extratorrent/extratorrent.py +21 -0
- plexflow/core/torrents/providers/extratorrent/utils.py +66 -0
- plexflow/core/torrents/providers/eztv/__init__.py +0 -0
- plexflow/core/torrents/providers/eztv/eztv.py +47 -0
- plexflow/core/torrents/providers/eztv/utils.py +83 -0
- plexflow/core/torrents/providers/rarbg2/__init__.py +0 -0
- plexflow/core/torrents/providers/rarbg2/rarbg2.py +19 -0
- plexflow/core/torrents/providers/rarbg2/utils.py +76 -0
- plexflow/core/torrents/providers/snowfl/__init__.py +0 -0
- plexflow/core/torrents/providers/snowfl/snowfl.py +36 -0
- plexflow/core/torrents/providers/snowfl/utils.py +59 -0
- plexflow/core/torrents/providers/tgx/__init__.py +0 -0
- plexflow/core/torrents/providers/tgx/context.py +50 -0
- plexflow/core/torrents/providers/tgx/dump.py +40 -0
- plexflow/core/torrents/providers/tgx/tgx.py +22 -0
- plexflow/core/torrents/providers/tgx/utils.py +61 -0
- plexflow/core/torrents/providers/therarbg/__init__.py +0 -0
- plexflow/core/torrents/providers/therarbg/therarbg.py +17 -0
- plexflow/core/torrents/providers/therarbg/utils.py +61 -0
- plexflow/core/torrents/providers/torrentquest/__init__.py +0 -0
- plexflow/core/torrents/providers/torrentquest/torrentquest.py +20 -0
- plexflow/core/torrents/providers/torrentquest/utils.py +70 -0
- plexflow/core/torrents/providers/tpb/__init__.py +0 -0
- plexflow/core/torrents/providers/tpb/tpb.py +17 -0
- plexflow/core/torrents/providers/tpb/utils.py +139 -0
- plexflow/core/torrents/providers/yts/__init__.py +0 -0
- plexflow/core/torrents/providers/yts/utils.py +57 -0
- plexflow/core/torrents/providers/yts/yts.py +31 -0
- plexflow/core/torrents/results/__init__.py +0 -0
- plexflow/core/torrents/results/torrent.py +165 -0
- plexflow/core/torrents/results/universal.py +220 -0
- plexflow/core/torrents/results/utils.py +15 -0
- plexflow/events/__init__.py +0 -0
- plexflow/events/download/__init__.py +0 -0
- plexflow/events/download/torrent_events.py +96 -0
- plexflow/events/publish/__init__.py +0 -0
- plexflow/events/publish/publish.py +34 -0
- plexflow/logging/__init__.py +0 -0
- plexflow/logging/log_setup.py +8 -0
- plexflow/spiders/quiet_logger.py +9 -0
- plexflow/spiders/tgx/pipelines/dump_json_pipeline.py +30 -0
- plexflow/spiders/tgx/pipelines/meta_pipeline.py +13 -0
- plexflow/spiders/tgx/pipelines/publish_pipeline.py +14 -0
- plexflow/spiders/tgx/pipelines/torrent_info_pipeline.py +12 -0
- plexflow/spiders/tgx/pipelines/validation_pipeline.py +17 -0
- plexflow/spiders/tgx/settings.py +36 -0
- plexflow/spiders/tgx/spider.py +72 -0
- plexflow/utils/__init__.py +0 -0
- plexflow/utils/antibot/human_like_requests.py +122 -0
- plexflow/utils/api/__init__.py +0 -0
- plexflow/utils/api/context/http.py +62 -0
- plexflow/utils/api/rest/__init__.py +0 -0
- plexflow/utils/api/rest/antibot_restful.py +68 -0
- plexflow/utils/api/rest/restful.py +49 -0
- plexflow/utils/captcha/__init__.py +0 -0
- plexflow/utils/captcha/bypass/__init__.py +0 -0
- plexflow/utils/captcha/bypass/decode_audio.py +34 -0
- plexflow/utils/download/__init__.py +0 -0
- plexflow/utils/download/gz.py +26 -0
- plexflow/utils/filesystem/__init__.py +0 -0
- plexflow/utils/filesystem/search.py +129 -0
- plexflow/utils/gmail/__init__.py +0 -0
- plexflow/utils/gmail/mails.py +116 -0
- plexflow/utils/hooks/__init__.py +0 -0
- plexflow/utils/hooks/http.py +84 -0
- plexflow/utils/hooks/postgresql.py +93 -0
- plexflow/utils/hooks/redis.py +112 -0
- plexflow/utils/image/storage.py +36 -0
- plexflow/utils/imdb/__init__.py +0 -0
- plexflow/utils/imdb/imdb_codes.py +107 -0
- plexflow/utils/pubsub/consume.py +82 -0
- plexflow/utils/pubsub/produce.py +25 -0
- plexflow/utils/retry/__init__.py +0 -0
- plexflow/utils/retry/utils.py +38 -0
- plexflow/utils/strings/__init__.py +0 -0
- plexflow/utils/strings/filesize.py +55 -0
- plexflow/utils/strings/language.py +14 -0
- plexflow/utils/subtitle/search.py +76 -0
- plexflow/utils/tasks/decorators.py +78 -0
- plexflow/utils/tasks/k8s/task.py +70 -0
- plexflow/utils/thread_safe/safe_list.py +54 -0
- plexflow/utils/thread_safe/safe_set.py +69 -0
- plexflow/utils/torrent/__init__.py +0 -0
- plexflow/utils/torrent/analyze.py +118 -0
- plexflow/utils/torrent/extract/common.py +37 -0
- plexflow/utils/torrent/extract/ext.py +2391 -0
- plexflow/utils/torrent/extract/extratorrent.py +56 -0
- plexflow/utils/torrent/extract/kat.py +1581 -0
- plexflow/utils/torrent/extract/tgx.py +96 -0
- plexflow/utils/torrent/extract/therarbg.py +170 -0
- plexflow/utils/torrent/extract/torrentquest.py +171 -0
- plexflow/utils/torrent/files.py +36 -0
- plexflow/utils/torrent/hash.py +90 -0
- plexflow/utils/transcribe/__init__.py +0 -0
- plexflow/utils/transcribe/speech2text.py +40 -0
- plexflow/utils/video/__init__.py +0 -0
- plexflow/utils/video/subtitle.py +73 -0
- plexflow-0.0.64.dist-info/METADATA +71 -0
- plexflow-0.0.64.dist-info/RECORD +256 -0
- plexflow-0.0.64.dist-info/WHEEL +4 -0
- plexflow-0.0.64.dist-info/entry_points.txt +24 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
import os
|
2
|
+
import tmdbsimple
|
3
|
+
from tmdbsimple import Find, Movies, TV, TV_Seasons
|
4
|
+
from typing import Union, List
|
5
|
+
from plexflow.core.metadata.providers.tmdb.datatypes import TmdbMovie, TmdbShow, movie_from_json, show_from_json, TmdbSeason
|
6
|
+
import json
|
7
|
+
|
8
|
+
def search_movie_by_imdb(imdb_id: str) -> Union[TmdbMovie, None]:
|
9
|
+
"""
|
10
|
+
Search for a movie using its IMDB ID.
|
11
|
+
|
12
|
+
Parameters:
|
13
|
+
imdb_id (str): The IMDB ID of the movie.
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
Movie: A Movie object containing all the details of the movie.
|
17
|
+
None: If the movie is not found or an error occurs.
|
18
|
+
|
19
|
+
Example:
|
20
|
+
>>> search_movie_by_imdb('tt0111161')
|
21
|
+
Movie(id=278, title='The Shawshank Redemption', overview='Framed in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.', release_date='1994-09-23', ...)
|
22
|
+
"""
|
23
|
+
tmdbsimple.API_KEY = os.getenv("TMDB_API_KEY")
|
24
|
+
|
25
|
+
try:
|
26
|
+
find = Find(imdb_id)
|
27
|
+
response = find.info(external_source='imdb_id')
|
28
|
+
if response['movie_results']:
|
29
|
+
movie_id = response['movie_results'][0]['id']
|
30
|
+
movie = Movies(movie_id)
|
31
|
+
info = movie.info(append_to_response="alternative_titles")
|
32
|
+
return movie_from_json(json.dumps(info))
|
33
|
+
else:
|
34
|
+
raise ValueError(f"No movie found with IMDB ID {imdb_id}")
|
35
|
+
except Exception as e:
|
36
|
+
raise e
|
37
|
+
|
38
|
+
def search_show_by_imdb(imdb_id: str) -> Union[TmdbShow, None]:
|
39
|
+
"""
|
40
|
+
Search for a TV show using its IMDB ID.
|
41
|
+
|
42
|
+
Parameters:
|
43
|
+
imdb_id (str): The IMDB ID of the TV show.
|
44
|
+
|
45
|
+
Returns:
|
46
|
+
Show: A Show object containing all the details of the TV show.
|
47
|
+
None: If the TV show is not found or an error occurs.
|
48
|
+
|
49
|
+
Example:
|
50
|
+
>>> search_show_by_imdb('tt0944947')
|
51
|
+
Show(id=1399, name='Game of Thrones', overview='Seven noble families fight for control of the mythical land of Westeros. Friction between the houses leads to full-scale war. All while a very ancient evil awakens in the farthest north. Amidst the war, a neglected military order of misfits, the Night\'s Watch, is all that stands between the realms of men and icy horrors beyond.', first_air_date='2011-04-17', ...)
|
52
|
+
"""
|
53
|
+
tmdbsimple.API_KEY = os.getenv("TMDB_API_KEY")
|
54
|
+
|
55
|
+
try:
|
56
|
+
find = Find(imdb_id)
|
57
|
+
response = find.info(external_source='imdb_id')
|
58
|
+
if response['tv_results']:
|
59
|
+
show_id = response['tv_results'][0]['id']
|
60
|
+
show = TV(show_id)
|
61
|
+
info = show.info(append_to_response="alternative_titles,external_ids")
|
62
|
+
return show_from_json(json.dumps(info))
|
63
|
+
else:
|
64
|
+
raise ValueError(f"No TV show found with IMDB ID {imdb_id}")
|
65
|
+
except Exception as e:
|
66
|
+
raise e
|
67
|
+
|
68
|
+
|
69
|
+
def get_season_by_show_id(tmdb_id: int, season: int) -> TmdbSeason:
|
70
|
+
tmdbsimple.API_KEY = os.getenv("TMDB_API_KEY")
|
71
|
+
|
72
|
+
try:
|
73
|
+
tv = TV_Seasons(tv_id=tmdb_id, season_number=season)
|
74
|
+
response = tv.info()
|
75
|
+
return TmdbSeason.from_dict(response)
|
76
|
+
except Exception as e:
|
77
|
+
raise e
|
78
|
+
|
79
|
+
def get_all_seasons_by_imdb_id(imdb_id: str) -> List[TmdbSeason]:
|
80
|
+
show = search_show_by_imdb(imdb_id=imdb_id)
|
81
|
+
results = []
|
82
|
+
for season in show.seasons:
|
83
|
+
season_info = get_season_by_show_id(tmdb_id=show.id, season=season.season_number)
|
84
|
+
results.append(season_info)
|
85
|
+
return results
|
File without changes
|
@@ -0,0 +1,257 @@
|
|
1
|
+
from dataclasses import dataclass, field
|
2
|
+
from typing import List, Optional, Dict
|
3
|
+
from dataclasses_json import dataclass_json, Undefined
|
4
|
+
import json
|
5
|
+
|
6
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
7
|
+
@dataclass
|
8
|
+
class Alias:
|
9
|
+
language: Optional[str] = None
|
10
|
+
name: Optional[str] = None
|
11
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
12
|
+
|
13
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
14
|
+
@dataclass
|
15
|
+
class Artwork:
|
16
|
+
height: Optional[int] = None
|
17
|
+
id: Optional[int] = None
|
18
|
+
image: Optional[str] = None
|
19
|
+
includesText: Optional[bool] = None
|
20
|
+
language: Optional[str] = None
|
21
|
+
score: Optional[int] = None
|
22
|
+
thumbnail: Optional[str] = None
|
23
|
+
type: Optional[int] = None
|
24
|
+
width: Optional[int] = None
|
25
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
26
|
+
|
27
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
28
|
+
@dataclass
|
29
|
+
class Award:
|
30
|
+
id: Optional[int] = None
|
31
|
+
name: Optional[str] = None
|
32
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
33
|
+
|
34
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
35
|
+
@dataclass
|
36
|
+
class Character:
|
37
|
+
aliases: Optional[List[Alias]] = None
|
38
|
+
episode: Optional[dict] = None
|
39
|
+
episodeId: Optional[int] = None
|
40
|
+
id: Optional[int] = None
|
41
|
+
image: Optional[str] = None
|
42
|
+
isFeatured: Optional[bool] = None
|
43
|
+
movieId: Optional[int] = None
|
44
|
+
movie: Optional[dict] = None
|
45
|
+
name: Optional[str] = None
|
46
|
+
nameTranslations: Optional[List[str]] = None
|
47
|
+
overviewTranslations: Optional[List[str]] = None
|
48
|
+
peopleId: Optional[int] = None
|
49
|
+
personImgURL: Optional[str] = None
|
50
|
+
peopleType: Optional[str] = None
|
51
|
+
seriesId: Optional[int] = None
|
52
|
+
series: Optional[dict] = None
|
53
|
+
sort: Optional[int] = None
|
54
|
+
tagOptions: Optional[List[dict]] = None
|
55
|
+
type: Optional[int] = None
|
56
|
+
url: Optional[str] = None
|
57
|
+
personName: Optional[str] = None
|
58
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
59
|
+
|
60
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
61
|
+
@dataclass
|
62
|
+
class Company:
|
63
|
+
activeDate: Optional[str] = None
|
64
|
+
aliases: Optional[List[Alias]] = None
|
65
|
+
country: Optional[str] = None
|
66
|
+
id: Optional[int] = None
|
67
|
+
inactiveDate: Optional[str] = None
|
68
|
+
name: Optional[str] = None
|
69
|
+
nameTranslations: Optional[List[str]] = None
|
70
|
+
overviewTranslations: Optional[List[str]] = None
|
71
|
+
primaryCompanyType: Optional[int] = None
|
72
|
+
slug: Optional[str] = None
|
73
|
+
parentCompany: Optional[dict] = None
|
74
|
+
tagOptions: Optional[List[dict]] = None
|
75
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
76
|
+
|
77
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
78
|
+
@dataclass
|
79
|
+
class ContentRating:
|
80
|
+
id: Optional[int] = None
|
81
|
+
name: Optional[str] = None
|
82
|
+
description: Optional[str] = None
|
83
|
+
country: Optional[str] = None
|
84
|
+
contentType: Optional[str] = None
|
85
|
+
order: Optional[int] = None
|
86
|
+
fullName: Optional[str] = None
|
87
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
88
|
+
|
89
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
90
|
+
@dataclass
|
91
|
+
class FirstRelease:
|
92
|
+
country: Optional[str] = None
|
93
|
+
date: Optional[str] = None
|
94
|
+
detail: Optional[str] = None
|
95
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
96
|
+
|
97
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
98
|
+
@dataclass
|
99
|
+
class Genre:
|
100
|
+
id: Optional[int] = None
|
101
|
+
name: Optional[str] = None
|
102
|
+
slug: Optional[str] = None
|
103
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
104
|
+
|
105
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
106
|
+
@dataclass
|
107
|
+
class Inspiration:
|
108
|
+
id: Optional[int] = None
|
109
|
+
type: Optional[str] = None
|
110
|
+
type_name: Optional[str] = None
|
111
|
+
url: Optional[str] = None
|
112
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
113
|
+
|
114
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
115
|
+
@dataclass
|
116
|
+
class ListData:
|
117
|
+
aliases: Optional[List[Alias]] = None
|
118
|
+
id: Optional[int] = None
|
119
|
+
image: Optional[str] = None
|
120
|
+
imageIsFallback: Optional[bool] = None
|
121
|
+
isOfficial: Optional[bool] = None
|
122
|
+
name: Optional[str] = None
|
123
|
+
nameTranslations: Optional[List[str]] = None
|
124
|
+
overview: Optional[str] = None
|
125
|
+
overviewTranslations: Optional[List[str]] = None
|
126
|
+
remoteIds: Optional[List[dict]] = None
|
127
|
+
tags: Optional[List[dict]] = None
|
128
|
+
score: Optional[int] = None
|
129
|
+
url: Optional[str] = None
|
130
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
131
|
+
|
132
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
133
|
+
@dataclass
|
134
|
+
class ProductionCountry:
|
135
|
+
id: Optional[int] = None
|
136
|
+
country: Optional[str] = None
|
137
|
+
name: Optional[str] = None
|
138
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
139
|
+
|
140
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
141
|
+
@dataclass
|
142
|
+
class Release:
|
143
|
+
country: Optional[str] = None
|
144
|
+
date: Optional[str] = None
|
145
|
+
detail: Optional[str] = None
|
146
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
147
|
+
|
148
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
149
|
+
@dataclass
|
150
|
+
class RemoteId:
|
151
|
+
id: Optional[str] = None
|
152
|
+
type: Optional[int] = None
|
153
|
+
sourceName: Optional[str] = None
|
154
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
155
|
+
|
156
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
157
|
+
@dataclass
|
158
|
+
class Status:
|
159
|
+
id: Optional[int] = None
|
160
|
+
keepUpdated: Optional[bool] = None
|
161
|
+
name: Optional[str] = None
|
162
|
+
recordType: Optional[str] = None
|
163
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
164
|
+
|
165
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
166
|
+
@dataclass
|
167
|
+
class Studio:
|
168
|
+
id: Optional[int] = None
|
169
|
+
name: Optional[str] = None
|
170
|
+
parentStudio: Optional[int] = None
|
171
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
172
|
+
|
173
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
174
|
+
@dataclass
|
175
|
+
class TagOption:
|
176
|
+
helpText: Optional[str] = None
|
177
|
+
id: Optional[int] = None
|
178
|
+
name: Optional[str] = None
|
179
|
+
tag: Optional[int] = None
|
180
|
+
tagName: Optional[str] = None
|
181
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
182
|
+
|
183
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
184
|
+
@dataclass
|
185
|
+
class Trailer:
|
186
|
+
id: Optional[int] = None
|
187
|
+
language: Optional[str] = None
|
188
|
+
name: Optional[str] = None
|
189
|
+
url: Optional[str] = None
|
190
|
+
runtime: Optional[int] = None
|
191
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
192
|
+
|
193
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
194
|
+
@dataclass
|
195
|
+
class Translation:
|
196
|
+
aliases: Optional[List[str]] = None
|
197
|
+
isAlias: Optional[bool] = None
|
198
|
+
isPrimary: Optional[bool] = None
|
199
|
+
language: Optional[str] = None
|
200
|
+
name: Optional[str] = None
|
201
|
+
overview: Optional[str] = None
|
202
|
+
tagline: Optional[str] = None
|
203
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
204
|
+
|
205
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
206
|
+
@dataclass
|
207
|
+
class SubtitleLanguage:
|
208
|
+
language: Optional[str] = None
|
209
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
210
|
+
|
211
|
+
@dataclass_json(undefined=Undefined.EXCLUDE)
|
212
|
+
@dataclass
|
213
|
+
class TvdbMovie:
|
214
|
+
aliases: Optional[List[Alias]] = None
|
215
|
+
artworks: Optional[List[Artwork]] = None
|
216
|
+
audioLanguages: Optional[List[str]] = None
|
217
|
+
awards: Optional[List[Award]] = None
|
218
|
+
boxOffice: Optional[str] = None
|
219
|
+
boxOfficeUS: Optional[str] = None
|
220
|
+
budget: Optional[str] = None
|
221
|
+
characters: Optional[List[Character]] = None
|
222
|
+
companies: Optional[dict] = None
|
223
|
+
contentRatings: Optional[List[ContentRating]] = None
|
224
|
+
first_release: Optional[FirstRelease] = None
|
225
|
+
genres: Optional[List[Genre]] = None
|
226
|
+
id: Optional[int] = None
|
227
|
+
image: Optional[str] = None
|
228
|
+
inspirations: Optional[List[Inspiration]] = None
|
229
|
+
lastUpdated: Optional[str] = None
|
230
|
+
lists: Optional[List[ListData]] = None
|
231
|
+
name: Optional[str] = None
|
232
|
+
nameTranslations: Optional[List[str]] = None
|
233
|
+
originalCountry: Optional[str] = None
|
234
|
+
originalLanguage: Optional[str] = None
|
235
|
+
overviewTranslations: Optional[List[str]] = None
|
236
|
+
production_countries: Optional[List[ProductionCountry]] = None
|
237
|
+
releases: Optional[List[Release]] = None
|
238
|
+
remoteIds: Optional[List[RemoteId]] = None
|
239
|
+
runtime: Optional[int] = None
|
240
|
+
score: Optional[int] = None
|
241
|
+
slug: Optional[str] = None
|
242
|
+
spoken_languages: Optional[List[str]] = None
|
243
|
+
status: Optional[Status] = None
|
244
|
+
studios: Optional[List[Studio]] = None
|
245
|
+
subtitleLanguages: Optional[List[SubtitleLanguage]] = None
|
246
|
+
tagOptions: Optional[List[TagOption]] = None
|
247
|
+
trailers: Optional[List[Trailer]] = None
|
248
|
+
translations: Optional[dict] = None
|
249
|
+
year: Optional[str] = None
|
250
|
+
_catchall: Dict[str, str] = field(default_factory=dict)
|
251
|
+
|
252
|
+
|
253
|
+
def movie_from_json(json_str: str) -> TvdbMovie:
|
254
|
+
return TvdbMovie.from_json(json_str)
|
255
|
+
|
256
|
+
def show_from_json():
|
257
|
+
pass
|