Source code for upsies.trackers.ptp.metadata

"""
Hardcoded PTP metadata from upload.php
"""

import re

from ... import utils

types = {
    'Feature Film': re.compile(r'^(?i:(?:feature|).?film|movie)$'),
    'Short Film': re.compile(r'^(?i:short.?(?:film|))$'),
    'Miniseries': re.compile(r'^(?i:(?:mini.?|)series|season|tv)$'),
    'Stand-up Comedy': re.compile(r'^(?i:stand.?up.?comedy|stand.?up|comedy)$'),
    'Live Performance': re.compile(r'(?i:live.?performance|live|performance)$'),
    'Movie Collection': re.compile(r'(?i:movie.?collection|collection)$'),
}


sources = {
    'Blu-ray': re.compile(r'(?i:blu-?ray|bd(?:25|50|66|100))'),  # (UHD) BluRay|BD(25|50|66|100) (Remux)
    'DVD': re.compile(r'^(?i:dvd)'),  # DVD(Rip|5|9|...)
    'WEB': re.compile(r'^(?i:web)'),  # WEB(-DL|Rip)
    'HD-DVD': re.compile(r'^(?i:hd-?dvd)$'),
    'HDTV': re.compile(r'^(?i:hd-?tv)$'),
    'TV': re.compile(r'^(?i:(?:sd-?|)tv)'),  # TV(Rip|...)
    'VHS': re.compile(r'^(?i:vhs)'),  # VHS(Rip|...)
}


codecs = {
    # NOTE: We must check "source" before "video_format" because BD* contains H.264 or x264.
    'DVD5': lambda release: release.source == 'DVD5',
    'DVD9': lambda release: release.source == 'DVD9',
    'BD25': lambda release: release.source == 'BD25',
    'BD50': lambda release: release.source == 'BD50',
    'BD66': lambda release: release.source == 'BD66',
    'BD100': lambda release: release.source == 'BD100',
    'XviD': lambda release: release.video_format == 'XviD',
    'DivX': lambda release: release.video_format == 'DivX',
    'H.264': lambda release: release.video_format == 'H.264',
    'x264': lambda release: release.video_format == 'x264',
    'H.265': lambda release: release.video_format == 'H.265',
    'x265': lambda release: release.video_format == 'x265',
}


containers = {
    'AVI': lambda release: release.container == 'avi',
    'MPG': lambda release: release.container == 'mpg',
    'MKV': lambda release: release.container == 'mkv',
    # NOTE: MP4 is only not allowed for new uploads.
    'VOB IFO': lambda release: release.container == 'VIDEO_TS',
    'ISO': lambda release: release.container == 'iso',
    'm2ts': lambda release: release.container == 'BDMV',
}


resolutions = {
    'NTSC': lambda release: release.dvd_resolution == 'NTSC',
    'PAL': lambda release: release.dvd_resolution == 'PAL',
    '480p': lambda release: release.resolution == '480p',
    '576p': lambda release: release.resolution == '576p',
    '720p': lambda release: release.resolution == '720p',
    '1080i': lambda release: release.resolution == '1080i',
    '1080p': lambda release: release.resolution == '1080p',
    '2160p': lambda release: release.resolution == '2160p',
}


# NOTE: The order of the dictionaries and their elements are copied from
#       upload.php. They should be submitted in the same order as listed here.
editions = {
    'collection.criterion': 'The Criterion Collection',
    'collection.masters': 'Masters of Cinema',
    'collection.warner': 'Warner Archive Collection',

    'edition.dc': "Director's Cut",
    'edition.extended': 'Extended Edition',
    'edition.rifftrax': 'Rifftrax',
    'edition.theatrical': 'Theatrical Cut',
    'edition.uncut': 'Uncut',
    'edition.unrated': 'Unrated',

    'feature.remux': 'Remux',
    'feature.2in1': '2in1',
    'feature.2disc': '2-Disc Set',
    'feature.3d_anaglyph': '3D Anaglyph',
    'feature.3d_full_sbs': '3D Full SBS',
    'feature.3d_half_ou': '3D Half OU',
    'feature.3D_half_sbs': '3D Half SBS',
    'feature.4krestoration': '4K Restoration',
    'feature.10bit': '10-bit',
    'feature.extras': 'Extras',
    'feature.4kremaster': '4K Remaster',
    'feature.2d3d_edition': '2D/3D Edition',
    'feature.dtsx': 'DTS:X',
    'feature.dolby_atmos': 'Dolby Atmos',
    'feature.dolby_vision': 'Dolby Vision',
    'feature.hdr10': 'HDR10',
    'feature.hdr10+': 'HDR10+',
    'feature.dual_audio': 'Dual Audio',
    'feature.english_dub': 'English Dub',
    'feature.commentary': 'With Commentary',
    'feature.open_matte': 'Open Matte',
}


subtitles = {
    # Special codes
    'No Subtitles': '44',
    'en (forced)': '50',

    # TODO: No idea what intertitles are exactly and how to detect them.
    # 'English Intertitles': '51',

    # Regular languages
    'ar': '22',     # Arabic
    'bg': '29',     # Bulgarian
    'zh': '14',     # Chinese
    'hr': '23',     # Croatian
    'cs': '30',     # Czech
    'da': '10',     # Danish
    'nl': '9',      # Dutch
    'en': '3',      # English
    'et': '38',     # Estonian
    'fi': '15',     # Finnish
    'fr': '5',      # French
    'de': '6',      # German
    'el': '26',     # Greek
    'he': '40',     # Hebrew
    'hi': '41',     # Hindi
    'hu': '24',     # Hungarian
    'is': '28',     # Icelandic
    'id': '47',     # Indonesian
    'it': '16',     # Italian
    'ja': '8',      # Japanese
    'ko': '19',     # Korean
    'lv': '37',     # Latvian
    'lt': '39',     # Lithuanian
    'no': '12',     # Norwegian
    'fa': '52',     # Persian
    'pl': '17',     # Polish
    'pt': '21',     # Portuguese
    'pt-BR': '49',  # Brazilian Port.
    'ro': '13',     # Romanian
    'ru': '7',      # Russian
    'sr': '31',     # Serbian
    'sk': '42',     # Slovak
    'sl': '43',     # Slovenian
    'es': '4',      # Spanish
    'sv': '11',     # Swedish
    'th': '20',     # Thai
    'tr': '18',     # Turkish
    'uk': '34',     # Ukrainian
    'vi': '25',     # Vietnamese
}


[docs] class TrumpableReason(utils.PrettyEnum): """ Reason why a release is trumpable An instance's :attr:`value` is the value expected by the API. An instance's string representation should be human-readable and pretty. """ NO_ENGLISH_SUBTITLES = 14 HARDCODED_SUBTITLES = 4
[docs] class ArtistImportance(utils.PrettyEnum): """ Purpose of a person in a movie An instance's :attr:`value` is the value expected by the API. An instance's string representation should be human-readable and pretty. """ ACTOR = 5 DIRECTOR = 1 WRITER = 2 PRODUCER = 3 COMPOSER = 4 CINEMATOGRAPHER = 6