(
*,
fields: Sequence[ModelField],
model_name_map: ModelNameMap,
separate_input_output_schemas: bool = True,
)
| 283 | |
| 284 | |
| 285 | def get_definitions( |
| 286 | *, |
| 287 | fields: Sequence[ModelField], |
| 288 | model_name_map: ModelNameMap, |
| 289 | separate_input_output_schemas: bool = True, |
| 290 | ) -> tuple[ |
| 291 | dict[tuple[ModelField, Literal["validation", "serialization"]], JsonSchemaValue], |
| 292 | dict[str, dict[str, Any]], |
| 293 | ]: |
| 294 | schema_generator = GenerateJsonSchema(ref_template=REF_TEMPLATE) |
| 295 | validation_fields = [field for field in fields if field.mode == "validation"] |
| 296 | serialization_fields = [field for field in fields if field.mode == "serialization"] |
| 297 | flat_validation_models = get_flat_models_from_fields( |
| 298 | validation_fields, known_models=set() |
| 299 | ) |
| 300 | flat_serialization_models = get_flat_models_from_fields( |
| 301 | serialization_fields, known_models=set() |
| 302 | ) |
| 303 | flat_validation_model_fields = [ |
| 304 | ModelField( |
| 305 | field_info=FieldInfo(annotation=model), |
| 306 | name=model.__name__, |
| 307 | mode="validation", |
| 308 | ) |
| 309 | for model in flat_validation_models |
| 310 | ] |
| 311 | flat_serialization_model_fields = [ |
| 312 | ModelField( |
| 313 | field_info=FieldInfo(annotation=model), |
| 314 | name=model.__name__, |
| 315 | mode="serialization", |
| 316 | ) |
| 317 | for model in flat_serialization_models |
| 318 | ] |
| 319 | flat_model_fields = flat_validation_model_fields + flat_serialization_model_fields |
| 320 | input_types = {f.field_info.annotation for f in fields} |
| 321 | unique_flat_model_fields = { |
| 322 | f for f in flat_model_fields if f.field_info.annotation not in input_types |
| 323 | } |
| 324 | inputs = [ |
| 325 | ( |
| 326 | field, |
| 327 | ( |
| 328 | field.mode |
| 329 | if (separate_input_output_schemas or _has_computed_fields(field)) |
| 330 | else "validation" |
| 331 | ), |
| 332 | field._type_adapter.core_schema, |
| 333 | ) |
| 334 | for field in list(fields) + list(unique_flat_model_fields) |
| 335 | ] |
| 336 | field_mapping, definitions = schema_generator.generate_definitions(inputs=inputs) |
| 337 | for item_def in cast(dict[str, dict[str, Any]], definitions).values(): |
| 338 | if "description" in item_def: |
| 339 | item_description = cast(str, item_def["description"]).split("\f")[0] |
| 340 | item_def["description"] = item_description |
| 341 | # definitions: dict[DefsRef, dict[str, Any]] |
| 342 | # but mypy complains about general str in other places that are not declared as |
no test coverage detected
searching dependent graphs…