diff --git a/event_model/__init__.py b/event_model/__init__.py index 0623ade4..9110b218 100644 --- a/event_model/__init__.py +++ b/event_model/__init__.py @@ -2249,11 +2249,16 @@ def __call__( ) if validate: schema_validators[DocumentNames.event_page].validate(doc) + if not ( - self.descriptor["data_keys"].keys() == data.keys() == timestamps.keys() + keys_without_stream_keys( + self.descriptor["data_keys"], self.descriptor["data_keys"] + ) == + keys_without_stream_keys(data, self.descriptor["data_keys"]) == + keys_without_stream_keys(timestamps, self.descriptor["data_keys"]) ): raise EventModelValidationError( - "These sets of keys must match:\n" + "These sets of keys must match (other than \"STREAM:\" keys):\n" "event['data'].keys(): {}\n" "event['timestamps'].keys(): {}\n" "descriptor['data_keys'].keys(): {}\n".format( @@ -2295,6 +2300,16 @@ def compose_event_page( time=time, validate=validate, ) + + +def keys_without_stream_keys(dictionary, descriptor_data_keys): + return [ + key for key in dictionary.keys() if ( + "external" not in descriptor_data_keys[key] or + descriptor_data_keys[key]["external"] != "STREAM:" + ) + ] + @dataclass @@ -2331,11 +2346,16 @@ def __call__( ) if validate: schema_validators[DocumentNames.event].validate(doc) + if not ( - self.descriptor["data_keys"].keys() == data.keys() == timestamps.keys() + keys_without_stream_keys( + self.descriptor["data_keys"], self.descriptor["data_keys"] + ) == + keys_without_stream_keys(data, self.descriptor["data_keys"]) == + keys_without_stream_keys(timestamps, self.descriptor["data_keys"]) ): raise EventModelValidationError( - "These sets of keys must match:\n" + "These sets of keys must match (other than \"STREAM:\" keys):\n" "event['data'].keys(): {}\n" "event['timestamps'].keys(): {}\n" "descriptor['data_keys'].keys(): {}\n".format(