| 
1 | 1 | import json  | 
2 | 2 | 
 
  | 
3 | 3 | from .visitor import Visitor, visit  | 
 | 4 | +from ..utils.undefined import Undefined  | 
4 | 5 | 
 
  | 
5 | 6 | # Necessary for static type checking  | 
6 | 7 | if False:  # flake8: noqa  | 
@@ -82,7 +83,7 @@ def leave_OperationDefinition(self, node, *args):  | 
82 | 83 | 
 
  | 
83 | 84 |     def leave_VariableDefinition(self, node, *args):  | 
84 | 85 |         # type: (Any, *Any) -> str  | 
85 |  | -        return node.variable + ": " + node.type + wrap(" = ", node.default_value)  | 
 | 86 | +        return node.variable + ": " + node.type + wrap(" = ", node.default_value, is_default_value=True)  | 
86 | 87 | 
 
  | 
87 | 88 |     def leave_SelectionSet(self, node, *args):  | 
88 | 89 |         # type: (Any, *Any) -> str  | 
@@ -148,6 +149,12 @@ def leave_BooleanValue(self, node, *args):  | 
148 | 149 |         # type: (Any, *Any) -> str  | 
149 | 150 |         return json.dumps(node.value)  | 
150 | 151 | 
 
  | 
 | 152 | +    def leave_NullValue(self, node, *args):  | 
 | 153 | +        return "null"  | 
 | 154 | + | 
 | 155 | +    def leave_UndefinedValue(self, node, *args):  | 
 | 156 | +        return Undefined  | 
 | 157 | + | 
151 | 158 |     def leave_EnumValue(self, node, *args):  | 
152 | 159 |         # type: (Any, *Any) -> str  | 
153 | 160 |         return node.value  | 
@@ -229,7 +236,7 @@ def leave_InputValueDefinition(self, node, *args):  | 
229 | 236 |             node.name  | 
230 | 237 |             + ": "  | 
231 | 238 |             + node.type  | 
232 |  | -            + wrap(" = ", node.default_value)  | 
 | 239 | +            + wrap(" = ", node.default_value, is_default_value=True)  | 
233 | 240 |             + wrap(" ", join(node.directives, " "))  | 
234 | 241 |         )  | 
235 | 242 | 
 
  | 
@@ -269,13 +276,14 @@ def leave_EnumValueDefinition(self, node, *args):  | 
269 | 276 | 
 
  | 
270 | 277 |     def leave_InputObjectTypeDefinition(self, node, *args):  | 
271 | 278 |         # type: (Any, *Any) -> str  | 
272 |  | -        return (  | 
 | 279 | +        s = (  | 
273 | 280 |             "input "  | 
274 | 281 |             + node.name  | 
275 | 282 |             + wrap(" ", join(node.directives, " "))  | 
276 | 283 |             + " "  | 
277 | 284 |             + block(node.fields)  | 
278 | 285 |         )  | 
 | 286 | +        return s  | 
279 | 287 | 
 
  | 
280 | 288 |     def leave_TypeExtensionDefinition(self, node, *args):  | 
281 | 289 |         # type: (Any, *Any) -> str  | 
@@ -305,8 +313,14 @@ def block(_list):  | 
305 | 313 |     return "{}"  | 
306 | 314 | 
 
  | 
307 | 315 | 
 
  | 
308 |  | -def wrap(start, maybe_str, end=""):  | 
309 |  | -    # type: (str, Optional[str], str) -> str  | 
 | 316 | +def wrap(start, maybe_str, end="", is_default_value=False):  | 
 | 317 | +    # type: (str, Optional[str], str, bool) -> str  | 
 | 318 | +    if is_default_value:  | 
 | 319 | +        if maybe_str is Undefined:  | 
 | 320 | +            return ""  | 
 | 321 | +        s = "null" if maybe_str is None else maybe_str  | 
 | 322 | +        return start + s + end  | 
 | 323 | + | 
310 | 324 |     if maybe_str:  | 
311 | 325 |         return start + maybe_str + end  | 
312 | 326 |     return ""  | 
 | 
0 commit comments