diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ceb70a..7cab500 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## Version 0.4.1 (development) - Latest updates from PyScaffold +- Fix issue with kebab-cased-keys in `setup.cfg`, PR #13 ## Version 0.4 diff --git a/src/pyscaffoldext/markdown/extension.py b/src/pyscaffoldext/markdown/extension.py index 39340aa..e788fcc 100644 --- a/src/pyscaffoldext/markdown/extension.py +++ b/src/pyscaffoldext/markdown/extension.py @@ -8,6 +8,7 @@ from pyscaffold import file_system as fs from pyscaffold.actions import Action, ActionParams, ScaffoldOpts, Structure from pyscaffold.extensions import Extension +from pyscaffold.identification import dasherize from pyscaffold.log import logger from pyscaffold.operations import FileContents, FileOp, no_overwrite from pyscaffold.structure import merge, reify_leaf, reject @@ -19,6 +20,8 @@ __copyright__ = "Florian Wilhelm" __license__ = "MIT" +DESC_KEY = "long_description" +TYPE_KEY = "long_description_content_type" DOC_REQUIREMENTS = ["recommonmark"] @@ -38,13 +41,19 @@ def add_long_desc(content: str) -> str: updater = ConfigUpdater() updater.read_string(content) metadata = updater["metadata"] - metadata["long-description"].value = "file: README.md" - long_desc_type = "long-description-content-type" + + long_desc = metadata.get(dasherize(DESC_KEY)) or metadata.get(DESC_KEY) + long_desc.key = DESC_KEY # dash-separated keys are deprecated in setuptools + long_desc.value = "file: README.md" long_desc_value = "text/markdown; charset=UTF-8; variant=GFM" - if long_desc_type not in metadata: - metadata["long-description"].add_after.option(long_desc_type, long_desc_value) + + long_desc_type = metadata.get(dasherize(TYPE_KEY)) or metadata.get(TYPE_KEY) + if long_desc_type: + long_desc_type.key = TYPE_KEY + long_desc_type.value = long_desc_value else: - metadata[long_desc_type].value = long_desc_value + long_desc.add_after.option(TYPE_KEY, long_desc_value) + return str(updater) diff --git a/tests/test_markdown.py b/tests/test_markdown.py index 8c40c55..71fc1d5 100644 --- a/tests/test_markdown.py +++ b/tests/test_markdown.py @@ -1,10 +1,11 @@ from configparser import ConfigParser +from textwrap import dedent import pytest from pyscaffold import __version__ as pyscaffold_version from pyscaffold import api, cli -from pyscaffoldext.markdown.extension import DOC_REQUIREMENTS, Markdown +from pyscaffoldext.markdown.extension import DOC_REQUIREMENTS, Markdown, add_long_desc CONV_FILES = [ "README", @@ -17,6 +18,42 @@ ] +def test_underscore_keys(): + # Dash-separated keys for setup.cfg were deprecated by setuptools, so it is good to + # ensure they don't occur + examples = [ + """\ + [metadata] + long-description: a-pkg + long-description-content-type: text/x-rst + """, + """\ + [metadata] + long_description: a-pkg + long_description_content_type: text/x-rst + """, + """\ + [metadata] + long-description: a-pkg + """, + """\ + [metadata] + long_description: a-pkg + """, + ] + + for example in examples: + modified = add_long_desc(dedent(example)) + cfg = ConfigParser() + cfg.read_string(modified) + options = list(cfg["metadata"].keys()) + print(modified) + assert "long_description" in options + assert "long_description_content_type" in options + assert "long-description" not in options + assert "long-description-content-type" not in options + + @pytest.mark.slow def test_create_project_with_markdown(tmpfolder): # Given options with the markdown extension, @@ -42,7 +79,8 @@ def test_create_project_with_markdown(tmpfolder): existing_setup = (tmpfolder / "proj/setup.cfg").read_text() cfg = ConfigParser() cfg.read_string(existing_setup) - assert "text/markdown" in str(cfg["metadata"]["long-description-content-type"]) + assert "text/markdown" in str(cfg["metadata"]["long_description_content_type"]) + assert "file: README" in str(cfg["metadata"]["long_description"]) # and new doc requirements should be added to docs/requirements.txt requirements_txt = (tmpfolder / "proj/docs/requirements.txt").read_text()