From 57a00c749d6b37661e725d378319943cdb8a7819 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 1 Apr 2026 20:10:54 +0100 Subject: [PATCH 1/3] Fix object class ordering --- tools/dbgen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/dbgen.py b/tools/dbgen.py index 86e3399..82ec038 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) From 8707615d95d778bcf15351039cf17210d650b111 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 1 Apr 2026 20:30:43 +0100 Subject: [PATCH 2/3] Catch un-named options for `oneof` --- tools/dbgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/dbgen.py b/tools/dbgen.py index 82ec038..ef0cf5a 100644 --- a/tools/dbgen.py +++ b/tools/dbgen.py @@ -869,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') From 9c5ad3962809027d71fb37a252ffb33018a88582 Mon Sep 17 00:00:00 2001 From: mikee47 Date: Thu, 2 Apr 2026 07:03:24 +0100 Subject: [PATCH 3/3] Add test config to catch issues --- test/pr96-recur.cfgdb | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 test/pr96-recur.cfgdb 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