Coverage for fastagency/api/openapi/fastapi_code_generator_helpers.py: 100%
23 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-19 12:16 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-19 12:16 +0000
1from collections.abc import Iterator 1ahfegibcd
2from contextlib import contextmanager 1ahfegibcd
3from functools import cached_property 1ahfegibcd
4from typing import Optional, Union 1ahfegibcd
6from fastapi_code_generator.parser import ( 1ahfegibcd
7 Argument,
8 OpenAPIParser,
9 ParameterObject,
10 ReferenceObject,
11)
14class ArgumentWithDescription(Argument): # type: ignore[misc] 1ahfegibcd
15 description: Optional[str] = None 1ahfegibcd
17 @cached_property 1ahfegibcd
18 def argument(self) -> str: 1ahfegibcd
19 if self.description: 1afegbcd
20 description = self.description.replace('"""', '"""') 1aegbcd
21 type_hint = f'Annotated[{self.type_hint}, """{description}"""]' 1aegbcd
22 else:
23 type_hint = self.type_hint 1afbcd
25 if self.default is None and self.required: 1afegbcd
26 return f"{self.name}: {type_hint}" 1afegbcd
28 return f"{self.name}: {type_hint} = {self.default}" 1afebcd
31@contextmanager 1ahfegibcd
32def patch_get_parameter_type() -> Iterator[None]: 1ahfegibcd
33 original_get_parameter_type = OpenAPIParser.get_parameter_type 1afegbcd
35 def get_parameter_type( 1afegbcd
36 self: OpenAPIParser,
37 parameters: Union[ReferenceObject, ParameterObject],
38 snake_case: bool,
39 path: list[str],
40 ) -> Optional[Argument]:
41 # get the original argument
42 argument = original_get_parameter_type(self, parameters, snake_case, path) 1afegbcd
44 # add description to the argument
45 parameters = self.resolve_object(parameters, ParameterObject) 1afegbcd
46 argument_with_description = ArgumentWithDescription( 1afegbcd
47 description=parameters.description, **argument.model_dump()
48 )
49 return argument_with_description 1afegbcd
51 OpenAPIParser.get_parameter_type = get_parameter_type 1afegbcd
53 try: 1afegbcd
54 yield 1afegbcd
55 finally:
56 OpenAPIParser.get_parameter_type = original_get_parameter_type 1afegbcd