From 3ad6e1dbac2339ff9d06e5545f00ddad2160e4d0 Mon Sep 17 00:00:00 2001 From: Eva Lott Date: Tue, 1 Oct 2024 10:12:42 +0100 Subject: [PATCH] updated jsonschema validator and added test --- event_model/__init__.py | 8 ++-- event_model/documents/event_descriptor.py | 15 +++---- event_model/schemas/event_descriptor.json | 12 ++--- event_model/tests/test_auth.py | 55 ++++++++++++++++++----- 4 files changed, 62 insertions(+), 28 deletions(-) diff --git a/event_model/__init__.py b/event_model/__init__.py index 78788561..784e33ee 100644 --- a/event_model/__init__.py +++ b/event_model/__init__.py @@ -1801,18 +1801,20 @@ class MismatchedDataKeys(InvalidData): def _is_array(checker, instance): return ( - jsonschema.validators.Draft7Validator.TYPE_CHECKER.is_type(instance, "array") + jsonschema.validators.Draft202012Validator.TYPE_CHECKER.is_type( + instance, "array" + ) or isinstance(instance, tuple) or hasattr(instance, "__array__") ) -_array_type_checker = jsonschema.validators.Draft7Validator.TYPE_CHECKER.redefine( +_array_type_checker = jsonschema.validators.Draft202012Validator.TYPE_CHECKER.redefine( "array", _is_array ) _Validator = jsonschema.validators.extend( - jsonschema.validators.Draft7Validator, type_checker=_array_type_checker + jsonschema.validators.Draft202012Validator, type_checker=_array_type_checker ) schema_validators = { diff --git a/event_model/documents/event_descriptor.py b/event_model/documents/event_descriptor.py index 721bfe7d..b27937a2 100644 --- a/event_model/documents/event_descriptor.py +++ b/event_model/documents/event_descriptor.py @@ -23,16 +23,18 @@ class Limits(TypedDict): warning: NotRequired[Annotated[LimitsRange, Field(description="Warning limits.")]] alarm: NotRequired[Annotated[LimitsRange, Field(description="Alarm limits.")]] + _ConstrainedDtype = Annotated[ str, Field( description="A numpy dtype e.g `4", - ">i", - [("some_str", "Z")], - ] + "dtype_numpy", + [ + "Z", + "i", + "i4", + "4i", + "i>4", + ">i", + ("some_str_1", "u4", + "u4")], + ], +) +def test_good_numpy_datakeys(dtype_numpy): + descriptor = { + "time": 0, + "uid": new_uid(), + "data_keys": { + "a": { + "source": "", + "dtype": "number", + "shape": [], + "dtype_numpy": dtype_numpy, + } + }, + "run_start": new_uid(), + } + schema_validators[DocumentNames.descriptor].validate(descriptor)