From d70350f356c8a0df79600f8863addce104b0eba4 Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Mon, 21 Nov 2022 12:52:01 -0600
Subject: graphql: T4574: use Optional in func_sig

A misreading of the makefun docs seemed to indicate Optional was not
supported; it is.
---
 src/services/api/graphql/graphql/mutations.py | 16 ++++------------
 src/services/api/graphql/graphql/queries.py   | 16 ++++------------
 2 files changed, 8 insertions(+), 24 deletions(-)

(limited to 'src/services/api')

diff --git a/src/services/api/graphql/graphql/mutations.py b/src/services/api/graphql/graphql/mutations.py
index 2778feb69..31cb1afc4 100644
--- a/src/services/api/graphql/graphql/mutations.py
+++ b/src/services/api/graphql/graphql/mutations.py
@@ -14,7 +14,7 @@
 # along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 from importlib import import_module
-from typing import Any, Dict
+from typing import Any, Dict, Optional
 from ariadne import ObjectType, convert_kwargs_to_snake_case, convert_camel_case_to_snake
 from graphql import GraphQLResolveInfo
 from makefun import with_signature
@@ -42,7 +42,7 @@ def make_mutation_resolver(mutation_name, class_name, session_func):
 
     func_base_name = convert_camel_case_to_snake(class_name)
     resolver_name = f'resolve_{func_base_name}'
-    func_sig = '(obj: Any, info: GraphQLResolveInfo, data: Dict = {})'
+    func_sig = '(obj: Any, info: GraphQLResolveInfo, data: Optional[Dict]=None)'
 
     @mutation.field(mutation_name)
     @convert_kwargs_to_snake_case
@@ -67,17 +67,9 @@ def make_mutation_resolver(mutation_name, class_name, session_func):
                 del data['key']
 
             elif auth_type == 'token':
-                # there is a subtlety here: with the removal of the key entry,
-                # some requests will now have empty input, hence no data arg, so
-                # make it optional in the func_sig. However, it can not be None,
-                # as the makefun package provides accurate TypeError exceptions;
-                # hence set it to {}, but now it is a mutable default argument,
-                # so clear the key 'result', which is added at the end of
-                # this function.
                 data = kwargs['data']
-                if 'result' in data:
-                    del data['result']
-
+                if data is None:
+                    data = {}
                 info = kwargs['info']
                 user = info.context.get('user')
                 if user is None:
diff --git a/src/services/api/graphql/graphql/queries.py b/src/services/api/graphql/graphql/queries.py
index 9c8a4f064..3a88e3c80 100644
--- a/src/services/api/graphql/graphql/queries.py
+++ b/src/services/api/graphql/graphql/queries.py
@@ -14,7 +14,7 @@
 # along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 from importlib import import_module
-from typing import Any, Dict
+from typing import Any, Dict, Optional
 from ariadne import ObjectType, convert_kwargs_to_snake_case, convert_camel_case_to_snake
 from graphql import GraphQLResolveInfo
 from makefun import with_signature
@@ -42,7 +42,7 @@ def make_query_resolver(query_name, class_name, session_func):
 
     func_base_name = convert_camel_case_to_snake(class_name)
     resolver_name = f'resolve_{func_base_name}'
-    func_sig = '(obj: Any, info: GraphQLResolveInfo, data: Dict = {})'
+    func_sig = '(obj: Any, info: GraphQLResolveInfo, data: Optional[Dict]=None)'
 
     @query.field(query_name)
     @convert_kwargs_to_snake_case
@@ -67,17 +67,9 @@ def make_query_resolver(query_name, class_name, session_func):
                 del data['key']
 
             elif auth_type == 'token':
-                # there is a subtlety here: with the removal of the key entry,
-                # some requests will now have empty input, hence no data arg, so
-                # make it optional in the func_sig. However, it can not be None,
-                # as the makefun package provides accurate TypeError exceptions;
-                # hence set it to {}, but now it is a mutable default argument,
-                # so clear the key 'result', which is added at the end of
-                # this function.
                 data = kwargs['data']
-                if 'result' in data:
-                    del data['result']
-
+                if data is None:
+                    data = {}
                 info = kwargs['info']
                 user = info.context.get('user')
                 if user is None:
-- 
cgit v1.2.3