Skip to content

Commit f307faf

Browse files
committed
Use astor to generate code instead of astunparse
Astor generates nicer looking docstrings :-)
1 parent a2c8324 commit f307faf

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

codegen/generate_schema.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def get_module_nodes(self):
4444
targets=[ast.Name(id="__all__")],
4545
value=ast.List(
4646
elts=[
47-
ast.Str(s=node.name, kind="str")
47+
ast.Str(s=node.name, kind=None)
4848
for node in sorted(
4949
type_nodes, key=operator.attrgetter("name")
5050
)
@@ -200,7 +200,7 @@ def build(self) -> typing.Optional[ast.ClassDef]:
200200
doc_string = (
201201
f"Marshmallow schema for :class:`commercetools.types.{self.resource.name}`."
202202
)
203-
class_node.body.append(ast.Expr(value=ast.Str(s=doc_string, kind="str")))
203+
class_node.body.append(ast.Expr(value=ast.Str(s=doc_string, kind=None)))
204204

205205
# Add the field definitions
206206
for prop in self.resource.properties:
@@ -265,7 +265,7 @@ def build(self) -> typing.Optional[ast.ClassDef]:
265265
ast.Subscript(
266266
value=ast.Name(id="data"),
267267
slice=ast.Index(
268-
value=ast.Str(s=d_field.attribute_name, kind="str")
268+
value=ast.Str(s=d_field.attribute_name, kind=None)
269269
),
270270
)
271271
]
@@ -299,7 +299,7 @@ def _create_schema_property(self, prop):
299299

300300
if prop.attribute_name != prop.name and not prop.name.startswith("/"):
301301
node.keywords.append(
302-
ast.keyword(arg="data_key", value=ast.Str(s=prop.name, kind="str"))
302+
ast.keyword(arg="data_key", value=ast.Str(s=prop.name, kind=None))
303303
)
304304

305305
if prop.name.startswith("/"):
@@ -319,7 +319,7 @@ def _create_schema_property(self, prop):
319319
arg="pattern",
320320
value=ast.Call(
321321
func=ast.Name(id="re.compile"),
322-
args=[ast.Str(s=prop.name[1:-1], kind="str")],
322+
args=[ast.Str(s=prop.name[1:-1], kind=None)],
323323
keywords=[],
324324
),
325325
),
@@ -433,16 +433,16 @@ def _create_discriminator_field(self, type_obj):
433433
arg="discriminator_field",
434434
value=ast.Tuple(
435435
elts=[
436-
ast.Str(s=field.name, kind="str"),
437-
ast.Str(s=field.attribute_name, kind="str"),
436+
ast.Str(s=field.name, kind=None),
437+
ast.Str(s=field.attribute_name, kind=None),
438438
]
439439
),
440440
),
441441
ast.keyword(
442442
arg="discriminator_schemas",
443443
value=ast.Dict(
444-
keys=[ast.Str(s=v, kind="str") for v in items.keys()],
445-
values=[ast.Str(s=v, kind="str") for v in items.values()],
444+
keys=[ast.Str(s=v, kind=None) for v in items.keys()],
445+
values=[ast.Str(s=v, kind=None) for v in items.values()],
446446
),
447447
),
448448
ast.keyword(arg="unknown", value=ast.Name(id="marshmallow.EXCLUDE")),
@@ -470,7 +470,7 @@ def _create_nested_field(self, type_obj):
470470
arg="nested",
471471
value=ast.Str(
472472
s=f"commercetools.schemas.{type_obj.package_name}.{type_obj.name}Schema",
473-
kind="str",
473+
kind=None,
474474
),
475475
),
476476
ast.keyword(arg="unknown", value=ast.Name(id="marshmallow.EXCLUDE")),
@@ -486,7 +486,7 @@ def _create_regex_call(self, field_name, method_name):
486486
func=ast.Attribute(
487487
value=ast.Subscript(
488488
value=ast.Attribute(value=ast.Name(id="self"), attr="fields"),
489-
slice=ast.Index(value=ast.Str(s=field_name, kind="str")),
489+
slice=ast.Index(value=ast.Str(s=field_name, kind=None)),
490490
),
491491
attr=method_name,
492492
),

