ff
This commit is contained in:
@@ -7,6 +7,9 @@ class DispositionCombination2():
|
|||||||
self._logger = context['logger']
|
self._logger = context['logger']
|
||||||
self._reportLogger = context['report_logger']
|
self._reportLogger = context['report_logger']
|
||||||
|
|
||||||
|
def getIdentifier(self):
|
||||||
|
return self._combinationIdentifier
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def list():
|
def list():
|
||||||
basePath = os.path.dirname(__file__)
|
basePath = os.path.dirname(__file__)
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_2 import DispositionCombination2
|
|||||||
|
|
||||||
class DispositionCombination20(DispositionCombination2):
|
class DispositionCombination20(DispositionCombination2):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D00'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination20.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set(), # 0
|
return (set(), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_2 import DispositionCombination2
|
|||||||
|
|
||||||
class DispositionCombination21(DispositionCombination2):
|
class DispositionCombination21(DispositionCombination2):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D10'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination21.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set([TrackDisposition.DEFAULT]), # 0
|
return (set([TrackDisposition.DEFAULT]), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_2 import DispositionCombination2
|
|||||||
|
|
||||||
class DispositionCombination22(DispositionCombination2):
|
class DispositionCombination22(DispositionCombination2):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D01'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination22.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set(), # 0
|
return (set(), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_2 import DispositionCombination2
|
|||||||
|
|
||||||
class DispositionCombination23(DispositionCombination2):
|
class DispositionCombination23(DispositionCombination2):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D11'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination23.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set([TrackDisposition.DEFAULT]), # 0
|
return (set([TrackDisposition.DEFAULT]), # 0
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ class DispositionCombination3():
|
|||||||
self._logger = context['logger']
|
self._logger = context['logger']
|
||||||
self._reportLogger = context['report_logger']
|
self._reportLogger = context['report_logger']
|
||||||
|
|
||||||
|
def getIdentifier(self):
|
||||||
|
return self._combinationIdentifier
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def list():
|
def list():
|
||||||
basePath = os.path.dirname(__file__)
|
basePath = os.path.dirname(__file__)
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_3 import DispositionCombination3
|
|||||||
|
|
||||||
class DispositionCombination30(DispositionCombination3):
|
class DispositionCombination30(DispositionCombination3):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D000'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination30.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set(), # 0
|
return (set(), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_3 import DispositionCombination3
|
|||||||
|
|
||||||
class DispositionCombination31(DispositionCombination3):
|
class DispositionCombination31(DispositionCombination3):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D100'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination31.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set([TrackDisposition.DEFAULT]), # 0
|
return (set([TrackDisposition.DEFAULT]), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_3 import DispositionCombination3
|
|||||||
|
|
||||||
class DispositionCombination32(DispositionCombination3):
|
class DispositionCombination32(DispositionCombination3):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D010'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination32.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set(), # 0
|
return (set(), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_3 import DispositionCombination3
|
|||||||
|
|
||||||
class DispositionCombination33(DispositionCombination3):
|
class DispositionCombination33(DispositionCombination3):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D001'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination33.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set(), # 0
|
return (set(), # 0
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ from .disposition_combination_3 import DispositionCombination3
|
|||||||
|
|
||||||
class DispositionCombination34(DispositionCombination3):
|
class DispositionCombination34(DispositionCombination3):
|
||||||
|
|
||||||
|
COMBINATION_IDENTIFIER = 'D101'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
|
self._combinationIdentifier = DispositionCombination34.COMBINATION_IDENTIFIER
|
||||||
|
|
||||||
def getDispositionTuple(self):
|
def getDispositionTuple(self):
|
||||||
return (set([TrackDisposition.DEFAULT]), # 0
|
return (set([TrackDisposition.DEFAULT]), # 0
|
||||||
|
|||||||
@@ -32,23 +32,29 @@ class Scenario1(Scenario):
|
|||||||
# * MediaTags -> asserts
|
# * MediaTags -> asserts
|
||||||
|
|
||||||
for tci in TrackCombination.list():
|
for tci in TrackCombination.list():
|
||||||
combinationContext = self._context.copy()
|
# combinationContext = self._context.copy()
|
||||||
combinationContext['use_jellyfin'] = False
|
self._context['use_jellyfin'] = True
|
||||||
combinationContext['use_tmdb'] = False
|
self._context['use_tmdb'] = False
|
||||||
combinationContext['use_pattern'] = False
|
self._context['use_pattern'] = False
|
||||||
trackCombination = TrackCombination.getClassReference(tci)(combinationContext)
|
trackCombination = TrackCombination.getClassReference(tci)(self._context)
|
||||||
|
|
||||||
subcombinations = trackCombination.getSubcombinations()
|
subcombinations = trackCombination.getSubcombinations()
|
||||||
if not subcombinations is None:
|
if not subcombinations is None:
|
||||||
for trackDescriptors, evaluateFunc, shouldFail in subcombinations:
|
for trackDescriptors, evaluateFunc, shouldFail, combinationIdentifier in subcombinations:
|
||||||
|
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
kwargs[MediaDescriptor.CONTEXT_KEY] = self._context
|
kwargs[MediaDescriptor.CONTEXT_KEY] = self._context
|
||||||
kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = trackDescriptors
|
kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = trackDescriptors
|
||||||
|
self._logger.debug(f"src track dispositions {[d.getDispositionSet() for d in trackDescriptors]}")
|
||||||
sourceMediaDescriptor = MediaDescriptor(**kwargs)
|
sourceMediaDescriptor = MediaDescriptor(**kwargs)
|
||||||
sourceMediaDescriptor.reindexSubIndices()
|
sourceMediaDescriptor.reindexSubIndices()
|
||||||
|
# sourceMediaDescriptor.reindexIndices()
|
||||||
|
|
||||||
# Phase 1: Setup source files
|
# Phase 1: Setup source files
|
||||||
|
# TODO:
|
||||||
|
# src track dispositions [set(), set(), {<TrackDisposition.DEFAULT: {'name': 'default', 'index': 0}>}, set(), set()]
|
||||||
|
# vs
|
||||||
|
# Stream #0:4: Subtitle: ass (ssa) (default)
|
||||||
mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory)
|
mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory)
|
||||||
|
|
||||||
# Phase 2: Prepare database
|
# Phase 2: Prepare database
|
||||||
@@ -60,11 +66,14 @@ class Scenario1(Scenario):
|
|||||||
mediaFilePath,
|
mediaFilePath,
|
||||||
'--no-prompt']
|
'--no-prompt']
|
||||||
|
|
||||||
self._logger.debug(f"Scenario1.run(): sub={trackCombination.getIdentifier()} test sequence: {commandSequence}")
|
if not self._context['use_jellyfin']:
|
||||||
|
commandSequence += ['--no-jellyfin']
|
||||||
|
|
||||||
|
self._logger.debug(f"Scenario1.run(): sub={trackCombination.getIdentifier()},{combinationIdentifier} test sequence: {commandSequence}")
|
||||||
|
|
||||||
out, err, rc = executeProcess(commandSequence, directory = self._testDirectory)
|
out, err, rc = executeProcess(commandSequence, directory = self._testDirectory)
|
||||||
|
|
||||||
self._logger.debug(f"Scenario1.run(): sub={trackCombination.getIdentifier()} process returned: {rc}")
|
self._logger.debug(f"Scenario1.run(): sub={trackCombination.getIdentifier()},{combinationIdentifier} process returned: {rc}")
|
||||||
|
|
||||||
# if out:
|
# if out:
|
||||||
# self._logger.debug(f"Scenario1.run(): process output: {out}")
|
# self._logger.debug(f"Scenario1.run(): process output: {out}")
|
||||||
@@ -78,7 +87,8 @@ class Scenario1(Scenario):
|
|||||||
if rc:
|
if rc:
|
||||||
# Stuck with prompt: More than one default subtitle stream detected! Please select stream:
|
# Stuck with prompt: More than one default subtitle stream detected! Please select stream:
|
||||||
# TODO: Catch prompt is add option to fail at prompt
|
# TODO: Catch prompt is add option to fail at prompt
|
||||||
assert shouldFail, "ffmpeg run didn't fail"
|
assert shouldFail, "ffmpeg run didn't fail" if shouldFail else "ffmpeg run failed"
|
||||||
|
self._reportLogger.info(f"Scenario 1 sub={trackCombination.getIdentifier()},{combinationIdentifier} test passed")
|
||||||
else:
|
else:
|
||||||
|
|
||||||
resultFile = os.path.join(self._testDirectory, 'media.webm')
|
resultFile = os.path.join(self._testDirectory, 'media.webm')
|
||||||
@@ -98,14 +108,16 @@ class Scenario1(Scenario):
|
|||||||
|
|
||||||
# assert resultMediaTracks[2].getType() == TrackType.AUDIO, f"Stream #2 is not of type audio"
|
# assert resultMediaTracks[2].getType() == TrackType.AUDIO, f"Stream #2 is not of type audio"
|
||||||
|
|
||||||
|
self._logger.debug(f"tgt track dispositions {[d.getDispositionSet() for d in resultMediaDescriptor.getSubtitleTracks()]}")
|
||||||
|
|
||||||
# assert dispositions
|
# assert dispositions
|
||||||
evaluateFunc(resultMediaTracks)
|
evaluateFunc(resultMediaTracks)
|
||||||
|
|
||||||
self._reportLogger.info(f"Scenario 1 sub={trackCombination.getIdentifier()} test passed")
|
self._reportLogger.info(f"Scenario 1 sub={trackCombination.getIdentifier()},{combinationIdentifier} test passed")
|
||||||
|
|
||||||
except AssertionError as ae:
|
except AssertionError as ae:
|
||||||
|
|
||||||
self._reportLogger.error(f"Scenario 1 sub={trackCombination.getIdentifier()} test failed ({ae})")
|
self._reportLogger.error(f"Scenario 1 sub={trackCombination.getIdentifier()},{combinationIdentifier} test failed ({ae})")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,4 +61,5 @@ class TrackCombination3(TrackCombination):
|
|||||||
trackDescriptors = self.getTrackDescriptors(dispositionTuple)
|
trackDescriptors = self.getTrackDescriptors(dispositionTuple)
|
||||||
evaluateFunc = dispositionCombination.evaluateTrackDescriptors # assert function
|
evaluateFunc = dispositionCombination.evaluateTrackDescriptors # assert function
|
||||||
shouldFail = dispositionCombination.shouldFail() # true if this combination should fail
|
shouldFail = dispositionCombination.shouldFail() # true if this combination should fail
|
||||||
yield (trackDescriptors, evaluateFunc, shouldFail)
|
dispositionIdentifier = dispositionCombination.getIdentifier()
|
||||||
|
yield (trackDescriptors, evaluateFunc, shouldFail, dispositionIdentifier)
|
||||||
|
|||||||
Reference in New Issue
Block a user