-
Notifications
You must be signed in to change notification settings - Fork 132
Description
From the JSON Schema draft 7.0 specification: array types can be used to validate tuple as such:
{
"type": "array",
"items": [
{
"type": "something"
},
{
"type": "otherthing"
}
]
}
... and as such, the items property of a "type": "array" property can be a python list.
Using the above schema will raise an exception with singer-python==5.1.5 when entering the @singer.utils.handle_top_exception(LOGGER) decorator, although I also can see the error in the master version of the file: https://github.com/singer-io/singer-python/blob/master/singer/schema.py#L107 where the items variable is expected to be a dict (it can also be a list, as stated above)
I think I have a trivial fix which would be to add a isinstance(items, dict) check:
@classmethod
def from_dict(cls, data, **schema_defaults):
'''Initialize a Schema object based on the JSON Schema structure.
:param schema_defaults: The default values to the Schema
constructor.'''
kwargs = schema_defaults.copy()
properties = data.get('properties')
items = data.get('items')
if properties is not None:
kwargs['properties'] = {
k: Schema.from_dict(v, **schema_defaults)
for k, v in properties.items()
}
if items is not None and isinstance(items, dict):
kwargs['items'] = Schema.from_dict(items, **schema_defaults)
for key in STANDARD_KEYS:
if key in data:
kwargs[key] = data[key]
return Schema(**kwargs)
and I'm happy to raise a PR for it. However I wanted to have the opinion of someone who's closer to the library to know if we even want to support Tuple Validation from the JSON Schema draft 7.0 specifications?
edit: made a bit more readable