diff --git a/setup.py b/setup.py index f5171e62..c80f25d4 100644 --- a/setup.py +++ b/setup.py @@ -49,6 +49,7 @@ "setuptools", "toml; python_version < '3.6'", "tomli; python_version >= '3.6'", + "python-dateutil", ], extras_require={"dev": ["packaging"]}, package_dir={"": "src"}, diff --git a/src/towncrier/build.py b/src/towncrier/build.py index 2f02eec2..e83e3581 100644 --- a/src/towncrier/build.py +++ b/src/towncrier/build.py @@ -12,6 +12,7 @@ import sys from datetime import date +from dateutil.parser import parse from ._settings import load_config_from_options, ConfigError from ._builder import find_fragments, split_fragments, render_fragments @@ -20,10 +21,6 @@ from ._git import remove_files, stage_newsfile -def _get_date(): - return date.today().isoformat() - - @click.command(name="build") @click.option( "--draft", @@ -135,7 +132,9 @@ def __main( project_name = "" if project_date is None: - project_date = _get_date().strip() + project_date = date.today() + else: + project_date = parse(project_date).date() if config["title_format"]: top_line = config["title_format"].format( diff --git a/src/towncrier/newsfragments/349.enhancement b/src/towncrier/newsfragments/349.enhancement new file mode 100644 index 00000000..38bab88c --- /dev/null +++ b/src/towncrier/newsfragments/349.enhancement @@ -0,0 +1 @@ +The `versiondata.date` is not `date` instance. This allows users to customize the date rendering in the template with `strftime`, like so: `{{versiondata.date.strftime("%B")}}`. diff --git a/src/towncrier/templates/default.rst b/src/towncrier/templates/default.rst index ac551dfa..f754c0d7 100644 --- a/src/towncrier/templates/default.rst +++ b/src/towncrier/templates/default.rst @@ -3,10 +3,10 @@ {{ top_underline * ((top_line)|length)}} {% elif versiondata.name %} {{ versiondata.name }} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.name + versiondata.version + versiondata.date)|length + 4)}} +{{ top_underline * ((versiondata.name + versiondata.version)|length + 4)}}{{ top_underline * (versiondata.date|title|length)}} {% else %} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.version + versiondata.date)|length + 3)}} +{{ top_underline * (versiondata.version|length + 3)}}{{ top_underline * (versiondata.date|title|length)}} {% endif %} {% for section, _ in sections.items() %} {% set underline = underlines[0] %}{% if section %}{{section}} diff --git a/src/towncrier/templates/hr-between-versions.rst b/src/towncrier/templates/hr-between-versions.rst index 8c655571..6f18de2f 100644 --- a/src/towncrier/templates/hr-between-versions.rst +++ b/src/towncrier/templates/hr-between-versions.rst @@ -1,9 +1,9 @@ {% if versiondata.name %} {{ versiondata.name }} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.name + versiondata.version + versiondata.date)|length + 4)}} +{{ top_underline * ((versiondata.name + versiondata.versiondata)|length + 4)}}{{ top_underline * (versiondata.date|title|length)}} {% else %} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.version + versiondata.date)|length + 3)}} +{{ top_underline * (versiondata.version|length + 3)}}{{ top_underline * (versiondata.date|title|length)}} {% endif %} {% for section, _ in sections.items() %} {% set underline = underlines[0] %}{% if section %}{{section}} diff --git a/src/towncrier/templates/single-file-no-bullets.rst b/src/towncrier/templates/single-file-no-bullets.rst index 7b065446..77af195e 100644 --- a/src/towncrier/templates/single-file-no-bullets.rst +++ b/src/towncrier/templates/single-file-no-bullets.rst @@ -1,9 +1,9 @@ {% if versiondata.name %} {{ versiondata.name }} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.name + versiondata.version + versiondata.date)|length + 4)}} +{{ top_underline * ((versiondata.name + versiondata.version)|length + 4)}}{{ top_underline * (versiondata.date|title|length)}} {% else %} {{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.version + versiondata.date)|length + 3)}} +{{ top_underline * (versiondata.version|length + 3)}}{{ top_underline * (versiondata.date|title|length)}} {% endif %} {% for section, _ in sections.items() %} {% set underline = underlines[0] %}{% if section %}{{section}} diff --git a/src/towncrier/test/templates/date.rst b/src/towncrier/test/templates/date.rst new file mode 100644 index 00000000..3e8879b2 --- /dev/null +++ b/src/towncrier/test/templates/date.rst @@ -0,0 +1,45 @@ +{% if top_line %} +{{ top_line }} +{{ top_underline * ((top_line)|length)}} +{% elif versiondata.name %} +{{ versiondata.name }} {{ versiondata.version }} ({{ versiondata.date }} / {{ versiondata.date|date:"D d M Y" }}) +{{ top_underline * ((versiondata.name + versiondata.version)|length + 4)}}{{ top_underline * (versiondata.date|title|length)}} +{% else %} +{{ versiondata.version }} ({{ versiondata.date }} # {{ versiondata.date|date:"D d M Y" }}) +{{ top_underline * (versiondata.version|length + 3)}}{{ top_underline * (versiondata.date|title|length)}} +{% endif %} +{% for section, _ in sections.items() %} +{% set underline = underlines[0] %}{% if section %}{{section}} +{{ underline * section|length }}{% set underline = underlines[1] %} + +{% endif %} + +{% if sections[section] %} +{% for category, val in definitions.items() if category in sections[section]%} +{{ definitions[category]['name'] }} +{{ underline * definitions[category]['name']|length }} + +{% if definitions[category]['showcontent'] %} +{% for text, values in sections[section][category].items() %} +- {{ text }} ({{ values|join(', ') }}) +{% endfor %} + +{% else %} +- {{ sections[section][category]['']|join(', ') }} + +{% endif %} +{% if sections[section][category]|length == 0 %} +No significant changes. + +{% else %} +{% endif %} + +{% endfor %} +{% else %} +No significant changes. + + +{% endif %} +{% endfor %} + + diff --git a/src/towncrier/test/test_write.py b/src/towncrier/test/test_write.py index 12c5bad8..d678ceed 100644 --- a/src/towncrier/test/test_write.py +++ b/src/towncrier/test/test_write.py @@ -271,3 +271,47 @@ def test_multiple_file_no_start_string(self): """) self.assertEqual(expected_output, output) + + +def test_dateformat(self): + """ + Testing support of dateformat filter during template rendering. + """ + tempdir = self.mktemp() + os.mkdir(tempdir) + + definitions = {} + fragments = split_fragments(fragments={}, definitions=definitions) + + template = pkg_resources.resource_string( + "towncrier", "test/templates/date.rst" + ).decode("utf8") + + content = render_fragments( + template=template, + issue_format=None, + top_line="", + fragments=fragments, + definitions=definitions, + underlines=["-", "~"], + wrap=True, + versiondata={"name": "MyProject", "version": "1.0", "date": "13.3.2022"}, + ) + + append_to_newsfile( + directory=tempdir, + filename="NEWS.rst", + start_string=None, + top_line="", + content=content, + ) + + with open(os.path.join(tempdir, "NEWS.rst"), "r") as f: + output = f.read() + + expected_output = dedent("""\ + MyProject 1.0 (1.1.2001 / Sun 13 Mar 2022) + ========================================== + """) + + self.assertEqual(expected_output, output)