Mercurial > hgrepos > Python > libs > data-schema
diff data_schema/__init__.py @ 29:68286d27f27d
FIX: Allow customization of the data stream loader (get_data_stream())
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 08 Jul 2023 16:10:36 +0200 |
| parents | db3491e1b590 |
| children | 2e7c08c356ee |
line wrap: on
line diff
--- a/data_schema/__init__.py Sat Jul 08 13:51:20 2023 +0200 +++ b/data_schema/__init__.py Sat Jul 08 16:10:36 2023 +0200 @@ -236,7 +236,8 @@ ValidationSettings = collections.namedtuple( "ValidationSettings", - ["skip_keys", "break_on_keynames_problems", "schema_loader"]) + ["skip_keys", "break_on_keynames_problems", + "data_stream_loader", "schema_loader"]) class _Schema(dict): @@ -328,13 +329,16 @@ def __repr__(self): return "<_Schema " + super().__repr__() + ">" - def get_cached_schema(self, key, load_if_needed=True, schema_loader=None): + def get_cached_schema(self, key, load_if_needed=True, + data_stream_loader=None, + schema_loader=None): root = self.ROOT s = root._schema_cache.get(key, None) if s is None and load_if_needed: if schema_loader is None: raise SchemaError("no schema loader available") - with get_data_stream(key) as schemastream: + dsl = data_stream_loader or get_data_stream + with dsl(key) as schemastream: # load schema a new `$self' (i.e. sub-root is True) s = _Schema(self, True, schema_loader(schemastream)) root._schema_cache[key] = s @@ -501,6 +505,7 @@ settings = { "skip_keys": None, "break_on_keynames_problems": True, + "data_stream_loader": get_data_stream, "schema_loader": default_schema_loader } settings.update(kwds) @@ -1408,6 +1413,7 @@ s = schema.get_cached_schema( uri.path, load_if_needed=True, + data_stream_loader=context.settings.data_stream_loader, schema_loader=context.settings.schema_loader) if uri.fragment is None: raise SchemaError("fragment required in reference")
