diff --git a/singer/schema.py b/singer/schema.py index b4da4ac..a265e15 100644 --- a/singer/schema.py +++ b/singer/schema.py @@ -20,6 +20,7 @@ 'additionalProperties', 'anyOf', 'patternProperties', + 'definitions', ] @@ -36,7 +37,7 @@ def __init__(self, type=None, format=None, properties=None, items=None, selected=None, inclusion=None, description=None, minimum=None, maximum=None, exclusiveMinimum=None, exclusiveMaximum=None, multipleOf=None, maxLength=None, minLength=None, additionalProperties=None, - anyOf=None, patternProperties=None): + anyOf=None, patternProperties=None, definitions=None, ref=None): self.type = type self.properties = properties @@ -55,6 +56,8 @@ def __init__(self, type=None, format=None, properties=None, items=None, self.format = format self.additionalProperties = additionalProperties self.patternProperties = patternProperties + self.definitions = definitions + self.ref = ref def __str__(self): return json.dumps(self.to_dict()) @@ -71,6 +74,9 @@ def to_dict(self): '''Return the raw JSON Schema as a (possibly nested) dict.''' result = {} + if self.ref is not None: + result['$ref'] = self.ref + if self.properties is not None: result['properties'] = { k: v.to_dict() @@ -97,6 +103,10 @@ def from_dict(cls, data, **schema_defaults): kwargs = schema_defaults.copy() properties = data.get('properties') items = data.get('items') + ref = data.get('$ref') + + if ref is not None: + kwargs['ref'] = ref if properties is not None: kwargs['properties'] = { @@ -105,6 +115,7 @@ def from_dict(cls, data, **schema_defaults): } if items is not None: kwargs['items'] = Schema.from_dict(items, **schema_defaults) + for key in STANDARD_KEYS: if key in data: kwargs[key] = data[key]