Skip to content

Commit f354001

Browse files
AbadulrehmanSpace
authored andcommitted
feat: implement select field resolver
Co-authored-by: Abadulrehman <[email protected]> Merge-request: ROMMAN-MR-196 Merged-by: Fahim Ali Zain <[email protected]>
1 parent 8518a89 commit f354001

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

frappe_graphql/utils/resolver/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from .root_query import setup_root_query_resolvers
77
from .link_field import setup_link_field_resolvers
8+
from .select_fields import setup_select_field_resolvers
89
from .child_tables import setup_child_table_resolvers
910
from .translate import setup_translatable_resolvers
1011
from .utils import get_singular_doctype
@@ -62,7 +63,3 @@ def setup_doctype_resolver(meta: Meta, gql_type: GraphQLType):
6263
def _doctype_resolver(obj, info: GraphQLResolveInfo, **kwargs):
6364
dt = get_singular_doctype(info.parent_type.name)
6465
return dt
65-
66-
67-
def setup_select_field_resolvers(meta: Meta, gql_type: GraphQLType):
68-
pass
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from graphql import GraphQLType, GraphQLResolveInfo, GraphQLNonNull, GraphQLEnumType
2+
3+
import frappe
4+
from frappe.model.meta import Meta
5+
6+
from .translate import _translatable_resolver
7+
from .utils import get_frappe_df_from_resolve_info
8+
9+
10+
def setup_select_field_resolvers(meta: Meta, gql_type: GraphQLType):
11+
12+
for df in meta.get_select_fields():
13+
14+
if df.fieldname not in gql_type.fields:
15+
continue
16+
17+
gql_field = gql_type.fields[df.fieldname]
18+
gql_field.resolve = _select_field_resolver
19+
20+
21+
def _select_field_resolver(obj, info: GraphQLResolveInfo, **kwargs):
22+
23+
df = get_frappe_df_from_resolve_info(info)
24+
return_type = info.return_type
25+
26+
if isinstance(return_type, GraphQLNonNull):
27+
return_type = return_type.of_type
28+
29+
if isinstance(return_type, GraphQLEnumType):
30+
return frappe.scrub(obj.get(info.field_name)).upper()
31+
32+
if df and df.translatable:
33+
return _translatable_resolver(obj, info, **kwargs)
34+
35+
return obj.get(info.field_name)

frappe_graphql/utils/resolver/translate.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ def setup_translatable_resolvers(meta: Meta, gql_type: GraphQLType):
1010
continue
1111

1212
gql_field = gql_type.fields[df_fieldname]
13+
14+
if gql_field.resolve:
15+
continue
16+
1317
gql_field.resolve = _translatable_resolver
1418

1519

0 commit comments

Comments
 (0)