@@ -67,7 +67,7 @@ public PythonWriter(PythonSettings settings, String fullPackageName, boolean add
6767 trimBlankLines ();
6868 trimTrailingSpaces ();
6969 putFormatter ('T' , new PythonSymbolFormatter ());
70- putFormatter ('N' , new PythonNodeFormatter ());
70+ putFormatter ('N' , new PythonNodeFormatter (this ));
7171 this .addCodegenWarningHeader = addCodegenWarningHeader ;
7272 }
7373
@@ -325,6 +325,12 @@ private Boolean isOperationSymbol(Symbol typeSymbol) {
325325 }
326326
327327 private final class PythonNodeFormatter implements BiFunction <Object , String , String > {
328+ private final PythonWriter writer ;
329+
330+ PythonNodeFormatter (PythonWriter writer ) {
331+ this .writer = writer ;
332+ }
333+
328334 @ Override
329335 public String apply (Object node , String indent ) {
330336 if (node instanceof Optional <?>) {
@@ -334,16 +340,18 @@ public String apply(Object node, String indent) {
334340 throw new CodegenException (
335341 "Invalid type provided to $D. Expected a Node, but found `" + node + "`" );
336342 }
337- return ((Node ) node ).accept (new PythonNodeFormatVisitor (indent ));
343+ return ((Node ) node ).accept (new PythonNodeFormatVisitor (indent , writer ));
338344 }
339345 }
340346
341347 private final class PythonNodeFormatVisitor implements NodeVisitor <String > {
342348
343349 private String indent ;
350+ private final PythonWriter writer ;
344351
345- PythonNodeFormatVisitor (String indent ) {
352+ PythonNodeFormatVisitor (String indent , PythonWriter writer ) {
346353 this .indent = indent ;
354+ this .writer = writer ;
347355 }
348356
349357 @ Override
@@ -379,10 +387,10 @@ public String stringNode(StringNode node) {
379387 @ Override
380388 public String arrayNode (ArrayNode node ) {
381389 if (node .getElements ().isEmpty ()) {
382- return "[] " ;
390+ return "() " ;
383391 }
384392
385- StringBuilder builder = new StringBuilder ("[ \n " );
393+ StringBuilder builder = new StringBuilder ("( \n " );
386394 var oldIndent = indent ;
387395 indent += getIndentText ();
388396 for (Node element : node .getElements ()) {
@@ -392,17 +400,18 @@ public String arrayNode(ArrayNode node) {
392400 }
393401 indent = oldIndent ;
394402 builder .append (indent );
395- builder .append ('] ' );
403+ builder .append (') ' );
396404 return builder .toString ();
397405 }
398406
399407 @ Override
400408 public String objectNode (ObjectNode node ) {
409+ writer .addStdlibImport ("types" , "MappingProxyType" );
401410 if (node .getMembers ().isEmpty ()) {
402- return "{} " ;
411+ return "MappingProxyType({}) " ;
403412 }
404413
405- StringBuilder builder = new StringBuilder ("{\n " );
414+ StringBuilder builder = new StringBuilder ("MappingProxyType( {\n " );
406415 var oldIndent = indent ;
407416 indent += getIndentText ();
408417 for (Map .Entry <StringNode , Node > member : node .getMembers ().entrySet ()) {
@@ -414,7 +423,7 @@ public String objectNode(ObjectNode node) {
414423 }
415424 indent = oldIndent ;
416425 builder .append (indent );
417- builder .append ('}' );
426+ builder .append ("})" );
418427 return builder .toString ();
419428 }
420429 }
0 commit comments