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.
107 lines
3.1 KiB
Python
107 lines
3.1 KiB
Python
#! /usr/bin/python3
|
|
|
|
import os, logging, click
|
|
|
|
from ffx.file_properties import FileProperties
|
|
from ffx.ffx_controller import FfxController
|
|
|
|
from ffx.database import databaseContext
|
|
|
|
from ffx.test.helper import createMediaTestFile
|
|
|
|
from ffx.test.scenario import Scenario
|
|
|
|
|
|
@click.group()
|
|
@click.pass_context
|
|
@click.option('-v', '--verbose', type=int, default=0, help='Set verbosity of output')
|
|
@click.option("--dry-run", is_flag=True, default=False)
|
|
def ffx(ctx, verbose, dry_run):
|
|
"""FFX"""
|
|
|
|
ctx.obj = {}
|
|
ctx.obj['database'] = databaseContext(databasePath=None)
|
|
ctx.obj['dry_run'] = dry_run
|
|
|
|
ctx.obj['verbosity'] = verbose
|
|
|
|
# Critical 50
|
|
# Error 40
|
|
# Warning 30
|
|
# Info 20
|
|
# Debug 10
|
|
fileLogVerbosity = max(40 - verbose * 10, 10)
|
|
consoleLogVerbosity = max(20 - verbose * 10, 10)
|
|
|
|
homeDir = os.path.expanduser("~")
|
|
ffxLogDir = os.path.join(homeDir, '.local', 'var', 'log')
|
|
if not os.path.exists(ffxLogDir):
|
|
os.makedirs(ffxLogDir)
|
|
ffxLogFilePath = os.path.join(ffxLogDir, 'ffx.tests.log')
|
|
|
|
ctx.obj['logger'] = logging.getLogger('FFX Tests')
|
|
ctx.obj['logger'].setLevel(logging.DEBUG)
|
|
|
|
ctx.obj['report_logger'] = logging.getLogger('FFX Test Result')
|
|
ctx.obj['report_logger'].setLevel(logging.INFO)
|
|
|
|
ffxFileHandler = logging.FileHandler(ffxLogFilePath)
|
|
ffxFileHandler.setLevel(fileLogVerbosity)
|
|
ffxConsoleHandler = logging.StreamHandler()
|
|
ffxConsoleHandler.setLevel(consoleLogVerbosity)
|
|
|
|
if os.path.isfile('ffx_test_report.log'):
|
|
os.unlink('ffx_test_report.log')
|
|
ffxTestReportFileHandler = logging.FileHandler('ffx_test_report.log')
|
|
|
|
fileFormatter = logging.Formatter(
|
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
ffxFileHandler.setFormatter(fileFormatter)
|
|
consoleFormatter = logging.Formatter(
|
|
'%(message)s')
|
|
ffxConsoleHandler.setFormatter(consoleFormatter)
|
|
reportFormatter = logging.Formatter(
|
|
'%(message)s')
|
|
ffxTestReportFileHandler.setFormatter(reportFormatter)
|
|
|
|
ctx.obj['logger'].addHandler(ffxConsoleHandler)
|
|
ctx.obj['logger'].addHandler(ffxFileHandler)
|
|
|
|
ctx.obj['report_logger'].addHandler(ffxConsoleHandler)
|
|
ctx.obj['report_logger'].addHandler(ffxTestReportFileHandler)
|
|
|
|
|
|
# Another subcommand
|
|
@ffx.command()
|
|
@click.pass_context
|
|
def run(ctx):
|
|
"""Run ffx test sequences"""
|
|
|
|
ctx.obj['logger'].info('Starting FFX test runs')
|
|
|
|
for scenarioIdentifier in Scenario.list():
|
|
|
|
scenario = Scenario.getClassReference(scenarioIdentifier)(ctx.obj)
|
|
|
|
ctx.obj['logger'].info(f"Running scenario {scenarioIdentifier}")
|
|
|
|
scenario.run()
|
|
|
|
|
|
@ffx.command()
|
|
@click.pass_context
|
|
@click.argument('paths', nargs=-1)
|
|
def dupe(ctx, paths):
|
|
|
|
existingSourcePaths = [p for p in paths if os.path.isfile(p) and p.split('.')[-1] in FfxController.INPUT_FILE_EXTENSIONS]
|
|
|
|
for sourcePath in existingSourcePaths:
|
|
|
|
sourceFileProperties = FileProperties(ctx.obj, sourcePath)
|
|
sourceMediaDescriptor = sourceFileProperties.getMediaDescriptor()
|
|
|
|
createMediaTestFile(sourceMediaDescriptor, baseName='dupe')
|
|
|
|
if __name__ == '__main__':
|
|
ffx()
|