From bb91d88b18855c5c9b3587f89bb806faa7f34d14 Mon Sep 17 00:00:00 2001 From: Michael Makukha Date: Thu, 13 Feb 2025 13:43:46 +0200 Subject: [PATCH 1/5] Allow integer md_header_level --- src/scriv/config.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/scriv/config.py b/src/scriv/config.py index 8a09d0a..28db303 100644 --- a/src/scriv/config.py +++ b/src/scriv/config.py @@ -121,7 +121,8 @@ class _Options: md_header_level = attr.ib( type=str, default="1", - validator=attr.validators.matches_re(r"[123456]"), + validator=attr.validators.in_((*"123456", 1, 2, 3, 4, 5, 6)), + converter=str, metadata={ "doc": """\ A number: for Markdown changelog files, this is the heading @@ -352,6 +353,8 @@ def read_one_toml(self, tomlfile: str) -> None: except KeyError: pass else: + if attrdef.converter is not None: + val = attrdef.converter(val) setattr(self._options, attrdef.name, val) def resolve_value(self, value: str) -> str: From d17490473cd4e226189d067507c664a60724f056 Mon Sep 17 00:00:00 2001 From: Michael Makukha Date: Tue, 18 Feb 2025 14:27:39 +0200 Subject: [PATCH 2/5] Fix lint errors --- src/scriv/config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scriv/config.py b/src/scriv/config.py index 28db303..5c019ef 100644 --- a/src/scriv/config.py +++ b/src/scriv/config.py @@ -121,8 +121,8 @@ class _Options: md_header_level = attr.ib( type=str, default="1", - validator=attr.validators.in_((*"123456", 1, 2, 3, 4, 5, 6)), - converter=str, + validator=attr.validators.matches_re(r"[123456]"), + converter=attr.converters.optional(str), metadata={ "doc": """\ A number: for Markdown changelog files, this is the heading @@ -353,7 +353,7 @@ def read_one_toml(self, tomlfile: str) -> None: except KeyError: pass else: - if attrdef.converter is not None: + if callable(attrdef.converter): val = attrdef.converter(val) setattr(self._options, attrdef.name, val) From 78abf60e743726b1ea14e330d318c1eb3ee9ad9a Mon Sep 17 00:00:00 2001 From: Michael Makukha Date: Tue, 18 Feb 2025 14:27:49 +0200 Subject: [PATCH 3/5] Add tests --- tests/test_config.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_config.py b/tests/test_config.py index 7d9f147..7cff046 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -66,6 +66,7 @@ "Gone", "Bad", ] +# other scriv options ["more stuff"] value = 17 @@ -345,6 +346,17 @@ def test_no_toml_installed_no_settings(self, temp_dir): config = Config.read() assert config.categories[0] == "Removed" + def test_nonstring_options(self, temp_dir): + # Some config options are allowed to be e.g. TOML integers; for these, + # both string and non-string values are valid. + marker = "# other scriv options" + for value in ('"6"', "6"): + custom = f"{marker}\nmd_header_level = {value}" + CUSTOM_TOML = TOML_CONFIG.replace(marker, custom) + (temp_dir / "pyproject.toml").write_text(CUSTOM_TOML) + config = Config.read() + assert config.md_header_level == "6" + @pytest.mark.parametrize( "cmd_output, result", From ecbe56bc17b9959fb1ecfec16bae68a8ea2e9b40 Mon Sep 17 00:00:00 2001 From: Michael Makukha Date: Tue, 18 Feb 2025 14:28:00 +0200 Subject: [PATCH 4/5] Add changelog fragment --- ...header_level_should_be_read_as_an_int_in_toml_files.rst | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 changelog.d/20250218_141622_makukha_90_md_header_level_should_be_read_as_an_int_in_toml_files.rst diff --git a/changelog.d/20250218_141622_makukha_90_md_header_level_should_be_read_as_an_int_in_toml_files.rst b/changelog.d/20250218_141622_makukha_90_md_header_level_should_be_read_as_an_int_in_toml_files.rst new file mode 100644 index 0000000..8ed670b --- /dev/null +++ b/changelog.d/20250218_141622_makukha_90_md_header_level_should_be_read_as_an_int_in_toml_files.rst @@ -0,0 +1,7 @@ +Added +..... + +- Configuration setting ``md_header_level`` is allowed to be an integer in + TOML files, closing `issue 90`_. + +.. _issue 90: https://github.com/nedbat/scriv/issues/90 From 4708fd0a4cb15b4d39f1389b2b656066e3916f92 Mon Sep 17 00:00:00 2001 From: Michael Makukha Date: Tue, 18 Feb 2025 17:54:32 +0200 Subject: [PATCH 5/5] Fix toml test error --- tests/test_config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_config.py b/tests/test_config.py index 7cff046..b053097 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -346,6 +346,7 @@ def test_no_toml_installed_no_settings(self, temp_dir): config = Config.read() assert config.categories[0] == "Removed" + @pytest.mark.skipif(tomllib is None, reason="No TOML support installed") def test_nonstring_options(self, temp_dir): # Some config options are allowed to be e.g. TOML integers; for these, # both string and non-string values are valid.