def test_otree_and_django_version(self, dget_version, oget_version): actual = cli.otree_and_django_version() expected = 'oTree: foo - Django: faa' self.assertTrue(dget_version.called) self.assertTrue(oget_version.called) self.assertEqual(actual, expected)
def handle(self, **options): test_labels = options["session_name"] if options['verbosity'] == 0: level = logging.ERROR elif options['verbosity'] == 1: level = logging.WARNING elif options['verbosity'] == 2: level = logging.INFO else: # 3 level = logging.DEBUG options['verbosity'] = (options['verbosity'] if options['verbosity'] > 2 else 1) logging.basicConfig(level=level) logging.getLogger("otree").setLevel(level) runner.logger.setLevel(level) client.logger.setLevel(level) coverage = options["coverage"] preserve_data = options["export"] or options["save"] test_runner = runner.OTreeExperimentTestRunner(**options) if coverage: with runner.covering(test_labels) as coverage_report: failures, data = test_runner.run_tests( test_labels, preserve_data=preserve_data) else: failures, data = test_runner.run_tests(test_labels, preserve_data=preserve_data) if coverage: logger.info("Coverage Report") if coverage in [COVERAGE_CONSOLE, COVERAGE_ALL]: coverage_report.report() if coverage in [COVERAGE_HTML, COVERAGE_ALL]: html_coverage_results_dir = '_coverage_results' coverage_report.html_report( directory=html_coverage_results_dir) msg = ("See '{}/index.html' for detailed results." ).format(html_coverage_results_dir) logger.info(msg) if preserve_data: now = datetime.datetime.now() export_path = now.strftime('_bots_%b%d_%Hh%Mm%S.%f')[:-5] + 's' os.makedirs(export_path) metadata = dict(options) metadata.update({ "timestamp": now.isoformat(), "versions": otree_and_django_version(), "failures": failures, "error": bool(failures) }) sizes = {} for session_name, session_data in data.items(): session_data = session_data or "" sizes[session_name] = len(session_data.splitlines()) fname = "{}.csv".format(session_name) fpath = os.path.join(export_path, fname) with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(session_data) metainfo = "\n".join( ["{}: {}".format(k, v) for k, v in metadata.items()] + ["sizes:"] + ["\t{}: {}".format(k, v) for k, v in sizes.items()] + [""]) fpath = os.path.join(export_path, "meta.txt") with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(metainfo) logger.info('Exported CSV to folder "{}"'.format(export_path)) if failures: sys.exit(bool(failures))
def handle(self, **options): test_labels = options["session_name"] options['verbosity'] = int(options.get('verbosity')) if options['verbosity'] < 3: logging.basicConfig(level=logging.WARNING) logging.getLogger("otree").setLevel(logging.WARNING) runner.logger.setLevel(logging.WARNING) client.logger.setLevel(logging.WARNING) coverage = options["coverage"] exportdata_path = options["exportdata_path"] if exportdata_path and os.path.isdir(exportdata_path): msg = "Directory '{}' already exists".format(exportdata_path) raise IOError(msg) preserve_data = bool(exportdata_path) test_runner = runner.OTreeExperimentTestRunner(**options) if coverage: with runner.covering(test_labels) as coverage_report: failures, data = test_runner.run_tests( test_labels, preserve_data=preserve_data) else: failures, data = test_runner.run_tests( test_labels, preserve_data=preserve_data) if coverage: logger.info("Coverage Report") if coverage in [COVERAGE_CONSOLE, COVERAGE_ALL]: coverage_report.report() if coverage in [COVERAGE_HTML, COVERAGE_ALL]: html_coverage_results_dir = '_coverage_results' coverage_report.html_report( directory=html_coverage_results_dir) msg = ("See '{}/index.html' for detailed results.").format( html_coverage_results_dir) logger.info(msg) if preserve_data: os.makedirs(exportdata_path) metadata = dict(options) metadata.update({ "timestamp": datetime.datetime.now().isoformat(), "versions": otree_and_django_version(), "failures": failures, "error": bool(failures)}) sizes = {} for session_name, session_data in data.items(): session_data = session_data or "" sizes[session_name] = len(session_data.splitlines()) fname = "{}.csv".format(session_name) fpath = os.path.join(exportdata_path, fname) with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(session_data) metainfo = "\n".join( ["{}: {}".format(k, v) for k, v in metadata.items()] + ["sizes:"] + ["\t{}: {}".format(k, v) for k, v in sizes.items()] + [""]) fpath = os.path.join(exportdata_path, "meta.txt") with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(metainfo) if failures: sys.exit(bool(failures))
def handle(self, **options): session_config_names = options["session_name"] if not session_config_names: # default to all session configs session_config_names = SESSION_CONFIGS_DICT.keys() if options['verbosity'] == 0: level = logging.ERROR elif options['verbosity'] == 1: level = logging.WARNING elif options['verbosity'] == 2: level = logging.INFO else: # 3 level = logging.DEBUG options['verbosity'] = ( options['verbosity'] if options['verbosity'] > 2 else 1) logging.basicConfig(level=level) logging.getLogger("otree").setLevel(level) runner.logger.setLevel(level) client.logger.setLevel(level) export_path = options["export"] or options["save"] preserve_data = bool(export_path) test_runner = runner.OTreeExperimentTestRunner(**options) coverage = options["coverage"] if coverage: with runner.covering(session_config_names) as coverage_report: failures, data = test_runner.run_tests( session_config_names, preserve_data=preserve_data) else: failures, data = test_runner.run_tests( session_config_names, preserve_data=preserve_data) if coverage: logger.info("Coverage Report") if coverage in [COVERAGE_CONSOLE, COVERAGE_ALL]: coverage_report.report() if coverage in [COVERAGE_HTML, COVERAGE_ALL]: html_coverage_results_dir = '_coverage_results' coverage_report.html_report( directory=html_coverage_results_dir) msg = ("See '{}/index.html' for detailed results.").format( html_coverage_results_dir) logger.info(msg) if preserve_data: now = datetime.datetime.now() if export_path == 'auto_name': export_path = now.strftime('_bots_%b%d_%Hh%Mm%S.%f')[:-5] + 's' if os.path.isdir(export_path): msg = "Directory '{}' already exists".format(export_path) raise IOError(msg) os.makedirs(export_path) metadata = dict(options) metadata.update({ "timestamp": now.isoformat(), "versions": otree_and_django_version(), "failures": failures, "error": bool(failures)}) sizes = {} for session_name, session_data in data.items(): session_data = session_data or "" sizes[session_name] = len(session_data.splitlines()) fname = "{}.csv".format(session_name) fpath = os.path.join(export_path, fname) with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(session_data) metainfo = "\n".join( ["{}: {}".format(k, v) for k, v in metadata.items()] + ["sizes:"] + ["\t{}: {}".format(k, v) for k, v in sizes.items()] + [""]) fpath = os.path.join(export_path, "meta.txt") with codecs.open(fpath, "w", encoding="utf8") as fp: fp.write(metainfo) logger.info('Exported CSV to folder "{}"'.format(export_path)) else: logger.info('Tip: Run this command with the --export flag' ' to save the data generated by bots.') if failures: sys.exit(bool(failures))