예제 #1
0
def run_yaml_test(path, options={}):
    yaml_path = os.path.join(yaml_tests_dir, path)

    # We are testing tests, and don't want the latter to print anything, so we temporarily deactivate stderr.
    sys.stderr = open(os.devnull, 'w')
    result = run_tests(tax_benefit_system, yaml_path, options)
    return result
예제 #2
0
def main():
    parser = build_parser()
    args = parser.parse_args()
    logging.basicConfig(level = logging.DEBUG if args.verbose else logging.WARNING, stream = sys.stdout)

    tax_benefit_system = build_tax_benefit_sytem(args.country_package, args.extensions, args.reforms)

    options = {
        'verbose': args.verbose,
        'force': args.force,
        'name_filter': args.name_filter,
        'default_relative_error_margin': args.default_relative_error_margin,
        'default_absolute_error_margin': args.default_absolute_error_margin,
        }

    tests_found = False

    for path in args.path:
        path = os.path.abspath(path)
        nb_tests = run_tests(tax_benefit_system, path, options)
        tests_found = tests_found or nb_tests > 0

    if not tests_found:
        print("No tests found!")
        sys.exit(1)

    sys.exit(0)
예제 #3
0
def main(parser=None):
    if not parser:
        parser = argparse.ArgumentParser()
        parser = build_parser(parser)

        warnings.warn(
            "The 'openfisca-run-test' command has been deprecated in favor of 'openfisca test' since version 25.0, and will be removed in the future.",
            Warning)

    args = parser.parse_args()
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.WARNING,
        stream=sys.stdout)

    tax_benefit_system = build_tax_benefit_system(args.country_package,
                                                  args.extensions,
                                                  args.reforms)

    options = {
        'verbose': args.verbose,
        'name_filter': args.name_filter,
        'only_variables': args.only_variables,
        'ignore_variables': args.ignore_variables,
    }

    paths = [os.path.abspath(path) for path in args.path]
    tests_ok = run_tests(tax_benefit_system, paths, options)

    if not tests_ok:
        sys.exit(1)
예제 #4
0
def run_yaml_test(path, options = None):
    yaml_path = os.path.join(yaml_tests_dir, path)

    if options is None:
        options = {}

    result = run_tests(tax_benefit_system, yaml_path, options)
    return result
예제 #5
0
def run_yaml_test(tax_benefit_system, path, options = None):
    yaml_path = os.path.join(yaml_tests_dir, path)

    if options is None:
        options = {}

    result = run_tests(tax_benefit_system, yaml_path, options)
    return result
예제 #6
0
def main(parser):
    args = parser.parse_args()
    logging.basicConfig(level = logging.DEBUG if args.verbose else logging.WARNING, stream = sys.stdout)

    tax_benefit_system = build_tax_benefit_system(args.country_package, args.extensions, args.reforms)

    options = {
        'pdb': args.pdb,
        'verbose': args.verbose,
        'name_filter': args.name_filter,
        'only_variables': args.only_variables,
        'ignore_variables': args.ignore_variables,
        }

    paths = [os.path.abspath(path) for path in args.path]
    sys.exit(run_tests(tax_benefit_system, paths, options))
예제 #7
0
def main(parser):
    args = parser.parse_args()
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.WARNING,
        stream=sys.stdout)

    tax_benefit_system = build_tax_benefit_system(args.country_package,
                                                  args.extensions,
                                                  args.reforms)

    options = {
        'pdb': args.pdb,
        'verbose': args.verbose,
        'name_filter': args.name_filter,
        'only_variables': args.only_variables,
        'ignore_variables': args.ignore_variables,
    }

    paths = [os.path.abspath(path) for path in args.path]
    sys.exit(run_tests(tax_benefit_system, paths, options))
예제 #8
0
def main():
    parser = build_parser()
    args = parser.parse_args()
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.WARNING,
        stream=sys.stdout)

    tax_benefit_system = build_tax_benefit_system(args.country_package,
                                                  args.extensions,
                                                  args.reforms)

    options = {
        'verbose': args.verbose,
        'name_filter': args.name_filter,
    }

    paths = map(os.path.abspath, args.path)
    tests_ok = run_tests(tax_benefit_system, paths, options)

    if not tests_ok:
        sys.exit(1)
BASELINE_TBS_LOAD_TIME = 9.10831403732
BASELINE_YAML_TESTS_TIME = 271.448431969

# Time tax benefit system loading
start_time_tbs = time.time()
tbs = CountryTaxBenefitSystem()
time_spent_tbs = time.time() - start_time_tbs

openfisca_france_dir = pkg_resources.get_distribution(
    'OpenFisca-France').location
yaml_tests_dir = os.path.join(openfisca_france_dir, 'tests',
                              'mes-aides.gouv.fr')

