diff --git a/test/pr96-recur.cfgdb b/test/pr96-recur.cfgdb new file mode 100644 index 0000000..d43fbd0 --- /dev/null +++ b/test/pr96-recur.cfgdb @@ -0,0 +1,50 @@ +{ + "comment": "Verify PR #96, where `oneof` contains nested definitions", + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "my-color": { + "$ref": "#/$defs/color" + } + }, + "$defs": { + "color": { + "oneOf": [ + { + "type": "object", + "title": "raw-wrapper", + "properties": { + "raw": { + "$ref": "#/$defs/raw" + } + } + }, + { + "type": "object", + "title": "preset-wrapper", + "properties": { + "preset": { + "$ref": "#/$defs/preset" + } + } + } + ] + }, + "raw": { + "type": "object", + "properties": { + "value": { + "type": "integer" + } + } + }, + "preset": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/tools/dbgen.py b/tools/dbgen.py index 86e3399..ef0cf5a 100644 --- a/tools/dbgen.py +++ b/tools/dbgen.py @@ -509,7 +509,8 @@ def scan(obj: Object): if prop.obj in dependencies: continue dependencies.append(prop.obj) - scan(prop.obj) + if scan(prop.obj): + return True return False return scan(self) @@ -868,7 +869,7 @@ def create_object_and_property(Class) -> Property: prop = parse_property(f'{path}/oneOf/{i}', union_prop, opt.get('title'), opt) if not prop.obj: raise ValueError(f'Union "{union_prop.name}" option type must be *object*') - if not prop.id or not prop.obj.typename: + if not prop.id or not prop.name or not prop.obj.typename: raise ValueError(f'Union "{union_prop.name}" option requires title or $ref') if union_prop.obj.max_object_size == 0: raise ValueError('Union contains only empty objects')