From 923afc613322f9a51425cabe243faa3b1d664696 Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Tue, 7 May 2024 08:41:20 +1200 Subject: [PATCH 1/3] Refactor _get_news_content_from_user to accept optional extension parameter --- src/towncrier/create.py | 6 ++-- src/towncrier/test/test_create.py | 56 +++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/towncrier/create.py b/src/towncrier/create.py index 28903f58..77433fca 100644 --- a/src/towncrier/create.py +++ b/src/towncrier/create.py @@ -167,7 +167,7 @@ def __main( if edit: if content == DEFAULT_CONTENT: content = "" - content = _get_news_content_from_user(content) + content = _get_news_content_from_user(content, extension=filename_ext) if not content: click.echo("Aborted creating news fragment due to empty message.") ctx.exit(1) @@ -180,14 +180,14 @@ def __main( click.echo(f"Created news fragment at {segment_file}") -def _get_news_content_from_user(message: str) -> str: +def _get_news_content_from_user(message: str, extension: str = "") -> str: initial_content = """ # Please write your news content. Lines starting with '#' will be ignored, and # an empty message aborts. """ if message: initial_content = f"{message}\n{initial_content}" - content = click.edit(initial_content) + content = click.edit(initial_content, extension=extension or ".txt") if content is None: return message all_lines = content.split("\n") diff --git a/src/towncrier/test/test_create.py b/src/towncrier/test/test_create.py index e946f201..2ba74af9 100644 --- a/src/towncrier/test/test_create.py +++ b/src/towncrier/test/test_create.py @@ -63,7 +63,8 @@ def test_edit_without_comments(self): self._test_success(content=content, additional_args=["--edit"]) mock_edit.assert_called_once_with( "\n# Please write your news content. Lines starting " - "with '#' will be ignored, and\n# an empty message aborts.\n" + "with '#' will be ignored, and\n# an empty message aborts.\n", + extension=".rst", ) def test_edit_with_comment(self): @@ -87,6 +88,56 @@ def test_edit_abort(self): self.assertEqual([], os.listdir("foo/newsfragments")) self.assertEqual(1, result.exit_code) + def test_edit_markdown_extension(self): + """ + The temporary file extension used when editing is ``.md`` if the main filename + also uses that extension. + """ + + with mock.patch("click.edit") as mock_edit: + mock_edit.return_value = "This is line 1" + self._test_success( + content=["This is line 1"], + config=dedent( + """\ + [tool.towncrier] + package = "foo" + filename = "README.md" + """ + ), + additional_args=["--edit"], + ) + mock_edit.assert_called_once_with( + "\n# Please write your news content. Lines starting " + "with '#' will be ignored, and\n# an empty message aborts.\n", + extension=".md", + ) + + def test_edit_unknown_extension(self): + """ + The temporary file extension used when editing is ``.txt`` if it the main + filename isn't ``.rst`` or ``.md``. + """ + + with mock.patch("click.edit") as mock_edit: + mock_edit.return_value = "This is line 1" + self._test_success( + content=["This is line 1"], + config=dedent( + """\ + [tool.towncrier] + package = "foo" + filename = "README.FIRST" + """ + ), + additional_args=["--edit"], + ) + mock_edit.assert_called_once_with( + "\n# Please write your news content. Lines starting " + "with '#' will be ignored, and\n# an empty message aborts.\n", + extension=".txt", + ) + def test_content(self): """ When creating a new fragment the content can be passed as a @@ -132,7 +183,8 @@ def test_message_and_edit(self): ) mock_edit.assert_called_once_with( f"{content_line}\n\n# Please write your news content. Lines starting " - "with '#' will be ignored, and\n# an empty message aborts.\n" + "with '#' will be ignored, and\n# an empty message aborts.\n", + extension=".rst", ) def test_different_directory(self): From c26b04d68e7e935f4f1bec19ddf5be773041784f Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Tue, 7 May 2024 08:46:49 +1200 Subject: [PATCH 2/3] Document change --- src/towncrier/newsfragments/+2275a42e.feature.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/towncrier/newsfragments/+2275a42e.feature.rst diff --git a/src/towncrier/newsfragments/+2275a42e.feature.rst b/src/towncrier/newsfragments/+2275a42e.feature.rst new file mode 100644 index 00000000..0f8d1296 --- /dev/null +++ b/src/towncrier/newsfragments/+2275a42e.feature.rst @@ -0,0 +1 @@ +The temporary file ``towncrier create`` creates now uses the correct ``.rst`` or ``.md`` extension, which may help your editor with with syntax highlighting. From 40c8b82588cc53cd2290cd2a45b260d4a8a069d2 Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Tue, 7 May 2024 08:49:31 +1200 Subject: [PATCH 3/3] Update fragment name --- .../newsfragments/{+2275a42e.feature.rst => 594.feature.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/towncrier/newsfragments/{+2275a42e.feature.rst => 594.feature.rst} (100%) diff --git a/src/towncrier/newsfragments/+2275a42e.feature.rst b/src/towncrier/newsfragments/594.feature.rst similarity index 100% rename from src/towncrier/newsfragments/+2275a42e.feature.rst rename to src/towncrier/newsfragments/594.feature.rst