Commit 452ad773 authored by Mark Canterbury's avatar Mark Canterbury
Browse files

Extending ref resolver checks to all supporting schemas

parent 531d13ff
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@ def recursively_find_refs(j) -> Generator[Tuple[str, str], None, None]:
        if isinstance(v, dict):
            yield from recursively_find_refs(v)

def check_refs(schema: Validator, resolver: RefResolver) -> List[RefResolutionError]:
    refs = list(recursively_find_refs(schema.schema))
def check_refs(schema: dict, resolver: RefResolver) -> List[RefResolutionError]:
    refs = list(recursively_find_refs(schema))
    errors = []
    for key, ref in refs:
        try:
@@ -64,7 +64,6 @@ def build_schema(core_schema_path: str | Path, supporting_schema_paths: Sequence
            else:
                logging.warning(f"Could not parse file {path} ({ex!r})")
            build_results.append(BuildResult(path, False, [ex]))
    # _schema_dict = _schema_dict | { s['$id'] : s for s in _supporting_schemas }
    logging.info(f"Loaded schema IDs: {[k for k in _schema_dict.keys()]}")
    _resolver = RefResolver(None, 
                    referrer=None, 
@@ -72,12 +71,15 @@ def build_schema(core_schema_path: str | Path, supporting_schema_paths: Sequence
    logging.info("Created RefResolver")
    _validator = Draft202012Validator(_core_schema, resolver=_resolver)
    logging.info("Created validator")
    ref_errors = check_refs(_validator, _resolver)
    ref_errors = []
    for schema in _supporting_schemas + [_validator.schema]:
        ref_errors += check_refs(schema, _resolver)
    if len(ref_errors) > 0:
        build_results.append(BuildResult(core_schema_path, False, ref_errors))
        return None, build_results
    else:
        build_results.append(BuildResult(core_schema_path, True, []))
        _validator.descend
        return _validator, build_results