From 03a1a4fc96a4d919c1dedead159dedae7c8bac6e Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 22 Jun 2019 20:18:06 +0300 Subject: Change: move fable.py to fable/__init__.py --- fable/__init__.py | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 fable/__init__.py (limited to 'fable') diff --git a/fable/__init__.py b/fable/__init__.py new file mode 100644 index 0000000..bee5ce4 --- /dev/null +++ b/fable/__init__.py @@ -0,0 +1,134 @@ +# Note that the API of this module is guaranteed to change. + +import argparse +import logging +import os +import sys +import shutil +import tempfile + + +class Context: + + def __init__(self): + self._vars = {} + + def get(self, key, default=None): + return self._vars.get(key, default) + + def __getitem__(self, key): + return self._vars[key] + + def __setitem__(self, key, value): + self._vars[key] = value + + +class Settingses: + + def __init__(self): + self._scenarios = [] + + def add_scenario(self, name): + self._scenarios.append(name) + + def is_wanted_scenario(self, name): + return (not self._scenarios or + any(name.casefold() == w.casefold() for w in self._scenarios)) + + +class Datadir: + + def __init__(self): + self._dirname = None + self._ours = False + + def get(self): + if self._dirname is None: + self._dirname = tempfile.mkdtemp() + logging.info('Created temporary directory %s', self._dirname) + self._ours = True + return self._dirname + + def set(self, dirname): + if dirname is not None: + self._dirname = os.path.abspath(dirname) + if not os.path.exists(self._dirname): + os.mkdir(self._dirname) + self._ours = False + + def cleanup(self): + if self._ours: + logging.debug('Removing %s', self._dirname) + shutil.rmtree(self._dirname) + + +class Run: + + def __init__(self): + self._name = None + self._context = None + self._srcdir = None + self._settingses = Settingses() + self._datadir = None + self._tempdir = None + self._parse_options() + + def _parse_options(self): + p = argparse.ArgumentParser() + p.add_argument('--log', default='/dev/null') + p.add_argument('--tempdir') + p.add_argument( + '--scenario', '-s', action='append', dest='scenarios', default=[]) + args = p.parse_args() + self._setup_logging(args.log) + self._tempdir = args.tempdir + for s in args.scenarios: + self._settingses.add_scenario(s) + + def _setup_logging(self, filename): + format = '%(asctime)s %(levelname)s %(message)s' + logging.basicConfig( + filename=filename, format=format, level=logging.DEBUG) + logging.info('test program starts =============') + + def get_context(self): + return self._context + + def start(self, name): + if not self._settingses.is_wanted_scenario(name): + logging.info('Skipping unwanted scenario %s', name) + return False + + logging.info('Start scenario %s', name) + self._context = Context() + self._name = name + self._srcdir = os.getcwd() + self._datadir = Datadir() + self._datadir.set(self._tempdir) + dirname = tempfile.mkdtemp(dir=self._datadir.get()) + os.chdir(dirname) + return True + + def end(self): + logging.info('OK %s', self._name) + sys.stdout.write('OK: {}\n'.format(self._name)) + os.chdir(self._srcdir) + self._datadir.cleanup() + + +def assertTrue(a): + if not a: + raise Exception( + 'expected {!r} to be true, but was disappointed'.format(a, b)) + + +def assertEqual(a, b): + if a != b: + raise Exception( + 'expected {!r} == {!r}, but was disappointed'.format(a, b)) + + +def assertNotEqual(a, b): + if a == b: + raise Exception( + 'expected {!r} != {!r}, but was disappointed'.format(a, b)) -- cgit v1.2.1