diff --git a/Varken/helpers.py b/Varken/helpers.py index 57afbab..eeda689 100644 --- a/Varken/helpers.py +++ b/Varken/helpers.py @@ -3,340 +3,12 @@ import time import tarfile import hashlib import geoip2.database -from typing import NamedTuple from json.decoder import JSONDecodeError from os.path import abspath, join from requests.exceptions import InvalidSchema, SSLError from urllib.request import urlretrieve -class TVShow(NamedTuple): - seriesId: int = None - episodeFileId: int = None - seasonNumber: int = None - episodeNumber: int = None - title: str = None - airDate: str = None - airDateUtc: str = None - overview: str = None - episodeFile: dict = None - hasFile: bool = None - monitored: bool = None - unverifiedSceneNumbering: bool = None - absoluteEpisodeNumber: int = None - series: dict = None - id: int = None - - -class Movie(NamedTuple): - title: str = None - alternativeTitles: list = None - secondaryYearSourceId: int = None - sortTitle: str = None - sizeOnDisk: int = None - status: str = None - overview: str = None - inCinemas: str = None - images: list = None - downloaded: bool = None - year: int = None - secondaryYear: str = None - hasFile: bool = None - youTubeTrailerId: str = None - studio: str = None - path: str = None - profileId: int = None - pathState: str = None - monitored: bool = None - minimumAvailability: str = None - isAvailable: bool = None - folderName: str = None - runtime: int = None - lastInfoSync: str = None - cleanTitle: str = None - imdbId: str = None - tmdbId: int = None - titleSlug: str = None - genres: list = None - tags: list = None - added: str = None - ratings: dict = None - movieFile: dict = None - qualityProfileId: int = None - physicalRelease: str = None - physicalReleaseNote: str = None - website: str = None - id: int = None - - -class Queue(NamedTuple): - movie: dict = None - series: dict = None - episode: dict = None - quality: dict = None - size: float = None - title: str = None - sizeleft: float = None - timeleft: str = None - estimatedCompletionTime: str = None - status: str = None - trackedDownloadStatus: str = None - statusMessages: list = None - downloadId: str = None - protocol: str = None - id: int = None - - -class SonarrServer(NamedTuple): - id: int = None - url: str = None - api_key: str = None - verify_ssl: bool = False - missing_days: int = 0 - missing_days_run_seconds: int = 30 - future_days: int = 0 - future_days_run_seconds: int = 30 - queue: bool = False - queue_run_seconds: int = 30 - - -class RadarrServer(NamedTuple): - id: int = None - url: str = None - api_key: str = None - verify_ssl: bool = False - queue: bool = False - queue_run_seconds: int = 30 - get_missing: bool = False - get_missing_run_seconds: int = 30 - - -class OmbiServer(NamedTuple): - id: int = None - url: str = None - api_key: str = None - verify_ssl: bool = False - request_type_counts: bool = False - request_type_run_seconds: int = 30 - request_total_counts: bool = False - request_total_run_seconds: int = 30 - - -class TautulliServer(NamedTuple): - id: int = None - url: str = None - fallback_ip: str = None - api_key: str = None - verify_ssl: bool = None - get_activity: bool = False - get_activity_run_seconds: int = 30 - get_sessions: bool = False - get_sessions_run_seconds: int = 30 - - -class InfluxServer(NamedTuple): - url: str = 'localhost' - port: int = 8086 - username: str = 'root' - password: str = 'root' - - -class OmbiRequestCounts(NamedTuple): - pending: int = 0 - approved: int = 0 - available: int = 0 - - -class TautulliStream(NamedTuple): - rating: str = None - transcode_width: str = None - labels: list = None - stream_bitrate: str = None - bandwidth: str = None - optimized_version: int = None - video_language: str = None - parent_rating_key: str = None - rating_key: str = None - platform_version: str = None - transcode_hw_decoding: int = None - thumb: str = None - title: str = None - video_codec_level: str = None - tagline: str = None - last_viewed_at: str = None - audio_sample_rate: str = None - user_rating: str = None - platform: str = None - collections: list = None - location: str = None - transcode_container: str = None - audio_channel_layout: str = None - local: str = None - stream_subtitle_format: str = None - stream_video_ref_frames: str = None - transcode_hw_encode_title: str = None - stream_container_decision: str = None - audience_rating: str = None - full_title: str = None - ip_address: str = None - subtitles: int = None - stream_subtitle_language: str = None - channel_stream: int = None - video_bitrate: str = None - is_allow_sync: int = None - stream_video_bitrate: str = None - summary: str = None - stream_audio_decision: str = None - aspect_ratio: str = None - audio_bitrate_mode: str = None - transcode_hw_decode_title: str = None - stream_audio_channel_layout: str = None - deleted_user: int = None - library_name: str = None - art: str = None - stream_video_resolution: str = None - video_profile: str = None - sort_title: str = None - stream_video_codec_level: str = None - stream_video_height: str = None - year: str = None - stream_duration: str = None - stream_audio_channels: str = None - video_language_code: str = None - transcode_key: str = None - transcode_throttled: int = None - container: str = None - stream_audio_bitrate: str = None - user: str = None - selected: int = None - product_version: str = None - subtitle_location: str = None - transcode_hw_requested: int = None - video_height: str = None - state: str = None - is_restricted: int = None - email: str = None - stream_container: str = None - transcode_speed: str = None - video_bit_depth: str = None - stream_audio_sample_rate: str = None - grandparent_title: str = None - studio: str = None - transcode_decision: str = None - video_width: str = None - bitrate: str = None - machine_id: str = None - originally_available_at: str = None - video_frame_rate: str = None - synced_version_profile: str = None - friendly_name: str = None - audio_profile: str = None - optimized_version_title: str = None - platform_name: str = None - stream_video_language: str = None - keep_history: int = None - stream_audio_codec: str = None - stream_video_codec: str = None - grandparent_thumb: str = None - synced_version: int = None - transcode_hw_decode: str = None - user_thumb: str = None - stream_video_width: str = None - height: str = None - stream_subtitle_decision: str = None - audio_codec: str = None - parent_title: str = None - guid: str = None - audio_language_code: str = None - transcode_video_codec: str = None - transcode_audio_codec: str = None - stream_video_decision: str = None - user_id: int = None - transcode_height: str = None - transcode_hw_full_pipeline: int = None - throttled: str = None - quality_profile: str = None - width: str = None - live: int = None - stream_subtitle_forced: int = None - media_type: str = None - video_resolution: str = None - stream_subtitle_location: str = None - do_notify: int = None - video_ref_frames: str = None - stream_subtitle_language_code: str = None - audio_channels: str = None - stream_audio_language_code: str = None - optimized_version_profile: str = None - relay: int = None - duration: str = None - rating_image: str = None - is_home_user: int = None - is_admin: int = None - ip_address_public: str = None - allow_guest: int = None - transcode_audio_channels: str = None - stream_audio_channel_layout_: str = None - media_index: str = None - stream_video_framerate: str = None - transcode_hw_encode: str = None - grandparent_rating_key: str = None - original_title: str = None - added_at: str = None - banner: str = None - bif_thumb: str = None - parent_media_index: str = None - live_uuid: str = None - audio_language: str = None - stream_audio_bitrate_mode: str = None - username: str = None - subtitle_decision: str = None - children_count: str = None - updated_at: str = None - player: str = None - subtitle_format: str = None - file: str = None - file_size: str = None - session_key: str = None - id: str = None - subtitle_container: str = None - genres: list = None - stream_video_language_code: str = None - indexes: int = None - video_decision: str = None - stream_audio_language: str = None - writers: list = None - actors: list = None - progress_percent: str = None - audio_decision: str = None - subtitle_forced: int = None - profile: str = None - product: str = None - view_offset: str = None - type: str = None - audience_rating_image: str = None - audio_bitrate: str = None - section_id: str = None - stream_subtitle_codec: str = None - subtitle_codec: str = None - video_codec: str = None - device: str = None - stream_video_bit_depth: str = None - video_framerate: str = None - transcode_hw_encoding: int = None - transcode_protocol: str = None - shared_libraries: list = None - stream_aspect_ratio: str = None - content_rating: str = None - session_id: str = None - directors: list = None - parent_thumb: str = None - subtitle_language_code: str = None - transcode_progress: int = None - subtitle_language: str = None - stream_subtitle_container: str = None - - def geoip_download(): tar_dbfile = abspath(join('.', 'data', 'GeoLite2-City.tar.gz')) url = 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz' diff --git a/Varken/iniparser.py b/Varken/iniparser.py index dad64e5..6820bd2 100644 --- a/Varken/iniparser.py +++ b/Varken/iniparser.py @@ -2,7 +2,7 @@ import sys import configparser from sys import exit from os.path import join, exists -from Varken.helpers import OmbiServer, TautulliServer, SonarrServer, InfluxServer, RadarrServer +from Varken.structures import SonarrServer, RadarrServer, OmbiServer, TautulliServer, InfluxServer class INIParser(object): diff --git a/Varken/ombi.py b/Varken/ombi.py index 50cbca5..87de969 100644 --- a/Varken/ombi.py +++ b/Varken/ombi.py @@ -2,7 +2,8 @@ from requests import Session, Request from datetime import datetime, timezone from Varken.logger import logging -from Varken.helpers import OmbiRequestCounts, connection_handler +from Varken.helpers import connection_handler +from Varken.structures import OmbiRequestCounts class OmbiAPI(object): diff --git a/Varken/radarr.py b/Varken/radarr.py index 1ec3e1e..ba7f050 100644 --- a/Varken/radarr.py +++ b/Varken/radarr.py @@ -2,7 +2,8 @@ from requests import Session, Request from datetime import datetime, timezone from Varken.logger import logging -from Varken.helpers import Movie, Queue, hashit, connection_handler +from Varken.helpers import hashit, connection_handler +from Varken.structures import Movie, Queue class RadarrAPI(object): diff --git a/Varken/sonarr.py b/Varken/sonarr.py index cbcab0f..bcda5e5 100644 --- a/Varken/sonarr.py +++ b/Varken/sonarr.py @@ -2,7 +2,8 @@ from requests import Session, Request from datetime import datetime, timezone, date, timedelta from Varken.logger import logging -from Varken.helpers import TVShow, Queue, hashit, connection_handler +from Varken.helpers import hashit, connection_handler +from Varken.structures import Queue, TVShow class SonarrAPI(object): diff --git a/Varken/structures.py b/Varken/structures.py new file mode 100644 index 0000000..d089c35 --- /dev/null +++ b/Varken/structures.py @@ -0,0 +1,328 @@ +from typing import NamedTuple + + +class Queue(NamedTuple): + movie: dict = None + series: dict = None + episode: dict = None + quality: dict = None + size: float = None + title: str = None + sizeleft: float = None + timeleft: str = None + estimatedCompletionTime: str = None + status: str = None + trackedDownloadStatus: str = None + statusMessages: list = None + downloadId: str = None + protocol: str = None + id: int = None + + +class SonarrServer(NamedTuple): + id: int = None + url: str = None + api_key: str = None + verify_ssl: bool = False + missing_days: int = 0 + missing_days_run_seconds: int = 30 + future_days: int = 0 + future_days_run_seconds: int = 30 + queue: bool = False + queue_run_seconds: int = 30 + + +class RadarrServer(NamedTuple): + id: int = None + url: str = None + api_key: str = None + verify_ssl: bool = False + queue: bool = False + queue_run_seconds: int = 30 + get_missing: bool = False + get_missing_run_seconds: int = 30 + + +class OmbiServer(NamedTuple): + id: int = None + url: str = None + api_key: str = None + verify_ssl: bool = False + request_type_counts: bool = False + request_type_run_seconds: int = 30 + request_total_counts: bool = False + request_total_run_seconds: int = 30 + + +class TautulliServer(NamedTuple): + id: int = None + url: str = None + fallback_ip: str = None + api_key: str = None + verify_ssl: bool = None + get_activity: bool = False + get_activity_run_seconds: int = 30 + get_sessions: bool = False + get_sessions_run_seconds: int = 30 + + +class InfluxServer(NamedTuple): + url: str = 'localhost' + port: int = 8086 + username: str = 'root' + password: str = 'root' + + +class OmbiRequestCounts(NamedTuple): + pending: int = 0 + approved: int = 0 + available: int = 0 + + +class TautulliStream(NamedTuple): + rating: str = None + transcode_width: str = None + labels: list = None + stream_bitrate: str = None + bandwidth: str = None + optimized_version: int = None + video_language: str = None + parent_rating_key: str = None + rating_key: str = None + platform_version: str = None + transcode_hw_decoding: int = None + thumb: str = None + title: str = None + video_codec_level: str = None + tagline: str = None + last_viewed_at: str = None + audio_sample_rate: str = None + user_rating: str = None + platform: str = None + collections: list = None + location: str = None + transcode_container: str = None + audio_channel_layout: str = None + local: str = None + stream_subtitle_format: str = None + stream_video_ref_frames: str = None + transcode_hw_encode_title: str = None + stream_container_decision: str = None + audience_rating: str = None + full_title: str = None + ip_address: str = None + subtitles: int = None + stream_subtitle_language: str = None + channel_stream: int = None + video_bitrate: str = None + is_allow_sync: int = None + stream_video_bitrate: str = None + summary: str = None + stream_audio_decision: str = None + aspect_ratio: str = None + audio_bitrate_mode: str = None + transcode_hw_decode_title: str = None + stream_audio_channel_layout: str = None + deleted_user: int = None + library_name: str = None + art: str = None + stream_video_resolution: str = None + video_profile: str = None + sort_title: str = None + stream_video_codec_level: str = None + stream_video_height: str = None + year: str = None + stream_duration: str = None + stream_audio_channels: str = None + video_language_code: str = None + transcode_key: str = None + transcode_throttled: int = None + container: str = None + stream_audio_bitrate: str = None + user: str = None + selected: int = None + product_version: str = None + subtitle_location: str = None + transcode_hw_requested: int = None + video_height: str = None + state: str = None + is_restricted: int = None + email: str = None + stream_container: str = None + transcode_speed: str = None + video_bit_depth: str = None + stream_audio_sample_rate: str = None + grandparent_title: str = None + studio: str = None + transcode_decision: str = None + video_width: str = None + bitrate: str = None + machine_id: str = None + originally_available_at: str = None + video_frame_rate: str = None + synced_version_profile: str = None + friendly_name: str = None + audio_profile: str = None + optimized_version_title: str = None + platform_name: str = None + stream_video_language: str = None + keep_history: int = None + stream_audio_codec: str = None + stream_video_codec: str = None + grandparent_thumb: str = None + synced_version: int = None + transcode_hw_decode: str = None + user_thumb: str = None + stream_video_width: str = None + height: str = None + stream_subtitle_decision: str = None + audio_codec: str = None + parent_title: str = None + guid: str = None + audio_language_code: str = None + transcode_video_codec: str = None + transcode_audio_codec: str = None + stream_video_decision: str = None + user_id: int = None + transcode_height: str = None + transcode_hw_full_pipeline: int = None + throttled: str = None + quality_profile: str = None + width: str = None + live: int = None + stream_subtitle_forced: int = None + media_type: str = None + video_resolution: str = None + stream_subtitle_location: str = None + do_notify: int = None + video_ref_frames: str = None + stream_subtitle_language_code: str = None + audio_channels: str = None + stream_audio_language_code: str = None + optimized_version_profile: str = None + relay: int = None + duration: str = None + rating_image: str = None + is_home_user: int = None + is_admin: int = None + ip_address_public: str = None + allow_guest: int = None + transcode_audio_channels: str = None + stream_audio_channel_layout_: str = None + media_index: str = None + stream_video_framerate: str = None + transcode_hw_encode: str = None + grandparent_rating_key: str = None + original_title: str = None + added_at: str = None + banner: str = None + bif_thumb: str = None + parent_media_index: str = None + live_uuid: str = None + audio_language: str = None + stream_audio_bitrate_mode: str = None + username: str = None + subtitle_decision: str = None + children_count: str = None + updated_at: str = None + player: str = None + subtitle_format: str = None + file: str = None + file_size: str = None + session_key: str = None + id: str = None + subtitle_container: str = None + genres: list = None + stream_video_language_code: str = None + indexes: int = None + video_decision: str = None + stream_audio_language: str = None + writers: list = None + actors: list = None + progress_percent: str = None + audio_decision: str = None + subtitle_forced: int = None + profile: str = None + product: str = None + view_offset: str = None + type: str = None + audience_rating_image: str = None + audio_bitrate: str = None + section_id: str = None + stream_subtitle_codec: str = None + subtitle_codec: str = None + video_codec: str = None + device: str = None + stream_video_bit_depth: str = None + video_framerate: str = None + transcode_hw_encoding: int = None + transcode_protocol: str = None + shared_libraries: list = None + stream_aspect_ratio: str = None + content_rating: str = None + session_id: str = None + directors: list = None + parent_thumb: str = None + subtitle_language_code: str = None + transcode_progress: int = None + subtitle_language: str = None + stream_subtitle_container: str = None + + +class TVShow(NamedTuple): + seriesId: int = None + episodeFileId: int = None + seasonNumber: int = None + episodeNumber: int = None + title: str = None + airDate: str = None + airDateUtc: str = None + overview: str = None + episodeFile: dict = None + hasFile: bool = None + monitored: bool = None + unverifiedSceneNumbering: bool = None + absoluteEpisodeNumber: int = None + series: dict = None + id: int = None + + +class Movie(NamedTuple): + title: str = None + alternativeTitles: list = None + secondaryYearSourceId: int = None + sortTitle: str = None + sizeOnDisk: int = None + status: str = None + overview: str = None + inCinemas: str = None + images: list = None + downloaded: bool = None + year: int = None + secondaryYear: str = None + hasFile: bool = None + youTubeTrailerId: str = None + studio: str = None + path: str = None + profileId: int = None + pathState: str = None + monitored: bool = None + minimumAvailability: str = None + isAvailable: bool = None + folderName: str = None + runtime: int = None + lastInfoSync: str = None + cleanTitle: str = None + imdbId: str = None + tmdbId: int = None + titleSlug: str = None + genres: list = None + tags: list = None + added: str = None + ratings: dict = None + movieFile: dict = None + qualityProfileId: int = None + physicalRelease: str = None + physicalReleaseNote: str = None + website: str = None + id: int = None \ No newline at end of file diff --git a/Varken/tautulli.py b/Varken/tautulli.py index fe2629a..b04a019 100644 --- a/Varken/tautulli.py +++ b/Varken/tautulli.py @@ -3,7 +3,8 @@ from geoip2.errors import AddressNotFoundError from requests import Session, Request from Varken.logger import logging -from Varken.helpers import TautulliStream, geo_lookup, hashit, connection_handler +from Varken.helpers import geo_lookup, hashit, connection_handler +from Varken.structures import TautulliStream class TautulliAPI(object):