Skip to content
This repository was archived by the owner on Oct 14, 2024. It is now read-only.

Commit c270976

Browse files
committed
Adds unparser_patch.py to python_graphs
1 parent e876ee9 commit c270976

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

python_graphs/unparser_patch.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import astunparse
2+
import gast as ast
3+
4+
5+
astunparse.Unparser.boolops = {'And': 'and', 'Or': 'or', ast.And: 'and', ast.Or: 'or'}
6+
7+
8+
def _arguments(self, t):
9+
first = True
10+
# normal arguments
11+
all_args = getattr(t, 'posonlyargs', []) + t.args
12+
defaults = [None] * (len(all_args) - len(t.defaults)) + t.defaults
13+
for index, elements in enumerate(zip(all_args, defaults), 1):
14+
a, d = elements
15+
if first:first = False
16+
else: self.write(", ")
17+
self.dispatch(a)
18+
if d:
19+
self.write("=")
20+
self.dispatch(d)
21+
if index == len(getattr(t, 'posonlyargs', ())):
22+
self.write(", /")
23+
24+
# varargs, or bare '*' if no varargs but keyword-only arguments present
25+
if t.vararg or getattr(t, "kwonlyargs", False):
26+
if first:first = False
27+
else: self.write(", ")
28+
self.write("*")
29+
if t.vararg:
30+
if hasattr(t.vararg, 'arg'):
31+
self.write(t.vararg.arg)
32+
if t.vararg.annotation:
33+
self.write(": ")
34+
self.dispatch(t.vararg.annotation)
35+
else:
36+
self.write(t.vararg)
37+
if getattr(t, 'varargannotation', None):
38+
self.write(": ")
39+
self.dispatch(t.varargannotation)
40+
41+
# keyword-only arguments
42+
if getattr(t, "kwonlyargs", False):
43+
for a, d in zip(t.kwonlyargs, t.kw_defaults):
44+
if first:first = False
45+
else: self.write(", ")
46+
self.dispatch(a),
47+
if d:
48+
self.write("=")
49+
self.dispatch(d)
50+
51+
# kwargs
52+
if t.kwarg:
53+
if first:first = False
54+
else: self.write(", ")
55+
if hasattr(t.kwarg, 'arg'):
56+
self.write("**"+t.kwarg.arg)
57+
if t.kwarg.annotation:
58+
self.write(": ")
59+
self.dispatch(t.kwarg.annotation)
60+
elif hasattr(t.kwarg, 'id'): # if this is a gast._arguments
61+
self.write("**"+t.kwarg.id)
62+
if t.kwarg.annotation:
63+
self.write(": ")
64+
self.dispatch(t.kwarg.annotation)
65+
else:
66+
self.write("**"+t.kwarg)
67+
if getattr(t, 'kwargannotation', None):
68+
self.write(": ")
69+
self.dispatch(t.kwargannotation)
70+
71+
astunparse.Unparser._arguments = _arguments

0 commit comments

Comments
 (0)