Skip to content

Commit 48e1f44

Browse files
committed
Adding sdk
1 parent 5048793 commit 48e1f44

File tree

4 files changed

+98
-79
lines changed

4 files changed

+98
-79
lines changed

cloudformation_docs/cli.py

Lines changed: 3 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,10 @@
11
import click
22
import json
3-
import logging
43
from cfn_flip import to_json
54

6-
from jinja2 import Template
5+
from . import core
76

8-
logger = logging.getLogger()
9-
logger.setLevel(logging.INFO)
107

11-
12-
def get_parameters(template):
13-
params = template.get('Parameters')
14-
if not params:
15-
params = template.get('parameters')
16-
if not params:
17-
params = []
18-
return params
19-
20-
21-
def get_resources(template):
22-
resources = template.get('Resources')
23-
if not resources:
24-
resources = template.get('resources')
25-
if not resources:
26-
resources = []
27-
return resources
28-
29-
30-
def get_outputs(template):
31-
outputs = template.get('Outputs')
32-
if not outputs:
33-
outputs = template.get('outputs')
34-
if not outputs:
35-
outputs = []
36-
return outputs
37-
38-
39-
def get_description(template):
40-
description = template.get("Description")
41-
if not description:
42-
description = template.get('description')
43-
if not description:
44-
description = "No Template description set"
45-
return description
46-
47-
TEMPLATE = """# {{ name }}
48-
# Description
49-
{{ description }}
50-
51-
## Parameters
52-
The list of parameters for this template:
53-
{% for parameter in parameters %}
54-
### {{ parameter }}
55-
Type: {{ parameters[parameter].Type }} {% if parameters[parameter].Default %}
56-
Default: {{ parameters[parameter].Default}}{% endif %} {% if parameters[parameter].Description %}
57-
Description: {{ parameters[parameter].Description}}{% endif %} {% endfor %}
58-
59-
## Resources
60-
The list of resources this template creates:
61-
{% for resource in resources %}
62-
### {{ resource }}
63-
Type: {{ resources[resource].Type }} {% if resources[resource].Description %}
64-
Description: {{ resources[resource].Description}}{% endif %} {% endfor %}
65-
66-
## Outputs
67-
The list of outputs this template exposes:
68-
{% for output in outputs %}
69-
### {{ output }}
70-
{% if outputs[output].Description %}Description: {{ outputs[output].Description}}{% endif %}{% if outputs[output].Export %}
71-
Export name: {{ outputs[output].Export.Name }}{% endif %}
72-
{% endfor %}
73-
"""
748
@click.command()
759
@click.argument('f', type=click.File())
7610
def generate(f):
@@ -82,18 +16,9 @@ def generate(f):
8216
else:
8317
raise Exception("{}: not a valid file extension".format(extension))
8418
template = json.loads(j)
85-
description = get_description(template)
86-
parameters = get_parameters(template)
87-
resources = get_resources(template)
88-
outputs = get_outputs(template)
19+
result = core.generate(template, ".".join(f.name.split(".")[0:-1]))
20+
click.echo(result)
8921

90-
click.echo(Template(TEMPLATE).render(
91-
name=f.name.replace(".{}".format(extension), ''),
92-
description=description,
93-
parameters=parameters,
94-
resources=resources,
95-
outputs=outputs,
96-
))
9722

9823
if __name__ == "__main__":
9924
generate()

cloudformation_docs/core.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from jinja2 import Template
2+
3+
4+
def get_parameters(template):
5+
params = template.get('Parameters')
6+
if not params:
7+
params = template.get('parameters')
8+
if not params:
9+
params = []
10+
return params
11+
12+
13+
def get_resources(template):
14+
resources = template.get('Resources')
15+
if not resources:
16+
resources = template.get('resources')
17+
if not resources:
18+
resources = []
19+
return resources
20+
21+
22+
def get_outputs(template):
23+
outputs = template.get('Outputs')
24+
if not outputs:
25+
outputs = template.get('outputs')
26+
if not outputs:
27+
outputs = []
28+
return outputs
29+
30+
31+
def get_description(template):
32+
description = template.get("Description")
33+
if not description:
34+
description = template.get('description')
35+
if not description:
36+
description = "No Template description set"
37+
return description
38+
39+
40+
TEMPLATE = """# {{ name }}
41+
# Description
42+
{{ description }}
43+
44+
## Parameters
45+
The list of parameters for this template:
46+
{% for parameter in parameters %}
47+
### {{ parameter }}
48+
Type: {{ parameters[parameter].Type }} {% if parameters[parameter].Default %}
49+
Default: {{ parameters[parameter].Default}}{% endif %} {% if parameters[parameter].Description %}
50+
Description: {{ parameters[parameter].Description}}{% endif %} {% endfor %}
51+
52+
## Resources
53+
The list of resources this template creates:
54+
{% for resource in resources %}
55+
### {{ resource }}
56+
Type: {{ resources[resource].Type }} {% if resources[resource].Description %}
57+
Description: {{ resources[resource].Description}}{% endif %} {% endfor %}
58+
59+
## Outputs
60+
The list of outputs this template exposes:
61+
{% for output in outputs %}
62+
### {{ output }}
63+
{% if outputs[output].Description %}Description: {{ outputs[output].Description}}{% endif %}{% if outputs[output].Export %}
64+
Export name: {{ outputs[output].Export.Name }}{% endif %}
65+
{% endfor %}
66+
"""
67+
68+
69+
def generate(template, name):
70+
description = get_description(template)
71+
parameters = get_parameters(template)
72+
resources = get_resources(template)
73+
outputs = get_outputs(template)
74+
75+
return Template(TEMPLATE).render(
76+
name=name,
77+
description=description,
78+
parameters=parameters,
79+
resources=resources,
80+
outputs=outputs,
81+
)

cloudformation_docs/sdk.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from . import core
2+
import json
3+
import yaml
4+
5+
6+
def generate_from_json(template_content, name):
7+
result = core.generate(json.loads(template_content), name)
8+
return result
9+
10+
11+
def generate_from_yaml(template_content, name):
12+
result = core.generate(yaml.safe_load(template_content), name)
13+
return result

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
setuptools.setup(
1010
name="cloudformation-docs",
11-
version="0.2.0",
11+
version="0.3.0",
1212
author="Eamonn Faherty",
1313
author_email="packages@designandsolve.co.uk",
1414
description="Generate docs from cloudformation templates",

0 commit comments

Comments
 (0)