Skip to content

Commit ea237c5

Browse files
✨ Better handle anyOf and empty schemas.
1 parent 0e30bd7 commit ea237c5

File tree

11 files changed

+409
-146
lines changed

11 files changed

+409
-146
lines changed

src/lapidary/render/model/conv_schema.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ def __init__(self, root_package: python.ModulePath, source: openapi.OpenAPI) ->
2121
self.root_package = root_package
2222
self.source = source
2323
self.type_models: set[Stack] = set()
24-
self.all_models: dict[Stack, MetaModel | None] = {}
24+
self.all_models: dict[Stack, MetaModel] = {}
2525

2626
@resolve_ref
2727
def process_schema(
2828
self,
2929
value: openapi.Schema | bool | None,
3030
stack: Stack,
3131
) -> MetaModel | None:
32-
if model := self.all_models.get(stack):
33-
return model
32+
if existing := self.all_models.get(stack):
33+
return existing
3434

3535
if value is False or (isinstance(value, openapi.Schema) and value.enum and len(value.enum) == 0):
3636
return None
@@ -53,9 +53,10 @@ def process_schema(
5353
except AttributeError:
5454
logger.debug('Unsupported property %s', field_stack)
5555

56-
model = model.normalize_model()
57-
self.all_models[stack] = model
58-
return model
56+
if model_ := model.normalize_model():
57+
self.all_models[stack] = model_
58+
return model_
59+
return None
5960

6061
def process_schema_title(self, value: str, _: Stack, model: MetaModel, _1: openapi.Schema) -> None:
6162
model.title = value
@@ -196,11 +197,11 @@ def schema_modules(self) -> Iterable[python.SchemaModule]:
196197
for stack, model in self.all_models.items():
197198
if stack not in self.type_models or model is None:
198199
continue
199-
typ = model.as_type(str(self.root_package))
200+
types = list(model.as_types(str(self.root_package)))
200201

201-
if typ:
202-
modules[python.ModulePath(resolve_type_name(str(self.root_package), model.stack).typ.module)].append(
203-
typ
202+
if types:
203+
modules[python.ModulePath(resolve_type_name(str(self.root_package), model.stack).typ.module)].extend(
204+
types
204205
)
205206
return [
206207
python.SchemaModule(

0 commit comments

Comments
 (0)