"""
Concrete :class:`~.TrackerConfigBase` subclass for PTP
"""
import base64
from ... import utils
from .. import base
from . import metadata
PtpImagehost = utils.types.Imagehost(
disallowed=(
# NOTE: imgbox is only allowed with thumbnailed image links.
('imgbox', 'rfximg')
if utils.is_running_in_development_environment() else
('dummy', 'imgbox', 'rfximg')
),
)
[docs]
class PtpReleaseType(str):
def __new__(cls, text):
for type, regex in metadata.types.items():
if regex.search(text):
return super().__new__(cls, type)
raise utils.argtypes.ArgumentTypeError(f'Invalid type: {text}')
[docs]
class PtpTrackerConfig(base.TrackerConfigBase):
base_url: base.config.base_url(
base64.b64decode('aHR0cHM6Ly9wYXNzdGhlcG9wY29ybi5tZQ==').decode('ascii'),
)
username: base.config.username('')
password: base.config.password('')
cookies_filepath: base.config.cookies_filepath('')
announce_url: base.config.announce_url('')
image_host: base.config.image_host(
PtpImagehost,
default=('ptpimg', 'freeimage'),
)
screenshots_from_movie: base.config.screenshots_count(
default=3,
min=3,
max=10,
description='How many screenshots to make for single-video uploads.',
)
screenshots_from_episode: base.config.screenshots_count(
default=2,
min=2,
max=10,
description='How many screenshots to make per video for multi-video uploads.',
)
exclude: base.config.exclude(
base.exclude_regexes.checksums,
base.exclude_regexes.garbage,
base.exclude_regexes.images,
base.exclude_regexes.nfo,
base.exclude_regexes.samples,
)
confirm: base.config.confirm('no')
cli_arguments = {
'submit': {
('--subtitles', '--su'): {
'help': (
'Comma-separated list of subtitle language codes.\n'
'Use this if subtitles are hardcoded or missing language tags.'
),
'metavar': 'LANGUAGES',
'type': utils.types.ListOf(
item_type=utils.argtypes.subtitle,
separator=',',
),
},
('--hardcoded-subtitles', '--hs'): {
'help': 'Release is trumpable because of hardcoded subtitles',
'action': 'store_true',
},
('--no-english-subtitles', '--nes'): {
'help': (
'Whether release contains no English audio and no English subtitles.\n'
'This is autodetected reliably if all audio and subtitle tracks have '
'a correct language tag. If not, you are asked interactively.\n'
'Subtitle languages are detected in *.idx/sub, VIDEO_TS trees, '
'BDMV trees and *.srt/ssa/ass/vtt by language code in the file name, e.g. '
'"Foo.en.srt".'
),
'metavar': 'BOOL',
'type': utils.argtypes.bool_or_none,
},
('--not-main-movie', '--nmm'): {
'help': 'Upload ONLY contains extras, Rifftrax, Workprints',
'action': 'store_true',
},
('--personal-rip', '--pr'): {
'help': 'Tag submission as your own encode',
'action': 'store_true',
},
('--poster', '--po'): {
'help': 'Path or URL to movie poster',
},
('--trailer', '--tr'): {
'help': 'YouTube trailer URL',
},
('--nfo',): {
'help': 'Path to NFO file (supersedes any *.nfo file found in the release directory)',
},
('--imdb', '--im'): {
'help': 'IMDb ID or URL',
'type': utils.argtypes.webdb_id('imdb'),
},
('--source', '--so'): {
'help': (
'Original source of this release\n'
+ 'Should vaguely match: '
+ ', '.join(metadata.sources)
),
},
('--type', '--ty'): {
'help': (
'General category of this release\n'
+ 'Must vaguely match: '
+ ', '.join(metadata.types)
),
'type': PtpReleaseType,
},
('--screenshots-count', '--ssc'): {
'help': 'How many screenshots to make per video file',
'type': utils.argtypes.make_integer(min=1, max=10),
},
('--screenshots', '--ss'): {
'help': (
'Path(s) to existing screenshot file(s)\n'
'Directories are searched recursively.\n'
'More screenshots are created if necessary.'
),
'nargs': '+',
'action': 'extend',
'type': utils.argtypes.files_with_extension('png'),
'metavar': 'SCREENSHOT',
},
('--upload-token', '--ut'): {
'help': 'Upload token from staff',
},
('--only-description', '--od'): {
'help': 'Only generate description (do not submit)',
'action': 'store_true',
'group': 'generate-metadata',
},
},
}