codegen/generate_types.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def get_module_nodes(self):
4848
targets=[ast.Name(id="__all__")],
4949
value=ast.List(
5050
elts=[
51-
ast.Str(s=node.name, kind="str")
51+
ast.Str(s=node.name, kind=None)
5252
for node in sorted(
5353
type_nodes, key=operator.attrgetter("name")
5454
)
@@ -170,7 +170,7 @@ class FieldContainer(typing.Dict[K, V]):
170170
if value_type.name in BUILTIN_TYPES:
171171
value_node = BUILTIN_TYPES[value_type.name]
172172
else:
173-
value_node = ast.Str(s=value_type.name, kind="str")
173+
value_node = ast.Str(s=value_type.name, kind=None)
174174
bases = [
175175
ast.Subscript(
176176
value=ast.Name(id="typing.Dict"),
@@ -231,7 +231,7 @@ class ChannelRoleEnum(enum.Enum):
231231
body=[
232232
ast.Assign(
233233
targets=[ast.Name(id=enum_attr(val))],
234-
value=ast.Str(s=val, kind="str"),
234+
value=ast.Str(s=val, kind=None),
235235
)
236236
for val in resource.enum
237237
],
@@ -343,7 +343,7 @@ def build(self):
343343
)
344344
# Docstring
345345
doc_string = f"Corresponding marshmallow schema is :class:`commercetools.schemas.{self.resource.name}Schema`."
346-
class_node.body.append(ast.Expr(value=ast.Str(s=doc_string, kind="str")))
346+
class_node.body.append(ast.Expr(value=ast.Str(s=doc_string, kind=None)))
347347

348348
# Add the properties for the attr class
349349
for prop in self.resource.properties:
@@ -414,13 +414,13 @@ def _get_annotation_for_property(self, prop: raml_types.Property):
414414
elif prop.type.name in BUILTIN_TYPES:
415415
annotation_type = BUILTIN_TYPES[prop.type.name]
416416
elif prop.type.base and prop.type.base.name == "string" and not prop.type.enum:
417-
annotation_type = ast.Str(s="str", kind="str")
417+
annotation_type = ast.Str(s="str", kind=None)
418418
else:
419419
if self.resource.package_name != prop.type.package_name:
420420
self.generator.import_resource_typing(
421421
self.resource.package_name, prop.type.package_name, prop.type.name
422422
)
423-
annotation_type = ast.Str(s=prop.type.name, kind="str")
423+
annotation_type = ast.Str(s=prop.type.name, kind=None)
424424

425425
# use typing.List[]. We make an hardcoded exception for
426426
# resources ending on PagedQueryResponse and mark that as Sequence. The
@@ -540,7 +540,7 @@ def __init__(self, id: typing.Optional[int]=None) -> None:
540540
ast.keyword(
541541
arg=name,
542542
value=ast.Str(
543-
s=self.resource.discriminator_value, kind="str"
543+
s=self.resource.discriminator_value, kind=None,
544544
),
545545
)
546546
)
@@ -596,7 +596,7 @@ def __repr__(self) -> str:
596596
self.resource.name,
597597
", ".join(f"{attr}=%r" for attr in self.attribute_names),
598598
),
599-
kind="str",
599+
kind=None,
600600
),
601601
op=ast.Mod(),
602602
right=ast.Tuple(

codegen/main.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def generate():
6868

6969
for name, metadata in ast_nodes.items():
7070
filename = os.path.join(target_path, metadata["name"] + ".py")
71-
write_module(filename, metadata["ast"], new=True)
71+
write_module(filename, metadata["ast"])
7272

7373
# Generate types.py
7474
ast_nodes = generate_types_module(types)
@@ -91,11 +91,8 @@ def generate():
9191
write_module(filename, module_ast)
9292

9393

94-
def write_module(filename, ast, new=False):
95-
if new:
96-
content = astor.to_source(ast)
97-
else:
98-
content = astunparse.unparse(ast)
94+
def write_module(filename, ast):
95+
content = astor.to_source(ast)
9996
with open(filename, "w") as fh:
10097
fh.write("# DO NOT EDIT! This file is automatically generated\n")
10198
fh.write(content)

0 commit comments

Comments
 (0)