Varken/varken/structures.py
2020-12-15 00:13:27 -05:00

526 lines
14 KiB
Python

from sys import version_info
from typing import NamedTuple
from logging import getLogger
logger = getLogger('temp')
# Check for python3.6 or newer to resolve erroneous typing.NamedTuple issues
if version_info < (3, 6, 2):
logger.error('Varken requires python3.6.2 or newer. You are on python%s.%s.%s - Exiting...',
version_info.major, version_info.minor, version_info.micro)
exit(1)
# Server Structures
class InfluxServer(NamedTuple):
password: str = 'root'
port: int = 8086
ssl: bool = False
url: str = 'localhost'
username: str = 'root'
verify_ssl: bool = False
class SonarrServer(NamedTuple):
api_key: str = None
future_days: int = 0
future_days_run_seconds: int = 30
id: int = None
missing_days: int = 0
missing_days_run_seconds: int = 30
queue: bool = False
queue_run_seconds: int = 30
url: str = None
verify_ssl: bool = False
class RadarrServer(NamedTuple):
api_key: str = None
get_missing: bool = False
get_missing_run_seconds: int = 30
id: int = None
queue: bool = False
queue_run_seconds: int = 30
url: str = None
verify_ssl: bool = False
class OmbiServer(NamedTuple):
api_key: str = None
id: int = None
issue_status_counts: bool = False
issue_status_run_seconds: int = 30
request_total_counts: bool = False
request_total_run_seconds: int = 30
request_type_counts: bool = False
request_type_run_seconds: int = 30
url: str = None
verify_ssl: bool = False
class TautulliServer(NamedTuple):
api_key: str = None
fallback_ip: str = None
get_activity: bool = False
get_activity_run_seconds: int = 30
get_stats: bool = False
get_stats_run_seconds: int = 30
id: int = None
url: str = None
verify_ssl: bool = None
maxmind_license_key: str = None
class SickChillServer(NamedTuple):
api_key: str = None
get_missing: bool = False
get_missing_run_seconds: int = 30
id: int = None
url: str = None
verify_ssl: bool = False
class UniFiServer(NamedTuple):
get_usg_stats_run_seconds: int = 30
id: int = None
password: str = 'ubnt'
site: str = None
url: str = 'unifi.domain.tld:8443'
username: str = 'ubnt'
usg_name: str = None
verify_ssl: bool = False
# Shared
class Queue(NamedTuple):
downloadId: str = None
episode: dict = None
estimatedCompletionTime: str = None
id: int = None
movie: dict = None
protocol: str = None
quality: dict = None
series: dict = None
size: float = None
sizeleft: float = None
status: str = None
statusMessages: list = None
timeleft: str = None
title: str = None
trackedDownloadStatus: str = None
# Ombi Structures
class OmbiRequestCounts(NamedTuple):
approved: int = 0
available: int = 0
pending: int = 0
class OmbiIssuesCounts(NamedTuple):
inProgress: int = 0
pending: int = 0
resolved: int = 0
class OmbiTVRequest(NamedTuple):
background: str = None
childRequests: list = None
denied: bool = None
deniedReason: None = None
id: int = None
imdbId: str = None
markedAsDenied: str = None
overview: str = None
posterPath: str = None
qualityOverride: None = None
releaseDate: str = None
rootFolder: None = None
status: str = None
title: str = None
totalSeasons: int = None
tvDbId: int = None
requestedByAlias: str = None
requestStatus: str = None
class OmbiMovieRequest(NamedTuple):
approved: bool = None
available: bool = None
background: str = None
canApprove: bool = None
denied: bool = None
deniedReason: None = None
digitalRelease: bool = None
digitalReleaseDate: None = None
id: int = None
imdbId: str = None
issueId: None = None
issues: None = None
markedAsApproved: str = None
markedAsAvailable: None = None
markedAsDenied: str = None
overview: str = None
posterPath: str = None
qualityOverride: int = None
released: bool = None
releaseDate: str = None
requestedDate: str = None
requestedUser: dict = None
requestedUserId: str = None
requestType: int = None
rootPathOverride: int = None
showSubscribe: bool = None
status: str = None
subscribed: bool = None
theMovieDbId: int = None
title: str = None
langCode: str = None
languageCode: str = None
requestedByAlias: str = None
requestStatus: str = None
# Sonarr
class SonarrTVShow(NamedTuple):
absoluteEpisodeNumber: int = None
airDate: str = None
airDateUtc: str = None
episodeFile: dict = None
episodeFileId: int = None
episodeNumber: int = None
hasFile: bool = None
id: int = None
lastSearchTime: str = None
monitored: bool = None
overview: str = None
sceneAbsoluteEpisodeNumber: int = None
sceneEpisodeNumber: int = None
sceneSeasonNumber: int = None
seasonNumber: int = None
series: dict = None
seriesId: int = None
title: str = None
unverifiedSceneNumbering: bool = None
# Radarr
class RadarrMovie(NamedTuple):
added: str = None
addOptions: str = None
alternativeTitles: list = None
certification: str = None
cleanTitle: str = None
downloaded: bool = None
folderName: str = None
genres: list = None
hasFile: bool = None
id: int = None
images: list = None
imdbId: str = None
inCinemas: str = None
isAvailable: bool = None
lastInfoSync: str = None
minimumAvailability: str = None
monitored: bool = None
movieFile: dict = None
overview: str = None
path: str = None
pathState: str = None
physicalRelease: str = None
physicalReleaseNote: str = None
profileId: int = None
qualityProfileId: int = None
ratings: dict = None
runtime: int = None
secondaryYear: str = None
secondaryYearSourceId: int = None
sizeOnDisk: int = None
sortTitle: str = None
status: str = None
studio: str = None
tags: list = None
title: str = None
titleSlug: str = None
tmdbId: int = None
website: str = None
year: int = None
youTubeTrailerId: str = None
# Sickchill
class SickChillTVShow(NamedTuple):
airdate: str = None
airs: str = None
episode: int = None
ep_name: str = None
ep_plot: str = None
indexerid: int = None
network: str = None
paused: int = None
quality: str = None
season: int = None
show_name: str = None
show_status: str = None
tvdbid: int = None
weekday: int = None
# Tautulli
class TautulliStream(NamedTuple):
actors: list = None
added_at: str = None
allow_guest: int = None
art: str = None
aspect_ratio: str = None
audience_rating: str = None
audience_rating_image: str = None
audio_bitrate: str = None
audio_bitrate_mode: str = None
audio_channel_layout: str = None
audio_channels: str = None
audio_codec: str = None
audio_decision: str = None
audio_language: str = None
audio_language_code: str = None
audio_profile: str = None
audio_sample_rate: str = None
bandwidth: str = None
banner: str = None
bif_thumb: str = None
bitrate: str = None
channel_icon: str = None
channel_stream: int = None
channel_title: str = None
children_count: str = None
collections: list = None
container: str = None
content_rating: str = None
current_session: str = None
date: str = None
deleted_user: int = None
device: str = None
directors: list = None
do_notify: int = None
duration: str = None
email: str = None
extra_type: str = None
file: str = None
file_size: str = None
friendly_name: str = None
full_title: str = None
genres: list = None
grandparent_guid: str = None
grandparent_rating_key: str = None
grandparent_thumb: str = None
grandparent_title: str = None
group_count: int = None
group_ids: str = None
guid: str = None
height: str = None
id: str = None
indexes: int = None
ip_address: str = None
ip_address_public: str = None
is_admin: int = None
is_allow_sync: int = None
is_home_user: int = None
is_restricted: int = None
keep_history: int = None
labels: list = None
last_viewed_at: str = None
library_name: str = None
live: int = None
live_uuid: str = None
local: str = None
location: str = None
machine_id: str = None
media_index: str = None
media_type: str = None
optimized_version: int = None
optimized_version_profile: str = None
optimized_version_title: str = None
original_title: str = None
originally_available_at: str = None
parent_guid: str = None
parent_media_index: str = None
parent_rating_key: str = None
parent_thumb: str = None
parent_title: str = None
paused_counter: int = None
percent_complete: int = None
platform: str = None
platform_name: str = None
platform_version: str = None
player: str = None
pre_tautulli: str = None
product: str = None
product_version: str = None
profile: str = None
progress_percent: str = None
quality_profile: str = None
rating: str = None
rating_image: str = None
rating_key: str = None
reference_id: int = None
relay: int = None
relayed: int = None
section_id: str = None
secure: str = None
selected: int = None
session_id: str = None
session_key: str = None
shared_libraries: list = None
sort_title: str = None
started: int = None
state: str = None
stopped: int = None
stream_aspect_ratio: str = None
stream_audio_bitrate: str = None
stream_audio_bitrate_mode: str = None
stream_audio_channel_layout: str = None
stream_audio_channel_layout_: str = None
stream_audio_channels: str = None
stream_audio_codec: str = None
stream_audio_decision: str = None
stream_audio_language: str = None
stream_audio_language_code: str = None
stream_audio_sample_rate: str = None
stream_bitrate: str = None
stream_container: str = None
stream_container_decision: str = None
stream_duration: str = None
stream_subtitle_codec: str = None
stream_subtitle_container: str = None
stream_subtitle_decision: str = None
stream_subtitle_forced: int = None
stream_subtitle_format: str = None
stream_subtitle_language: str = None
stream_subtitle_language_code: str = None
stream_subtitle_location: str = None
stream_video_bit_depth: str = None
stream_video_bitrate: str = None
stream_video_codec: str = None
stream_video_codec_level: str = None
stream_video_decision: str = None
stream_video_framerate: str = None
stream_video_full_resolution: str = None
stream_video_height: str = None
stream_video_language: str = None
stream_video_language_code: str = None
stream_video_ref_frames: str = None
stream_video_resolution: str = None
stream_video_scan_type: str = None
stream_video_width: str = None
studio: str = None
sub_type: str = None
subtitle_codec: str = None
subtitle_container: str = None
subtitle_decision: str = None
subtitle_forced: int = None
subtitle_format: str = None
subtitle_language: str = None
subtitle_language_code: str = None
subtitle_location: str = None
subtitles: int = None
summary: str = None
synced_version: int = None
synced_version_profile: str = None
tagline: str = None
throttled: str = None
thumb: str = None
title: str = None
transcode_audio_channels: str = None
transcode_audio_codec: str = None
transcode_container: str = None
transcode_decision: str = None
transcode_height: str = None
transcode_hw_decode: str = None
transcode_hw_decode_title: str = None
transcode_hw_decoding: int = None
transcode_hw_encode: str = None
transcode_hw_encode_title: str = None
transcode_hw_encoding: int = None
transcode_hw_full_pipeline: int = None
transcode_hw_requested: int = None
transcode_key: str = None
transcode_progress: int = None
transcode_protocol: str = None
transcode_speed: str = None
transcode_throttled: int = None
transcode_video_codec: str = None
transcode_width: str = None
type: str = None
updated_at: str = None
user: str = None
user_id: int = None
user_rating: str = None
user_thumb: str = None
username: str = None
video_bit_depth: str = None
video_bitrate: str = None
video_codec: str = None
video_codec_level: str = None
video_decision: str = None
video_frame_rate: str = None
video_framerate: str = None
video_full_resolution: str = None
video_height: str = None
video_language: str = None
video_language_code: str = None
video_profile: str = None
video_ref_frames: str = None
video_resolution: str = None
video_scan_type: str = None
video_width: str = None
view_offset: str = None
watched_status: int = None
width: str = None
writers: list = None
year: str = None
# Lidarr
class LidarrQueue(NamedTuple):
artistId: int = None
albumId: int = None
language: dict = None
quality: dict = None
size: float = None
title: str = None
timeleft: str = None
sizeleft: float = None
status: str = None
trackedDownloadStatus: str = None
statusMessages: list = None
downloadId: str = None
protocol: str = None
downloadClient: str = None
indexer: str = None
outputPath: str = None
downloadForced: bool = None
id: int = None
class LidarrAlbum(NamedTuple):
title: str = None
disambiguation: str = None
overview: str = None
artistId: int = None
foreignAlbumId: str = None
monitored: bool = None
anyReleaseOk: bool = None
profileId: int = None
duration: int = None
albumType: str = None
secondaryTypes: list = None
mediumCount: int = None
ratings: dict = None
releaseDate: str = None
releases: list = None
genres: list = None
media: list = None
artist: dict = None
images: list = None
links: list = None
statistics: dict = {}
id: int = None