Skip to content

Commit ab5b2c0

Browse files
author
John Lyu
committed
Add docstring to generated code based on schema description
1 parent 3d5605f commit ab5b2c0

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

ariadne_codegen/client_generators/custom_fields.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ def _parse_object_type_definitions(
114114
class_def = self._generate_class_def_body(
115115
definition=graphql_type,
116116
class_name=f"{graphql_type.name}{self._get_suffix(graphql_type)}",
117+
description=graphql_type.description,
117118
)
118119
if isinstance(graphql_type, GraphQLInterfaceType):
119120
class_def.body.append(
@@ -129,14 +130,17 @@ def _generate_class_def_body(
129130
self,
130131
definition: Union[GraphQLObjectType, GraphQLInterfaceType],
131132
class_name: str,
133+
description: Optional[str] = None,
132134
) -> ast.ClassDef:
133135
"""
134136
Generates the body of a class definition for a given GraphQL object
135137
or interface type.
136138
"""
137139
base_names = [GRAPHQL_BASE_FIELD_CLASS]
138140
additional_fields_typing = set()
139-
class_def = generate_class_def(name=class_name, base_names=base_names)
141+
class_def = generate_class_def(
142+
name=class_name, base_names=base_names, description=description
143+
)
140144
for lineno, (org_name, field) in enumerate(
141145
self._get_combined_fields(definition).items(), start=1
142146
):

ariadne_codegen/client_generators/custom_operation.py

+2
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ def _generate_method(
115115
operation_name: str,
116116
operation_args,
117117
final_type,
118+
description: Optional[str] = None,
118119
) -> ast.FunctionDef:
119120
"""Generates a method definition for a given operation."""
120121
(
@@ -141,6 +142,7 @@ def _generate_method(
141142
name=str_to_snake_case(operation_name),
142143
arguments=method_arguments,
143144
return_type=generate_name(return_type_name),
145+
description=description,
144146
body=[
145147
*arguments_body,
146148
generate_return(

ariadne_codegen/client_generators/input_types.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ def _parse_input_definition(
157157
self, definition: GraphQLInputObjectType
158158
) -> ast.ClassDef:
159159
class_def = generate_class_def(
160-
name=definition.name, base_names=[BASE_MODEL_CLASS_NAME]
160+
name=definition.name,
161+
base_names=[BASE_MODEL_CLASS_NAME],
162+
description=definition.description,
161163
)
162164

163165
for lineno, (org_name, field) in enumerate(definition.fields.items(), start=1):

ariadne_codegen/codegen.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,21 @@ def generate_class_def(
111111
name: str,
112112
base_names: Optional[List[str]] = None,
113113
body: Optional[List[ast.stmt]] = None,
114+
description: str = "",
114115
) -> ast.ClassDef:
115116
"""Generate class definition."""
116117
bases = cast(
117118
List[ast.expr], [ast.Name(id=name) for name in base_names] if base_names else []
118119
)
120+
body = body if body else []
121+
if description:
122+
docstring = ast.Expr(value=ast.Constant(value=description))
123+
body.insert(0, docstring)
119124
params: Dict[str, Any] = {
120125
"name": name,
121126
"bases": bases,
122127
"keywords": [],
123-
"body": body if body else [],
128+
"body": body,
124129
"decorator_list": [],
125130
}
126131
if sys.version_info >= (3, 12):
@@ -354,10 +359,15 @@ def generate_method_definition(
354359
name: str,
355360
arguments: ast.arguments,
356361
return_type: Union[ast.Name, ast.Subscript],
362+
description: str = "",
357363
body: Optional[List[ast.stmt]] = None,
358364
lineno: int = 1,
359365
decorator_list: Optional[List[ast.expr]] = None,
360366
) -> ast.FunctionDef:
367+
body = body if body else [ast.Pass()]
368+
if description:
369+
docstring = ast.Expr(value=ast.Constant(value=description))
370+
body.insert(0, docstring)
361371
params: Dict[str, Any] = {
362372
"name": name,
363373
"args": arguments,

0 commit comments

Comments
 (0)