diff --git a/CHANGELOG.md b/CHANGELOG.md index 887df39c..3181cf01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Changed +* Keywords are trimmed and empty ones dropped in `pyproject.toml` and `CITATION.cff`; an empty answer leaves out `keywords` in `CITATION.cff` [#715](https://github.com/NLeSC/python-template/pull/715) * Following [PEP 639](https://peps.python.org/pep-0639/#specification), updated `license` and `license-files` keys in `pyproject.toml` [#707](https://github.com/NLeSC/python-template/pull/707) * Update CI actions to use Python 3.14 instead of 3.12 [#703](https://github.com/NLeSC/python-template/pull/703) * Recommend `ruff format` instead of `yapf` for fixing code style readability [#695](https://github.com/NLeSC/python-template/pull/695) diff --git a/template/pyproject.toml.jinja b/template/pyproject.toml.jinja index 7c19c0bc..12253984 100644 --- a/template/pyproject.toml.jinja +++ b/template/pyproject.toml.jinja @@ -24,7 +24,7 @@ classifiers = [ dependencies = [] description = "{{ package_short_description|replace('\"', '\\\"') }}" keywords = [ -{%- for item in keywords.split(',') -%} +{%- for item in keywords.split(',') | map('trim') | reject('equalto', '') -%} "{{ item }}"{{ "," if not loop.last }} {%- endfor -%} ] diff --git a/template/{% if AddCitation %}CITATION.cff{% endif %}.jinja b/template/{% if AddCitation %}CITATION.cff{% endif %}.jinja index 699d11fe..7b0cbffa 100644 --- a/template/{% if AddCitation %}CITATION.cff{% endif %}.jinja +++ b/template/{% if AddCitation %}CITATION.cff{% endif %}.jinja @@ -9,8 +9,11 @@ authors: date-released: {{ '%Y-%m-%d' | strftime }} version: "{{ version }}" repository-code: "{{ repository_url }}" +{%- set keyword_list = keywords.split(',') | map('trim') | reject('equalto', '') | list %} +{%- if keyword_list %} keywords: -{%- for item in keywords.split(',') %} +{%- for item in keyword_list %} - "{{ item }}" {%- endfor %} +{%- endif %} message: "If you use this software, please cite it using these metadata." diff --git a/tests/test_values.py b/tests/test_values.py index 6bb78dad..ff54d13e 100644 --- a/tests/test_values.py +++ b/tests/test_values.py @@ -1,3 +1,5 @@ +import tomllib + from test_project import copier_project_defaults def test_double_quotes_in_name_and_description(copie, copier_project_defaults): @@ -22,3 +24,26 @@ def test_single_quotes_in_name_and_description(copie, copier_project_defaults): project = copie.copy(extra_answers=project_defaults) assert project.exit_code == 0 + + +def test_keywords_are_trimmed(copie, copier_project_defaults): + project_defaults = copier_project_defaults + project_defaults.update({"keywords": "kw1, second kw , kw3"}) + project = copie.copy(extra_answers=project_defaults) + + assert project.exit_code == 0 + pyproject = tomllib.loads((project.project_dir / "pyproject.toml").read_text()) + assert pyproject["project"]["keywords"] == ["kw1", "second kw", "kw3"] + citation = (project.project_dir / "CITATION.cff").read_text() + assert ' - "kw1"\n - "second kw"\n - "kw3"\n' in citation + + +def test_empty_keywords_are_omitted(copie, copier_project_defaults): + project_defaults = copier_project_defaults + project_defaults.update({"keywords": ""}) + project = copie.copy(extra_answers=project_defaults) + + assert project.exit_code == 0 + pyproject = tomllib.loads((project.project_dir / "pyproject.toml").read_text()) + assert pyproject["project"]["keywords"] == [] + assert "keywords" not in (project.project_dir / "CITATION.cff").read_text()