From 152d720e45b4d281ab5f719825f9746a8a86a8d4 Mon Sep 17 00:00:00 2001 From: finswimmer Date: Fri, 7 Aug 2020 00:00:41 +0200 Subject: [PATCH] command/new: make readme format configurable This change makes readme formant configurable, defaulting to markdown when using the new command. Resolves: #280 Closes: #1515 Co-authored-by: Arun Babu Neelicattu --- docs/docs/cli.md | 5 +++-- poetry/console/commands/new.py | 8 ++++++- tests/console/commands/test_new.py | 35 ++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/docs/docs/cli.md b/docs/docs/cli.md index fa945f413b0..af7c8b1a81a 100644 --- a/docs/docs/cli.md +++ b/docs/docs/cli.md @@ -31,7 +31,7 @@ will create a folder as follows: ```text my-package ├── pyproject.toml -├── README.rst +├── README.md ├── my_package │ └── __init__.py └── tests @@ -56,7 +56,7 @@ That will create a folder structure as follows: ```text my-package ├── pyproject.toml -├── README.rst +├── README.md ├── src │ └── my_package │ └── __init__.py @@ -76,6 +76,7 @@ will create the following structure: ```text my-package ├── pyproject.toml +├── README.md ├── src │ └── my │ └── package diff --git a/poetry/console/commands/new.py b/poetry/console/commands/new.py index 7e40b48414c..8158442f741 100644 --- a/poetry/console/commands/new.py +++ b/poetry/console/commands/new.py @@ -15,6 +15,12 @@ class NewCommand(Command): options = [ option("name", None, "Set the resulting package name.", flag=False), option("src", None, "Use the src layout for the project."), + option( + "readme", + None, + "Specify the readme file format. One of md (default) or rst", + flag=False, + ), ] def handle(self) -> None: @@ -46,7 +52,7 @@ def handle(self) -> None: "exists and is not empty".format(path) ) - readme_format = "rst" + readme_format = self.option("readme") or "md" config = GitConfig() author = None diff --git a/tests/console/commands/test_new.py b/tests/console/commands/test_new.py index 1ac42facd04..0df5149ae0c 100644 --- a/tests/console/commands/test_new.py +++ b/tests/console/commands/test_new.py @@ -1,21 +1,20 @@ -import pytest +from pathlib import Path +from typing import Optional -from cleo.testers import CommandTester +import pytest -from poetry.console import Application from poetry.factory import Factory from poetry.poetry import Poetry -from poetry.utils._compat import Path # noqa @pytest.fixture -def command(app, poetry): # type: (Application, Poetry) -> CommandTester - command = app.find("new") - command._pool = poetry.pool - return CommandTester(command) +def tester(command_tester_factory): + return command_tester_factory("new") -def verify_project_directory(path, package_name, package_path, include_from=None): +def verify_project_directory( + path: Path, package_name: str, package_path: str, include_from: Optional[str] = None +) -> Poetry: package_path = Path(package_path) assert path.is_dir() @@ -47,6 +46,8 @@ def verify_project_directory(path, package_name, package_path, include_from=None assert len(packages) == 1 assert packages[0] == package_include + return poetry + @pytest.mark.parametrize( "options,directory,package_name,package_path,include_from", @@ -134,9 +135,21 @@ def verify_project_directory(path, package_name, package_path, include_from=None ], ) def test_command_new( - options, directory, package_name, package_path, include_from, command, tmp_dir + options, directory, package_name, package_path, include_from, tester, tmp_dir ): path = Path(tmp_dir) / directory options.append(path.as_posix()) - command.execute(" ".join(options)) + tester.execute(" ".join(options)) verify_project_directory(path, package_name, package_path, include_from) + + +@pytest.mark.parametrize("fmt", [(None,), ("md",), ("rst",)]) +def test_command_new_with_readme(fmt, tester, tmp_dir): + fmt = "md" + package = "package" + path = Path(tmp_dir) / package + options = ["--readme {}".format(fmt) if fmt else "md", path.as_posix()] + tester.execute(" ".join(options)) + + poetry = verify_project_directory(path, package, package, None) + assert poetry.local_config.get("readme") == "README.{}".format(fmt or "md")