def test(): dir_path = os.path.join(os.path.dirname(__file__), 'formulas') for filename in sorted(os.listdir(dir_path)): if not filename.endswith('.yaml'): continue filename_core = os.path.splitext(filename)[0] with open(os.path.join(dir_path, filename)) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error conv.check((tests, error)) # Generate an error. for test in tests: test, error = scenarios.make_json_or_python_to_test(tax_benefit_system)(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error conv.check((test, error)) # Generate an error. if test.get(u'ignore', False): continue yield check, test.get('name') or filename_core, unicode(test['scenario'].period), test
def test_legislation_xml_file(): legislation_tree = xml.etree.ElementTree.parse(model.PARAM_FILE) legislation_xml_json = conv.check(legislationsxml.xml_legislation_to_json)(legislation_tree.getroot(), state = conv.default_state) legislation_xml_json, errors = legislationsxml.validate_node_xml_json(legislation_xml_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_xml_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) _, legislation_json = legislationsxml.transform_node_xml_json_to_json(legislation_xml_json) legislation_json, errors = legislations.validate_node_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) dated_legislation_json = legislations.generate_dated_legislation_json(legislation_json, datetime.date(2006, 1, 1)) # raise ValueError(unicode(json.dumps(dated_legislation_json, ensure_ascii = False, indent = 2)).encode('utf-8')) compact_legislation = legislations.compact_dated_node_json(dated_legislation_json)
def check_decomposition_xml_file(file_path): decomposition_tree = xml.etree.ElementTree.parse(os.path.join(file_path)) decomposition_xml_json = conv.check(decompositionsxml.xml_decomposition_to_json)(decomposition_tree.getroot(), state = conv.default_state) decomposition_xml_json, errors = decompositionsxml.make_validate_node_xml_json(base.tax_benefit_system)( decomposition_xml_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(decomposition_xml_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(decomposition_xml_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(decomposition_xml_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) decomposition_json = decompositionsxml.transform_node_xml_json_to_json(decomposition_xml_json) decomposition_json, errors = decompositions.make_validate_node_json(base.tax_benefit_system)( decomposition_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(decomposition_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(decomposition_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(decomposition_json, ensure_ascii = False, indent = 2)), ).encode('utf-8'))
def _parse_yaml_file(tax_benefit_system, yaml_path): filename = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(tests, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) for test in tests: test, error = scenarios.make_json_or_python_to_test( tax_benefit_system = tax_benefit_system )(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}\nYaml test content: \n{}\n".format( yaml_path, error, yaml.dump(test, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) yield yaml_path, test.get('name') or filename, unicode(test['scenario'].period), test
def test(force = False, name_filter = None, options_by_path = None): if isinstance(name_filter, str): name_filter = name_filter.decode('utf-8') if options_by_path is None: options_by_path = options_by_dir for path, options in options_by_path.iteritems(): if not force and options.get('ignore', False): log.info(u'Ignoring {}'.format(path)) continue if not os.path.exists(path): log.warning(u'Skipping missing {}'.format(path)) continue if os.path.isdir(path): yaml_paths = [ os.path.join(path, filename) for filename in sorted(os.listdir(path)) if filename.endswith('.yaml') ] else: yaml_paths = [path] for yaml_path in yaml_paths: filename_core = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(tests, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) for test in tests: test, error = scenarios.make_json_or_python_to_test(get_tax_benefit_system(options.get('reform')), default_absolute_error_margin = options['default_absolute_error_margin'])(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(test, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) if not force and test.get(u'ignore', False): continue if name_filter is not None and name_filter not in filename_core \ and name_filter not in (test.get('name', u'')) \ and name_filter not in (test.get('keywords', [])): continue checker = check_any_period if options['accept_other_period'] else check yield checker, test.get('name') or filename_core, unicode(test['scenario'].period), test, force
def check_legislation_xml_file(year): legislation_tree = conv.check(legislationsxml.make_xml_legislation_info_list_to_xml_element(False))( TaxBenefitSystem.legislation_xml_info_list, state = conv.default_state) legislation_xml_json = conv.check(legislationsxml.xml_legislation_to_json)( legislation_tree, state = conv.default_state, ) legislation_xml_json, errors = legislationsxml.validate_legislation_xml_json(legislation_xml_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_xml_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) _, legislation_json = legislationsxml.transform_node_xml_json_to_json(legislation_xml_json) legislation_json, errors = legislations.validate_legislation_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) # Create tax_benefit system only now, to be able to debug XML validation errors in above code. tax_benefit_system = TaxBenefitSystem() if tax_benefit_system.preprocess_legislation is not None: legislation_json = tax_benefit_system.preprocess_legislation(legislation_json) legislation_json = legislations.generate_dated_legislation_json(legislation_json, year) legislation_json, errors = legislations.validate_dated_legislation_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode( 'utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) compact_legislation = legislations.compact_dated_node_json(legislation_json) assert compact_legislation is not None
def _parse_test_file(tax_benefit_system, yaml_path): filename = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: try: tests = yaml.load(yaml_file, Loader=Loader) except yaml.scanner.ScannerError: log.error("{} is not a valid YAML file".format(yaml_path).encode('utf-8')) raise tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, 'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(tests, Dumper=Dumper, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) for test in tests: current_tax_benefit_system = tax_benefit_system if test.get('reforms'): reforms = test.pop('reforms') if not isinstance(reforms, list): reforms = [reforms] for reform_path in reforms: current_tax_benefit_system = current_tax_benefit_system.apply_reform(reform_path) try: test, error = scenarios.make_json_or_python_to_test( tax_benefit_system = current_tax_benefit_system )(test) except Exception: log.error("{} is not a valid OpenFisca test file".format(yaml_path).encode('utf-8')) raise if error is not None: embedding_error = conv.embed_error(test, 'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}\nYaml test content: \n{}\n".format( yaml_path, error, yaml.dump(test, Dumper=Dumper, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) yield yaml_path, test.get('name') or filename, to_unicode(test['scenario'].period), test
def check_legislation_xml_file(year): legislation_tree = xml.etree.ElementTree.parse(base.TaxBenefitSystem.legislation_xml_file_path) legislation_xml_json = conv.check(legislationsxml.xml_legislation_to_json)(legislation_tree.getroot(), state = conv.default_state) legislation_xml_json, errors = legislationsxml.validate_legislation_xml_json(legislation_xml_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_xml_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) _, legislation_json = legislationsxml.transform_node_xml_json_to_json(legislation_xml_json) legislation_json, errors = legislations.validate_legislation_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) legislation_json = legislations.generate_dated_legislation_json(legislation_json, year) legislation_json, errors = legislations.validate_dated_legislation_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode( 'utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) compact_legislation = legislations.compact_dated_node_json(legislation_json) # Create tax_benefit system only now, to be able to debug XML validation errors in above code. if base.tax_benefit_system.preprocess_compact_legislation is not None: base.tax_benefit_system.preprocess_compact_legislation(compact_legislation)
def test(current_options_by_dir = None, force = False, name_filter = None): if current_options_by_dir is None: current_options_by_dir = options_by_dir for dir, options in sorted(current_options_by_dir.iteritems()): if not force and options.get('ignore', False): log.info(u'Ignoring directory: {}'.format(dir)) continue if not os.path.isdir(dir): log.warning(u'Skipping missing directory: {}'.format(dir)) continue if isinstance(name_filter, str): name_filter = name_filter.decode('utf-8') for filename in sorted(os.listdir(dir)): if not filename.endswith('.yaml'): continue filename_core = os.path.splitext(filename)[0] with open(os.path.join(dir, filename)) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error conv.check((tests, error)) # Generate an error. for test in tests: test, error = scenarios.make_json_or_python_to_test(get_tax_benefit_system(options.get('reform')), default_absolute_error_margin = options['default_absolute_error_margin'])(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error conv.check((test, error)) # Generate an error. if not force and test.get(u'ignore', False): continue if name_filter is not None and name_filter not in filename_core \ and name_filter not in (test.get('name', u'')) \ and name_filter not in (test.get('keywords', [])): continue checker = check_any_period if options['accept_other_period'] else check yield checker, test.get('name') or filename_core, unicode(test['scenario'].period), test, force
def test(force = False, name_filter = None): if isinstance(name_filter, str): name_filter = name_filter.decode('utf-8') yaml_paths = [ os.path.join(source_file_dir_name, filename) for filename in sorted(os.listdir(source_file_dir_name)) if filename.endswith('.yaml') ] for yaml_path in yaml_paths: filename_core = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(tests, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) for test in tests: test, error = scenarios.make_json_or_python_to_test( tax_benefit_system = tax_benefit_system, default_absolute_error_margin = default_absolute_error_margin, )(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}\nYaml test content: \n{}\n".format( yaml_path, error, yaml.dump(test, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) if not force and test.get(u'ignore', False): continue if name_filter is not None and name_filter not in filename_core \ and name_filter not in (test.get('name', u'')) \ and name_filter not in (test.get('keywords', [])): continue yield check, yaml_path, test.get('name') or filename_core, unicode(test['scenario'].period), test, force
def test_legislation_xml_file(): legislation_tree = xml.etree.ElementTree.parse(model.PARAM_FILE) legislation_xml_json = conv.check(legislationsxml.xml_legislation_to_json)(legislation_tree.getroot(), state = conv.default_state) legislation_xml_json, errors = legislationsxml.validate_legislation_xml_json(legislation_xml_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_xml_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_xml_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) _, legislation_json = legislationsxml.transform_node_xml_json_to_json(legislation_xml_json) legislation_json, errors = legislations.validate_legislation_json(legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) dated_legislation_json = legislations.generate_dated_legislation_json(legislation_json, datetime.date(2006, 1, 1)) dated_legislation_json, errors = legislations.validate_dated_legislation_json(dated_legislation_json, state = conv.default_state) if errors is not None: errors = conv.embed_error(dated_legislation_json, 'errors', errors) if errors is None: raise ValueError(unicode(json.dumps(dated_legislation_json, ensure_ascii = False, indent = 2)).encode( 'utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode(json.dumps(errors, ensure_ascii = False, indent = 2, sort_keys = True)), unicode(json.dumps(dated_legislation_json, ensure_ascii = False, indent = 2)), ).encode('utf-8')) compact_legislation = legislations.compact_dated_node_json(dated_legislation_json)
def check_legislation_xml_file(year): legislation_tree = conv.check( legislationsxml.make_xml_legislation_info_list_to_xml_element(False))( TaxBenefitSystem.legislation_xml_info_list, state=conv.default_state) legislation_xml_json = conv.check(legislationsxml.xml_legislation_to_json)( legislation_tree, state=conv.default_state, ) legislation_xml_json, errors = legislationsxml.validate_legislation_xml_json( legislation_xml_json, state=conv.default_state) if errors is not None: errors = conv.embed_error(legislation_xml_json, 'errors', errors) if errors is None: raise ValueError( unicode( json.dumps(legislation_xml_json, ensure_ascii=False, indent=2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode( json.dumps(errors, ensure_ascii=False, indent=2, sort_keys=True)), unicode( json.dumps(legislation_xml_json, ensure_ascii=False, indent=2)), ).encode('utf-8')) _, legislation_json = legislationsxml.transform_node_xml_json_to_json( legislation_xml_json) legislation_json, errors = legislations.validate_legislation_json( legislation_json, state=conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError( unicode( json.dumps(legislation_json, ensure_ascii=False, indent=2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode( json.dumps(errors, ensure_ascii=False, indent=2, sort_keys=True)), unicode(json.dumps(legislation_json, ensure_ascii=False, indent=2)), ).encode('utf-8')) # Create tax_benefit system only now, to be able to debug XML validation errors in above code. tax_benefit_system = TaxBenefitSystem() if tax_benefit_system.preprocess_legislation is not None: legislation_json = tax_benefit_system.preprocess_legislation( legislation_json) legislation_json = legislations.generate_dated_legislation_json( legislation_json, year) legislation_json, errors = legislations.validate_dated_legislation_json( legislation_json, state=conv.default_state) if errors is not None: errors = conv.embed_error(legislation_json, 'errors', errors) if errors is None: raise ValueError( unicode( json.dumps(legislation_json, ensure_ascii=False, indent=2)).encode('utf-8')) raise ValueError(u'{0} for: {1}'.format( unicode( json.dumps(errors, ensure_ascii=False, indent=2, sort_keys=True)), unicode(json.dumps(legislation_json, ensure_ascii=False, indent=2)), ).encode('utf-8')) compact_legislation = legislations.compact_dated_node_json( legislation_json) assert compact_legislation is not None
def test(force=False, name_filter=None, options_by_path=None): if isinstance(name_filter, str): name_filter = name_filter.decode('utf-8') if options_by_path is None: options_by_path = options_by_dir for path, options in options_by_path.iteritems(): if not force and options.get('ignore', False): log.info(u'Ignoring {}'.format(path)) continue if not os.path.exists(path): log.warning(u'Skipping missing {}'.format(path)) continue if os.path.isdir(path): yaml_paths = [ os.path.join(path, filename) for filename in sorted(os.listdir(path)) if filename.endswith('.yaml') ] else: yaml_paths = [path] for yaml_path in yaml_paths: filename_core = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items=True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format( yaml_path, yaml.dump(tests, allow_unicode=True, default_flow_style=False, indent=2, width=120))) for test in tests: test, error = scenarios.make_json_or_python_to_test( get_tax_benefit_system(options.get('reform')), default_absolute_error_margin=options[ 'default_absolute_error_margin'])(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format( yaml_path, yaml.dump(test, allow_unicode=True, default_flow_style=False, indent=2, width=120))) if not force and test.get(u'ignore', False): continue if name_filter is not None and name_filter not in filename_core \ and name_filter not in (test.get('name', u'')) \ and name_filter not in (test.get('keywords', [])): continue checker = check_any_period if options[ 'accept_other_period'] else check yield checker, test.get('name') or filename_core, unicode( test['scenario'].period), test, force
def test(force = False, name_filter = None, options_by_path = None): if isinstance(name_filter, str): name_filter = name_filter.decode('utf-8') if options_by_path is None: options_by_path = options_by_dir for path, options in options_by_path.iteritems(): if not force and options.get('ignore', False): log.info(u'Ignoring {}'.format(path)) continue if not os.path.exists(path): log.warning(u'Skipping missing {}'.format(path)) continue if os.path.isdir(path): yaml_paths = [ os.path.join(path, filename) for filename in sorted(os.listdir(path)) if filename.endswith('.yaml') ] else: yaml_paths = [path] if options.get('requires'): # Check if the required package was successfully imported in tests/base.py if getattr(base, options.get('requires')) is None: continue reform_keys = options.get('reforms') tax_benefit_system_for_path = base.get_cached_composed_reform( reform_keys = reform_keys, tax_benefit_system = base.tax_benefit_system, ) if reform_keys is not None else base.tax_benefit_system for yaml_path in yaml_paths: filename_core = os.path.splitext(os.path.basename(yaml_path))[0] with open(yaml_path) as yaml_file: tests = yaml.load(yaml_file) tests, error = conv.pipe( conv.make_item_to_singleton(), conv.uniform_sequence( conv.noop, drop_none_items = True, ), )(tests) if error is not None: embedding_error = conv.embed_error(tests, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}".format(yaml_path, yaml.dump(tests, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) for test in tests: test, error = scenarios.make_json_or_python_to_test( tax_benefit_system = tax_benefit_system_for_path, default_absolute_error_margin = options.get('default_absolute_error_margin'), default_relative_error_margin = options.get('default_relative_error_margin'), )(test) if error is not None: embedding_error = conv.embed_error(test, u'errors', error) assert embedding_error is None, embedding_error raise ValueError("Error in test {}:\n{}\nYaml test content: \n{}\n".format( yaml_path, error, yaml.dump(test, allow_unicode = True, default_flow_style = False, indent = 2, width = 120))) if not force and test.get(u'ignore', False): continue if name_filter is not None and name_filter not in filename_core \ and name_filter not in (test.get('name', u'')) \ and name_filter not in (test.get('keywords', [])): continue checker = check_calculate_output if options['calculate_output'] else check yield checker, yaml_path, test.get('name') or filename_core, unicode(test['scenario'].period), test, \ force