Skip to content

Commit 10c60f8

Browse files
committed
Add node argument to process_name hook
1 parent 8561def commit 10c60f8

File tree

10 files changed

+22
-11
lines changed

10 files changed

+22
-11
lines changed

PLUGINS.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ Hook executed on generation of init code. Result is used as content of `__init__
287287
### process_name
288288

289289
```py
290-
def process_name(self, name: str) -> str:
290+
def process_name(self, name: str, node: Optional[Node] = None) -> str:
291291
```
292292

293293
Hook executed on processing of GraphQL field, argument or operation name.

ariadne_codegen/client_generators/arguments.py

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def generate(
6262
org_name,
6363
convert_to_snake_case=self.convert_to_snake_case,
6464
plugin_manager=self.plugin_manager,
65+
node=variable_definition,
6566
)
6667
annotation, used_custom_scalar = self._parse_type_node(
6768
variable_definition.type

ariadne_codegen/client_generators/input_types.py

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def _parse_input_definition(
113113
org_name,
114114
convert_to_snake_case=self.convert_to_snake_case,
115115
plugin_manager=self.plugin_manager,
116+
node=field,
116117
)
117118
annotation, field_type = parse_input_field_type(
118119
field.type, custom_scalars=self.custom_scalars

ariadne_codegen/client_generators/package.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,10 @@ def add_operation(self, definition: OperationDefinitionNode):
181181

182182
return_type_name = str_to_pascal_case(name.value)
183183
method_name = process_name(
184-
name.value, convert_to_snake_case=True, plugin_manager=self.plugin_manager
184+
name.value,
185+
convert_to_snake_case=True,
186+
plugin_manager=self.plugin_manager,
187+
node=definition,
185188
)
186189
module_name = method_name
187190
file_name = f"{module_name}.py"

ariadne_codegen/client_generators/result_types.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def _parse_type_definition(
185185
start=1,
186186
):
187187
field_name = self._get_field_name(field)
188-
name = self._process_field_name(field_name)
188+
name = self._process_field_name(field_name, field=field)
189189
field_definition = self._get_field_from_schema(type_name, field.name.value)
190190
annotation, field_types_names = parse_operation_field(
191191
field=field,
@@ -269,13 +269,14 @@ def _get_field_name(self, field: FieldNode) -> str:
269269
return field.alias.value
270270
return field.name.value
271271

272-
def _process_field_name(self, name: str) -> str:
272+
def _process_field_name(self, name: str, field: FieldNode) -> str:
273273
if self.convert_to_snake_case and name == TYPENAME_FIELD_NAME:
274274
return "__typename__"
275275
return process_name(
276276
name,
277277
convert_to_snake_case=self.convert_to_snake_case,
278278
plugin_manager=self.plugin_manager,
279+
node=field,
279280
)
280281

281282
def _get_field_from_schema(self, type_name: str, field_name: str) -> GraphQLField:

ariadne_codegen/plugins/base.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import ast
2-
from typing import Dict, Tuple, Union
2+
from typing import Dict, Optional, Tuple, Union
33

44
from graphql import (
55
FieldNode,
66
GraphQLEnumType,
77
GraphQLInputField,
88
GraphQLInputObjectType,
99
GraphQLSchema,
10+
Node,
1011
OperationDefinitionNode,
1112
SelectionSetNode,
1213
VariableDefinitionNode,
@@ -145,5 +146,6 @@ def generate_scalars_code(self, generated_code: str) -> str:
145146
def generate_init_code(self, generated_code: str) -> str:
146147
return generated_code
147148

148-
def process_name(self, name: str) -> str:
149+
# pylint: disable=unused-argument
150+
def process_name(self, name: str, node: Optional[Node] = None) -> str:
149151
return name

ariadne_codegen/plugins/manager.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
GraphQLInputField,
88
GraphQLInputObjectType,
99
GraphQLSchema,
10+
Node,
1011
OperationDefinitionNode,
1112
SelectionSetNode,
1213
VariableDefinitionNode,
@@ -187,5 +188,5 @@ def generate_scalars_code(self, generated_code: str) -> str:
187188
def generate_init_code(self, generated_code: str) -> str:
188189
return self._apply_plugins_on_object("generate_init_code", generated_code)
189190

190-
def process_name(self, name: str) -> str:
191-
return self._apply_plugins_on_object("process_name", name)
191+
def process_name(self, name: str, node: Optional[Node] = None) -> str:
192+
return self._apply_plugins_on_object("process_name", name, node=node)

ariadne_codegen/utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import isort
88
from autoflake import fix_code # type: ignore
99
from black import Mode, format_str
10+
from graphql import Node
1011

1112
from .plugins.manager import PluginManager
1213

@@ -80,6 +81,7 @@ def process_name(
8081
name: str,
8182
convert_to_snake_case: bool,
8283
plugin_manager: Optional[PluginManager] = None,
84+
node: Optional[Node] = None,
8385
) -> str:
8486
"""Processes the GraphQL name to remove keywords
8587
and optionally convert to snake_case."""
@@ -89,5 +91,5 @@ def process_name(
8991
if iskeyword(processed_name):
9092
processed_name += "_"
9193
if plugin_manager:
92-
processed_name = plugin_manager.process_name(processed_name)
94+
processed_name = plugin_manager.process_name(processed_name, node=node)
9395
return processed_name

tests/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
@pytest.fixture
55
def mocked_plugin_manager(mocker):
6-
def no_effect_method(obj, *_):
6+
def no_effect_method(obj, *_, **__):
77
return obj
88

99
manager = mocker.MagicMock()

tests/plugins/test_manager.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ def test_generate_init_code_calls_plugins_generate_init_code(
326326

327327

328328
def test_process_name_calls_plugins_process_name(plugin_manager_with_mocked_plugins):
329-
plugin_manager_with_mocked_plugins.process_name("")
329+
plugin_manager_with_mocked_plugins.process_name("", OperationDefinitionNode())
330330

331331
assert plugin_manager_with_mocked_plugins.plugins[0].process_name.called
332332
assert plugin_manager_with_mocked_plugins.plugins[1].process_name.called

0 commit comments

Comments
 (0)