You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
5.5 KiB
Python
160 lines
5.5 KiB
Python
import os, sys, importlib, glob, inspect, itertools
|
|
|
|
from ffx.track_type import TrackType
|
|
|
|
from ffx.track_descriptor import TrackDescriptor
|
|
from ffx.media_descriptor import MediaDescriptor
|
|
|
|
from .basename_combinator import BasenameCombinator
|
|
|
|
from .indicator_combinator import IndicatorCombinator
|
|
from .label_combinator import LabelCombinator
|
|
from .title_combinator import TitleCombinator
|
|
from .release_combinator import ReleaseCombinator
|
|
from .show_combinator import ShowCombinator
|
|
|
|
|
|
class BasenameCombinator2(BasenameCombinator):
|
|
"""show[_indicator]_group"""
|
|
|
|
VARIANT = 'B2'
|
|
|
|
# def __init__(self, SubCombinators: dict = {}, context = None):
|
|
def __init__(self, context = None):
|
|
self._context = context
|
|
self._logger = context['logger']
|
|
self._reportLogger = context['report_logger']
|
|
|
|
def getVariant(self):
|
|
return BasenameCombinator2.VARIANT
|
|
|
|
#
|
|
# SHOW_LIST = [
|
|
# 'Boruto: Naruto Next Generations (2017)',
|
|
# 'The Rising of the Shield Hero (2019)',
|
|
# 'Scrubs - Die Anfänger (2001)'
|
|
# ]
|
|
#
|
|
# RELEASE_LIST = [
|
|
# ".GerEngSub.AAC.1080pINDICATOR.WebDL.x264-Tanuki",
|
|
# ".German.AC3.DL.1080pINDICATOR.BluRay.x264-AST4u",
|
|
# "-720pINDICATOR"
|
|
# ]
|
|
|
|
|
|
def getPayload(self,
|
|
indicator = '',
|
|
label = '',
|
|
show = '',
|
|
release = ''):
|
|
|
|
if label:
|
|
basename = label
|
|
expectedBasename = label
|
|
if indicator:
|
|
basename += f"_{indicator}"
|
|
expectedBasename += f"_{indicator}"
|
|
else:
|
|
basename = show+release
|
|
expectedBasename = basename
|
|
|
|
return {'basename': basename,
|
|
'label': label,
|
|
'expectedBasename': expectedBasename}
|
|
|
|
|
|
def createAssertFunc(self,
|
|
indicator = '',
|
|
label = '',
|
|
show = '',
|
|
release = ''):
|
|
|
|
def f(testObj: dict = {}):
|
|
|
|
if not 'filenames' in testObj.keys():
|
|
raise KeyError("testObj does not contain key 'filenames'")
|
|
|
|
fNames = testObj['filenames']
|
|
|
|
assert len(fNames) == 1, "More than one result file was created"
|
|
|
|
resultFilename = fNames[0]
|
|
|
|
fTokens = resultFilename.split('.')
|
|
|
|
resultBasename = '.'.join(fTokens[:-1])
|
|
resultExtension = fTokens[-1]
|
|
|
|
if not indicator and not label:
|
|
assert resultBasename == show+release, f"Result basename is not {show+release}"
|
|
elif not indicator and label:
|
|
assert resultBasename == label, f"Result basename is not {label}"
|
|
elif indicator and not label:
|
|
assert resultBasename == show+release, f"Result basename is not {show+release}"
|
|
elif indicator and label:
|
|
assert resultBasename == f"{label}_{indicator}", f"Result basename is not {label}_{indicator}"
|
|
|
|
return f
|
|
|
|
|
|
def shouldFail(self):
|
|
return False
|
|
|
|
def getYield(self):
|
|
|
|
ic = IndicatorCombinator(self._context)
|
|
sc = ShowCombinator(self._context)
|
|
|
|
for L in LabelCombinator.getAllClassReferences():
|
|
for iy in ic.getYield():
|
|
|
|
indicator = iy['indicator']
|
|
indicatorVariant = iy['variant']
|
|
|
|
rc = ReleaseCombinator(self._context, indicator=indicator)
|
|
|
|
for sy in sc.getYield():
|
|
for ry in rc.getYield():
|
|
|
|
l = L(self._context)
|
|
|
|
show = sy['show']
|
|
showVariant = sy['variant']
|
|
|
|
release = ry['release']
|
|
releaseVariant = ry['variant']
|
|
|
|
yieldObj = {}
|
|
|
|
yieldObj['identifier'] = self.getIdentifier()
|
|
|
|
yieldObj['variants'] = [self.getVariant(),
|
|
l.getVariant(),
|
|
indicatorVariant,
|
|
showVariant,
|
|
releaseVariant]
|
|
|
|
yieldObj['payload'] = self.getPayload(indicator = indicator,
|
|
label = l.getPayload(),
|
|
show = show,
|
|
release = release)
|
|
|
|
yieldObj['assertSelectors'] = ['B', 'L', 'I', 'S', 'R']
|
|
|
|
yieldObj['assertFuncs'] = [self.createAssertFunc(indicator,
|
|
l.getPayload(),
|
|
show = show,
|
|
release = release),
|
|
l.assertFunc,
|
|
ic.assertFunc,
|
|
sc.assertFunc,
|
|
rc.assertFunc]
|
|
|
|
yieldObj['shouldFail'] = (self.shouldFail()
|
|
| l.shouldFail()
|
|
| ic.shouldFail()
|
|
| sc.shouldFail()
|
|
| rc.shouldFail())
|
|
|
|
yield yieldObj
|