# Time openfisca-run-test runner
start_time_tests = time.time()
run_tests(tbs, yaml_tests_dir)
time_spent_tests = time.time() - start_time_tests


def compare_performance(baseline, test_result):
    delta = (test_result - baseline) * 100 / baseline

    if test_result > baseline * 1.2:
        logger.warning(
            "The perfomance seems to have worsen by {} %.".format(delta))
    elif test_result < baseline * 0.8:
        logger.info(
            "The performance seems to have been improved by {} %.".format(
                delta))
    else:
        logging.info("The performance seems steady ({} %).".format(delta))
BASELINE_YAML_TESTS_TIME = 271.448431969


# Time tax benefit system loading
start_time_tbs = time.time()
tbs = CountryTaxBenefitSystem()
time_spent_tbs = time.time() - start_time_tbs


openfisca_france_dir = pkg_resources.get_distribution('OpenFisca-France').location
yaml_tests_dir = os.path.join(openfisca_france_dir, 'tests', 'mes-aides.gouv.fr')


# Time openfisca-run-test runner
start_time_tests = time.time()
run_tests(tbs, yaml_tests_dir)
time_spent_tests = time.time() - start_time_tests


def compare_performance(baseline, test_result):
    delta = (test_result - baseline) * 100 / baseline

    if test_result > baseline * 1.2:
        logger.warning("The perfomance seems to have worsen by {} %.".format(delta))
    elif test_result < baseline * 0.8:
        logger.info("The performance seems to have been improved by {} %.".format(delta))
    else:
        logging.info("The performance seems steady ({} %).".format(delta))


logger.info("Generate Tax Benefit System: --- {}s seconds ---".format(time_spent_tbs))
예제 #11
0
def main():
    parser = build_parser()
    args = parser.parse_args()
    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.WARNING,
        stream=sys.stdout)

    if args.country_package:
        try:
            country_package = importlib.import_module(args.country_package)
        except:
            print(
                'ERROR: `{}` does not seem to be a valid Openfisca country package.'
                .format(args.country_package))
            sys.exit(1)
    else:
        installed_country_packages = detect_country_packages()
        if len(installed_country_packages) == 0:
            print(
                'ERROR: No country package has been detected on your environment. If your country package is installed but not detected, please use the --country_package option.'
            )
            sys.exit(1)
        country_package_name = installed_country_packages[0]
        country_package = importlib.import_module(country_package_name)
        if len(installed_country_packages) > 1:
            print(
                'WARNING: Several country packages detected : `{}`. Using `{}` by default. To use another package, please use the --country_package option.'
                .format(', '.join(installed_country_packages),
                        country_package_name))

    tax_benefit_system = country_package.CountryTaxBenefitSystem()

    if args.extensions:
        extensions = [name.strip(' ') for name in args.extensions.split(',')]
        for extension in extensions:
            tax_benefit_system.load_extension(extension)

    if args.reforms:
        reforms = [name.strip(' ') for name in args.reforms.split(',')]
        for reform_path in reforms:
            try:
                [reform_package, reform_name] = reform_path.rsplit('.', 1)
                reform_module = importlib.import_module(reform_package)
                reform = getattr(reform_module, reform_name)
                tax_benefit_system = reform(tax_benefit_system)
            except:
                print(
                    'ERROR: `{}` does not seem to be a valid Openfisca reform for `{}`.'
                    .format(reform_path, country_package.__name__))
                raise

    options = {
        'verbose': args.verbose,
        'force': args.force,
        'name_filter': args.name_filter,
        'default_relative_error_margin': args.default_relative_error_margin,
        'default_absolute_error_margin': args.default_absolute_error_margin,
    }

    tests_found = False

    for path in args.path:
        path = os.path.abspath(path)
        nb_tests = run_tests(tax_benefit_system, path, options)
        tests_found = tests_found or nb_tests > 0

    if not tests_found:
        print("No tests found!")
        sys.exit(1)

    sys.exit(0)
예제 #12
0
def test_name_filter():
    nb_tests = run_tests(tax_benefit_system,
                         yamls_tests_dir,
                         options={'name_filter': 'success'})

    assert nb_tests == 3
예제 #13
0
def test_run_tests_from_directory_fail():
    dir_path = os.path.join(yamls_tests_dir, 'directory')
    run_tests(tax_benefit_system, dir_path, options={'force': True})
예제 #14
0
def test_run_tests_from_directory():
    dir_path = os.path.join(yamls_tests_dir, 'directory')
    assert run_tests(tax_benefit_system, dir_path) == 5
예제 #15
0
def run_yaml_test(file_name, options={}):
    yaml_path = os.path.join(yamls_tests_dir, '{}.yaml'.format(file_name))
    return run_tests(tax_benefit_system, yaml_path, options)