From 7093ce98dceaac91990b6c7ff872dcac5187d7d9 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Fri, 5 Jun 2020 11:08:19 +0100 Subject: [PATCH] Move doc template into packaged file, format improvements --- cloudbender/__init__.py | 2 +- cloudbender/stack.py | 40 +++++++++++------------------- cloudbender/templates/__init__.py | 0 cloudbender/templates/stack-doc.md | 27 ++++++++++++++++++++ setup.py | 1 + 5 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 cloudbender/templates/__init__.py create mode 100644 cloudbender/templates/stack-doc.md diff --git a/cloudbender/__init__.py b/cloudbender/__init__.py index 99dd756..708aae7 100644 --- a/cloudbender/__init__.py +++ b/cloudbender/__init__.py @@ -2,7 +2,7 @@ import logging __author__ = "Stefan Reimer" __email__ = "stefan@zero-downtimet.net" -__version__ = "0.8.4" +__version__ = "0.8.5" # Set up logging to ``/dev/null`` like a library is supposed to. diff --git a/cloudbender/stack.py b/cloudbender/stack.py index 35c5963..426ef68 100644 --- a/cloudbender/stack.py +++ b/cloudbender/stack.py @@ -20,6 +20,12 @@ from .exceptions import ParameterNotFound, ParameterIllegalValue import cfnlint.core +try: + import importlib.resources as pkg_resources +except ImportError: + import importlib_resources as pkg_resources +from . import templates + import logging logger = logging.getLogger(__name__) @@ -316,7 +322,7 @@ class Stack(object): except ClientError as e: raise e - def create_docs(self): + def create_docs(self, template=False): """ Read template, parse documentation fragments, eg. parameter description and create a mardown doc file for the stack same idea as eg. helm-docs for values.yaml @@ -324,31 +330,13 @@ class Stack(object): self.read_template_file() - doc_template = """ -{{ name }} -=== -{{ description }} - -{% if dependencies %} -## Dependencies -{% for d in dependencies|sort %} -- {{ d }} -{% endfor %} -{% endif %} - -{% if parameters %} -## Parameters -| Parameter | Type | Default | Format | Description | -|-----------|------|---------|--------|-------------| -{% for p in parameters.keys() %} -| {{ p }} | {{ parameters[p]['Type'] }} | {{ parameters[p]['Default'] }} | {{ parameters[p]['AllowedValues'] or parameters[p]['AllowedPattern']}} | {{ parameters[p]['Description'] }} | -{% endfor %} -{% endif %} -""" - - jenv = JinjaEnv() - template = jenv.from_string(doc_template) - data = {} + if not template: + doc_template = pkg_resources.read_text(templates, 'stack-doc.md') + jenv = JinjaEnv() + template = jenv.from_string(doc_template) + data = {} + else: + doc_template = template data['name'] = self.stackname data['description'] = self.cfn_data['Description'] diff --git a/cloudbender/templates/__init__.py b/cloudbender/templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cloudbender/templates/stack-doc.md b/cloudbender/templates/stack-doc.md new file mode 100644 index 0000000..4c84f50 --- /dev/null +++ b/cloudbender/templates/stack-doc.md @@ -0,0 +1,27 @@ +{{ name }} +=== +{{ description }} + +{% if dependencies %} +## Dependencies +{% for d in dependencies|sort %} +- {{ d }} +{% endfor %} +{% endif %} + +{% if parameters %} +## Parameters +| Parameter | Type | Default | Format | Description | +|-----------|------|---------|--------|-------------| +{% for p in parameters.keys() %} +{% if parameters[p]['AllowedValues'] or parameters[p]['AllowedPattern'] %} +{% set format = '`%s%s`' % (parameters[p]['AllowedValues'], parameters[p]['AllowedPattern']) %} +{% endif %} +{% if parameters[p]['Default'] and parameters[p]['Type'].lower() == "string" %} +{% set def = '`"%s"`' % parameters[p]['Default'] %} +{% else %} +{% set def = parameters[p]['Default'] %} +{% endif %} +| {{ p }} | {{ parameters[p]['Type'] | lower }} | {{ def }} | {{ format }} | {{ parameters[p]['Description'] }} | +{% endfor %} +{% endif %} diff --git a/setup.py b/setup.py index 78142a4..db4df29 100644 --- a/setup.py +++ b/setup.py @@ -53,6 +53,7 @@ setup( author_email='stefan@zero-downtime.net', url='https://git.zero-downtime.net/ZeroDownTime/CloudBender', packages=find_packages(), + package_data={ 'cloudbender': ['templates/*.md'], }, include_package_data=True, entry_points={'console_scripts': [ "cloudbender = cloudbender.cli:cli" ]}, install_requires=['boto3', 'Jinja2', 'oyaml', 'click', 'cfn-lint', 'pyminifier'],