From 7f09c00cd11e32b4333958636e41b1adfc56adcf Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Wed, 17 Mar 2021 12:13:06 +0000 Subject: [PATCH 1/4] Consider underscores in the keys of setup.cfg This change should fix the errors identified in the CI for https://github.com/pyscaffold/pyscaffoldext-dsproject/pull/19. The latest changes in PyScaffold replace `-` with `_` in `setup.cfg`, therefore we should not refer to sections using dashes. --- src/pyscaffoldext/markdown/extension.py | 19 ++++++++--- tests/test_markdown.py | 42 +++++++++++++++++++++++-- tox.ini | 2 ++ 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/pyscaffoldext/markdown/extension.py b/src/pyscaffoldext/markdown/extension.py index 39340aa..9a910d7 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.name = 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.name = 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() diff --git a/tox.ini b/tox.ini index acdd8c7..a08ab0d 100644 --- a/tox.ini +++ b/tox.ini @@ -14,6 +14,8 @@ setenv = TOXINIDIR = {toxinidir} passenv = HOME +deps: + setuptools_scm<6 extras = testing commands = From 1b2f57e5cadc4d57fa76839fe2518402a5628856 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Wed, 17 Mar 2021 13:09:09 +0000 Subject: [PATCH 2/4] Fix misusage of ConfigUpdater `Option` objects use `key` instead of `name` (`name` is for `Section` objects) --- src/pyscaffoldext/markdown/extension.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pyscaffoldext/markdown/extension.py b/src/pyscaffoldext/markdown/extension.py index 9a910d7..e788fcc 100644 --- a/src/pyscaffoldext/markdown/extension.py +++ b/src/pyscaffoldext/markdown/extension.py @@ -43,13 +43,13 @@ def add_long_desc(content: str) -> str: metadata = updater["metadata"] long_desc = metadata.get(dasherize(DESC_KEY)) or metadata.get(DESC_KEY) - long_desc.name = DESC_KEY # dash-separated keys are deprecated in setuptools + 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" long_desc_type = metadata.get(dasherize(TYPE_KEY)) or metadata.get(TYPE_KEY) if long_desc_type: - long_desc_type.name = TYPE_KEY + long_desc_type.key = TYPE_KEY long_desc_type.value = long_desc_value else: long_desc.add_after.option(TYPE_KEY, long_desc_value) From 99c0d7229e43daf92de6b4eaf26dcd3bad08c6f1 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Wed, 17 Mar 2021 17:05:24 +0000 Subject: [PATCH 3/4] Update CHANGELOG for 0.4.1 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) 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 From fb9055c8a0e6bd5f18e201d75df665fce74e02e5 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Thu, 18 Mar 2021 09:15:05 +0000 Subject: [PATCH 4/4] Remove setuptools_scm<6 workaround now that PyScaffold v4.0.1 is available --- tox.ini | 2 -- 1 file changed, 2 deletions(-) diff --git a/tox.ini b/tox.ini index a08ab0d..acdd8c7 100644 --- a/tox.ini +++ b/tox.ini @@ -14,8 +14,6 @@ setenv = TOXINIDIR = {toxinidir} passenv = HOME -deps: - setuptools_scm<6 extras = testing commands =