MCPcopy Index your code
hub / github.com/fastapi/fastapi / get_definitions

Function get_definitions

fastapi/_compat/v2.py:285–346  ·  view source on GitHub ↗
(
    *,
    fields: Sequence[ModelField],
    model_name_map: ModelNameMap,
    separate_input_output_schemas: bool = True,
)

Source from the content-addressed store, hash-verified

283
284
285def 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

Callers 1

get_openapiFunction · 0.90

Calls 4

GenerateJsonSchemaClass · 0.85
ModelFieldClass · 0.85
_has_computed_fieldsFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…