From aa37b5114e7185570f5fca5608e788bf303f646f Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:10:16 +0200 Subject: [PATCH 01/65] feat: Updated dev.in Added new version of click and typing-extension in order to remove the conflict with black --- {{cookiecutter.project_slug}}/requirements/dev.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index cc7ed97..0ca7fae 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -8,3 +8,5 @@ flake8 pytest black pre-commit +click==8.1.3 +typing-extensions==4.3.0 From a91ba087da89cec7b77bf5eebf0b1e29803368a8 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:15:11 +0200 Subject: [PATCH 02/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 710e48d..86b45bf 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ $ pip install --user cookiecutter Generate your project template using cookiecutter. ```bash -$ cookiecutter gh:yankeexe/cookiecutter-python-cli +$ cookiecutter gh:ltpitt/cookiecutter-python-cli ``` ## Project Setup From 1efd94252ae9682ffae566afc81d52355ffba1b9 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:17:54 +0200 Subject: [PATCH 03/65] feat: Removed rich --- .../{{cookiecutter.project_slug}}/commands/init.py | 1 - 1 file changed, 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/init.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/init.py index e910247..49f4adc 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/init.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/init.py @@ -2,7 +2,6 @@ CLI initialization command. """ import click -from rich.prompt import Prompt from {{cookiecutter.project_slug}} import console from {{cookiecutter.project_slug}}.constants import WELCOME_MESSAGE From 20e7a1c521ffc358ca2dcb8c99ef8f9d96d2cb52 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:19:36 +0200 Subject: [PATCH 04/65] feat: Added simple hello command --- .../commands/hello.py | 16 ++++++++++++++++ .../commands/show.py | 14 -------------- 2 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 {{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py delete mode 100644 {{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/show.py diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py new file mode 100644 index 0000000..0263aa8 --- /dev/null +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py @@ -0,0 +1,16 @@ +""" +Show command for the CLI. +""" +import click + +from {{cookiecutter.project_slug}} import console + + +@click.command() +@click.option('--count', default=1, help='Number of greetings.') +@click.option('--name', prompt='Your name', + help='The person to greet.') +def hello(count, name): + """Simple program that greets NAME for a total of COUNT times.""" + for x in range(count): + click.echo(f"Hello {name}!") diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/show.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/show.py deleted file mode 100644 index d587fbf..0000000 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/show.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -Show command for the CLI. -""" -import click - -from {{cookiecutter.project_slug}} import console - - -@click.command() -def show(): - """ - Generic sub-command to show a message. - """ - console.print("Get started with your CLI in no time!") From eda70c71ffe8be9b607ee1341fe92584fd0bcbf1 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:23:08 +0200 Subject: [PATCH 05/65] feat: Added hello command --- .../{{cookiecutter.project_slug}}/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py index 3a024df..f1dc399 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py @@ -3,7 +3,7 @@ """ import click -from {{cookiecutter.project_slug}}.commands import init, show +from {{cookiecutter.project_slug}}.commands import init, hello @click.group() @@ -12,4 +12,4 @@ def cli(): cli.add_command(init) -cli.add_command(show) +cli.add_command(hello) From 930101395923eda336941c37505a3d00d083ceff Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Mon, 12 Sep 2022 17:30:09 +0200 Subject: [PATCH 06/65] feat: Added hello command --- .../{{cookiecutter.project_slug}}/commands/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/__init__.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/__init__.py index 6ea6bb2..02a3281 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/__init__.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/__init__.py @@ -2,4 +2,4 @@ Exports for CLI commands. """ from {{cookiecutter.project_slug}}.commands.init import init -from {{cookiecutter.project_slug}}.commands.show import show +from {{cookiecutter.project_slug}}.commands.hello import hello From 7503bcbb4b440028123a0a7637bf58a6763cc8dd Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 10:28:28 +0200 Subject: [PATCH 07/65] fix: Updated pip-tools to 6.8.0 Solved ImportError: cannot import name 'BAR_TYPES' from 'pip._internal.cli.progress_bars' --- {{cookiecutter.project_slug}}/requirements/dev.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index 0ca7fae..d579ad0 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -1,6 +1,6 @@ -r docs.in -r tests.in -pip-tools +pip-tools==6.8.0 pre-commit tox mypy From b07ed1b5e5de814860c8a152e03d0a2376dd04a2 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 10:32:11 +0200 Subject: [PATCH 08/65] feat: Added freshly generated dev.txt --- .../requirements/dev.txt | 66 +++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.txt b/{{cookiecutter.project_slug}}/requirements/dev.txt index 2bf70c4..05c8a5b 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.txt +++ b/{{cookiecutter.project_slug}}/requirements/dev.txt @@ -1,26 +1,42 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile requirements/dev.in # appdirs==1.4.4 # via virtualenv +atomicwrites==1.4.1 + # via pytest attrs==20.3.0 # via pytest +black==22.8.0 + # via -r requirements/dev.in +build==0.8.0 + # via pip-tools cfgv==3.2.0 # via pre-commit -click==7.1.2 +click==8.1.3 # via + # -r requirements/dev.in + # black # mkdocs # nltk # pip-tools +colorama==0.4.5 + # via + # build + # click + # pytest + # tox distlib==0.3.1 # via virtualenv filelock==3.0.12 # via # tox # virtualenv +flake8==5.0.4 + # via -r requirements/dev.in future==0.18.2 # via lunr identify==1.5.13 @@ -42,28 +58,39 @@ markdown==3.3.3 # pymdown-extensions markupsafe==1.1.1 # via jinja2 -mkdocs-material-extensions==1.0.1 +mccabe==0.7.0 + # via flake8 +mkdocs==1.1.2 # via mkdocs-material mkdocs-material==6.2.8 # via - # -r requirements/docs.in + # -r requirements\docs.in # mkdocs-material-extensions -mkdocs==1.1.2 +mkdocs-material-extensions==1.0.1 # via mkdocs-material -mypy-extensions==0.4.3 - # via mypy mypy==0.800 # via -r requirements/dev.in +mypy-extensions==0.4.3 + # via + # black + # mypy nltk==3.5 # via lunr nodeenv==1.5.0 # via pre-commit packaging==20.9 # via + # build # pytest # tox -pip-tools==5.5.0 +pathspec==0.10.1 + # via black +pep517==0.13.0 + # via build +pip-tools==6.8.0 # via -r requirements/dev.in +platformdirs==2.5.2 + # via black pluggy==0.13.1 # via # pytest @@ -74,6 +101,10 @@ py==1.10.0 # via # pytest # tox +pycodestyle==2.9.1 + # via flake8 +pyflakes==2.5.0 + # via flake8 pygments==2.7.4 # via mkdocs-material pymdown-extensions==8.1.1 @@ -81,7 +112,9 @@ pymdown-extensions==8.1.1 pyparsing==2.4.7 # via packaging pytest==6.2.2 - # via -r requirements/tests.in + # via + # -r requirements/dev.in + # -r requirements\tests.in pyyaml==5.4.1 # via # mkdocs @@ -99,6 +132,11 @@ toml==0.10.2 # pre-commit # pytest # tox +tomli==2.0.1 + # via + # black + # build + # pep517 tornado==6.1 # via # livereload @@ -109,12 +147,18 @@ tqdm==4.56.0 # via nltk typed-ast==1.4.2 # via mypy -typing-extensions==3.7.4.3 - # via mypy +typing-extensions==4.3.0 + # via + # -r requirements/dev.in + # black + # mypy virtualenv==20.4.2 # via # pre-commit # tox +wheel==0.37.1 + # via pip-tools # The following packages are considered to be unsafe in a requirements file: # pip +# setuptools From 74c7a16a835cb1014bc129342e1ef69f19d072f7 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:00:31 +0200 Subject: [PATCH 09/65] feat: Generated new docs.txt --- .../requirements/docs.txt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/docs.txt b/{{cookiecutter.project_slug}}/requirements/docs.txt index 4713a98..4a63212 100644 --- a/{{cookiecutter.project_slug}}/requirements/docs.txt +++ b/{{cookiecutter.project_slug}}/requirements/docs.txt @@ -1,13 +1,18 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile requirements/docs.in # -click==7.1.2 +black==22.8.0 + # via -r requirements/docs.in +click==8.1.3 # via + # black # mkdocs # nltk +colorama==0.4.5 + # via click future==0.18.2 # via lunr jinja2==2.11.3 @@ -25,16 +30,22 @@ markdown==3.3.3 # pymdown-extensions markupsafe==1.1.1 # via jinja2 -mkdocs-material-extensions==1.0.1 +mkdocs==1.1.2 # via mkdocs-material mkdocs-material==6.2.8 # via # -r requirements/docs.in # mkdocs-material-extensions -mkdocs==1.1.2 +mkdocs-material-extensions==1.0.1 # via mkdocs-material +mypy-extensions==0.4.3 + # via black nltk==3.5 # via lunr +pathspec==0.10.1 + # via black +platformdirs==2.5.2 + # via black pygments==2.7.4 # via mkdocs-material pymdown-extensions==8.1.1 @@ -47,9 +58,13 @@ six==1.15.0 # via # livereload # lunr +tomli==2.0.1 + # via black tornado==6.1 # via # livereload # mkdocs tqdm==4.56.0 # via nltk +typing-extensions==4.3.0 + # via black From b8bdf847a88de7cb1586508b2d1b97ba85c0607e Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:00:56 +0200 Subject: [PATCH 10/65] feat: Generated new publish.txt --- .../requirements/publish.txt | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/publish.txt b/{{cookiecutter.project_slug}}/requirements/publish.txt index 106e4b9..ff4b3bf 100644 --- a/{{cookiecutter.project_slug}}/requirements/publish.txt +++ b/{{cookiecutter.project_slug}}/requirements/publish.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile requirements/publish.in @@ -8,46 +8,36 @@ bleach==3.3.0 # via readme-renderer certifi==2020.12.5 # via requests -cffi==1.14.5 - # via cryptography chardet==4.0.0 # via requests colorama==0.4.4 # via twine -cryptography==3.4.4 - # via secretstorage docutils==0.16 # via readme-renderer idna==2.10 # via requests -jeepney==0.6.0 - # via - # keyring - # secretstorage keyring==22.0.1 # via twine packaging==20.9 # via bleach pkginfo==1.7.0 # via twine -pycparser==2.20 - # via cffi pygments==2.7.4 # via readme-renderer pyparsing==2.4.7 # via packaging +pywin32-ctypes==0.2.0 + # via keyring readme-renderer==28.0 # via twine -requests-toolbelt==0.9.1 - # via twine requests==2.25.1 # via # requests-toolbelt # twine +requests-toolbelt==0.9.1 + # via twine rfc3986==1.4.0 # via twine -secretstorage==3.3.1 - # via keyring six==1.15.0 # via # bleach From f519671ef3a022fba5d18cfb8bbd35c59b0fc7be Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:01:35 +0200 Subject: [PATCH 11/65] feat: Updated tests.txt --- {{cookiecutter.project_slug}}/requirements/tests.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/tests.txt b/{{cookiecutter.project_slug}}/requirements/tests.txt index 43d6aba..c569a49 100644 --- a/{{cookiecutter.project_slug}}/requirements/tests.txt +++ b/{{cookiecutter.project_slug}}/requirements/tests.txt @@ -1,11 +1,15 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile requirements/tests.in # +atomicwrites==1.4.1 + # via pytest attrs==20.3.0 # via pytest +colorama==0.4.5 + # via pytest iniconfig==1.1.1 # via pytest packaging==20.9 From a13d2b5d36f6f96fc9b27c5b4937d5a999fa83f9 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:36:21 +0200 Subject: [PATCH 12/65] feat: Removed packages versions --- {{cookiecutter.project_slug}}/requirements/dev.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index d579ad0..288e357 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -1,6 +1,6 @@ -r docs.in -r tests.in -pip-tools==6.8.0 +pip-tools pre-commit tox mypy @@ -8,5 +8,6 @@ flake8 pytest black pre-commit -click==8.1.3 -typing-extensions==4.3.0 +click +typing-extensions +rich From ff1ec97bc642f4d16a5a0e1d29a465273cb48800 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:44:59 +0200 Subject: [PATCH 13/65] Update dev.txt From 00e72cd441f1d8e81193c501b70d0256e25079c9 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:45:58 +0200 Subject: [PATCH 14/65] feat: Generated dev.txt --- {{cookiecutter.project_slug}}/requirements/dev.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.txt b/{{cookiecutter.project_slug}}/requirements/dev.txt index 05c8a5b..2f33e7a 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.txt +++ b/{{cookiecutter.project_slug}}/requirements/dev.txt @@ -29,6 +29,8 @@ colorama==0.4.5 # click # pytest # tox +commonmark==0.9.1 + # via rich distlib==0.3.1 # via virtualenv filelock==3.0.12 @@ -106,7 +108,9 @@ pycodestyle==2.9.1 pyflakes==2.5.0 # via flake8 pygments==2.7.4 - # via mkdocs-material + # via + # mkdocs-material + # rich pymdown-extensions==8.1.1 # via mkdocs-material pyparsing==2.4.7 @@ -121,6 +125,8 @@ pyyaml==5.4.1 # pre-commit regex==2020.11.13 # via nltk +rich==12.5.1 + # via -r requirements/dev.in six==1.15.0 # via # livereload From 70f3bd9c2abd7427938940347b4d38bb017839db Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:49:56 +0200 Subject: [PATCH 15/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index 288e357..840d932 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -1,6 +1,6 @@ -r docs.in -r tests.in -pip-tools +pip-tools==6.8.0 pre-commit tox mypy @@ -8,6 +8,6 @@ flake8 pytest black pre-commit -click -typing-extensions +click==8.1.3 +typing-extensions==4.3.0 rich From b339ec2943e56ee5d0ff8f38f5f79963dc4fda8f Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 11:51:56 +0200 Subject: [PATCH 16/65] Update dev.txt From 2789eea2337bbf5dbc90cec3b523dea44c327ec4 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 12:02:03 +0200 Subject: [PATCH 17/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index 840d932..a9ef9d1 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -1,13 +1,12 @@ -r docs.in -r tests.in -pip-tools==6.8.0 +pip-tools pre-commit tox mypy flake8 -pytest black pre-commit -click==8.1.3 -typing-extensions==4.3.0 +click +typing-extensions rich From a15426feb8e10877513c691caf7e4170641f8614 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 12:03:19 +0200 Subject: [PATCH 18/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 1 - 1 file changed, 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index a9ef9d1..f94e544 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -3,7 +3,6 @@ pip-tools pre-commit tox -mypy flake8 black pre-commit From 7539ef591bdb5af0a107d79a2d899b32e4ebceb3 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 12:03:35 +0200 Subject: [PATCH 19/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 1 - 1 file changed, 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index f94e544..d262389 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -5,7 +5,6 @@ pre-commit tox flake8 black -pre-commit click typing-extensions rich From c419ae262a03d1881abc938166ed0ca3c18bb349 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:38:33 +0200 Subject: [PATCH 20/65] feat: Removed rich version --- {{cookiecutter.project_slug}}/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/setup.py b/{{cookiecutter.project_slug}}/setup.py index 0cdb9dc..9edc92c 100644 --- a/{{cookiecutter.project_slug}}/setup.py +++ b/{{cookiecutter.project_slug}}/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as f: long_description = f.read() -requirements = ["click", "rich<=7.1.0", "simple-term-menu", "requests"] +requirements = ["click", "rich", "simple-term-menu", "requests"] setuptools.setup( From 7a2bb42a1f1438a73ab1bd1e93d2e69f4faf4886 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:44:31 +0200 Subject: [PATCH 21/65] feat: Added text style / color --- .../{{cookiecutter.project_slug}}/commands/hello.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py index 0263aa8..32ae888 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py @@ -13,4 +13,4 @@ def hello(count, name): """Simple program that greets NAME for a total of COUNT times.""" for x in range(count): - click.echo(f"Hello {name}!") + console.print((f"Hello [italic red]{name}[/italic red]!") From 507eef4c5246072c26c501bfde4de28dfb8e8e2b Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:45:47 +0200 Subject: [PATCH 22/65] Update cookiecutter.json --- cookiecutter.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cookiecutter.json b/cookiecutter.json index 0436eb2..f2e7684 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -1,7 +1,7 @@ { "project_name": "Awesome CLI", "project_slug": "{{cookiecutter.project_name.strip().lower().replace(' ', '_').replace('-', '_')}}", - "cli_command": "yocli", - "author": "Yankee Maharjan", - "description": "This CLI tool does awesome things." + "cli_command": "acli", + "author": "Davide Nastri", + "description": "This CLI tool does one thing and does it well." } From 154303d2202a1d70d995e8b6a50733b86ef2a9cf Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:47:33 +0200 Subject: [PATCH 23/65] feat: Added Darth Vader image --- darth_vader_cookies.jpg | Bin 0 -> 85559 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 darth_vader_cookies.jpg diff --git a/darth_vader_cookies.jpg b/darth_vader_cookies.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f19e6abdf81dae2a601024dd22094c2d4902cfa1 GIT binary patch literal 85559 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 Date: Tue, 13 Sep 2022 13:48:53 +0200 Subject: [PATCH 24/65] feat: Added Darth vader --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 86b45bf..3e78d39 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Cookiecutter for Python Click CLI :cookie: +![Come to the dark side... We have cookies!](https://github.com/ltpitt/cookiecutter-python-cli/blob/master/darth_vader_cookies.jpg?raw=true) + ## Comes with: - [x] Pre-commit hooks From 66972e09b97b9a93d0faf6c33d69bc4906560f66 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:50:33 +0200 Subject: [PATCH 25/65] doc: Added Windows step to install dependencies --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3e78d39..da107e5 100644 --- a/README.md +++ b/README.md @@ -41,12 +41,18 @@ $ make venv $ source venv/bin/activate ``` -4. Install development dependencies with editable mode to test the CLI. +4a. Linux - Install development dependencies with editable mode to test the CLI. ```bash $ make install ``` +4b. Windows - Install development dependencies with editable mode to test the CLI. + +```bash +$ pip install -e . -r requirements/dev.txt +``` + ## Take your CLI for a spin This Cookiecutter comes with two generic CLI commands, namely, `init` and `show`. From 5a6ae3f58c43667e3425610fda21674a1802cc34 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:51:20 +0200 Subject: [PATCH 26/65] doc: Added hello command --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da107e5..ae7bfa4 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ $ <> init ``` ```bash -$ <> show +$ <> hello ``` ### Test with Docker From 641d3e988a964e286a83fa64027e2b4d3db12a96 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:56:49 +0200 Subject: [PATCH 27/65] feat: Removed python3 --- {{cookiecutter.project_slug}}/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/{{cookiecutter.project_slug}}/Makefile b/{{cookiecutter.project_slug}}/Makefile index 70acbdf..08abe77 100644 --- a/{{cookiecutter.project_slug}}/Makefile +++ b/{{cookiecutter.project_slug}}/Makefile @@ -18,7 +18,7 @@ test: # run pytest in verbose mode @pytest -vvv venv: # create a virtual env - @python3 -m venv venv + @python -m venv venv format: # format all files using black @black . @@ -41,7 +41,7 @@ serve-docs: # serve docs on localhost distributions: # create distribution wheel and zip for PyPI @pip install -r requirements/publish.txt - @python3 setup.py sdist bdist_wheel + @python setup.py sdist bdist_wheel @echo "Use `twine upload dist/*` to upload to PyPI" docker-image: From 7923f5542abb5b6ec1452a4accc081672a5d1724 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:57:15 +0200 Subject: [PATCH 28/65] feat: Generated fresh dev.txt --- {{cookiecutter.project_slug}}/requirements/dev.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.txt b/{{cookiecutter.project_slug}}/requirements/dev.txt index 2f33e7a..97a617a 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.txt +++ b/{{cookiecutter.project_slug}}/requirements/dev.txt @@ -116,9 +116,7 @@ pymdown-extensions==8.1.1 pyparsing==2.4.7 # via packaging pytest==6.2.2 - # via - # -r requirements/dev.in - # -r requirements\tests.in + # via -r requirements\tests.in pyyaml==5.4.1 # via # mkdocs From 9351cd3c80bd08e7853d7d676a91027b77b4cef5 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 13:58:51 +0200 Subject: [PATCH 29/65] fix: Removed extra parenthesis --- .../{{cookiecutter.project_slug}}/commands/hello.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py index 32ae888..dbc301b 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py @@ -13,4 +13,4 @@ def hello(count, name): """Simple program that greets NAME for a total of COUNT times.""" for x in range(count): - console.print((f"Hello [italic red]{name}[/italic red]!") + console.print(f"Hello [italic red]{name}[/italic red]!") From e8ff0d79b11f6299df251aa6f389ddf8ff36fe3e Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:00:21 +0200 Subject: [PATCH 30/65] feat: Prettified output --- .../{{cookiecutter.project_slug}}/commands/hello.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py index dbc301b..5fcafad 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/commands/hello.py @@ -13,4 +13,4 @@ def hello(count, name): """Simple program that greets NAME for a total of COUNT times.""" for x in range(count): - console.print(f"Hello [italic red]{name}[/italic red]!") + console.print(f"Hello, [italic red]{name}[/italic red] :)") From 43ae77986115408d551f55a78264fa5e95d8ddf4 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:27:22 +0200 Subject: [PATCH 31/65] feat: Added click and markdownextradata-plugin dependecies --- {{cookiecutter.project_slug}}/requirements/docs.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/{{cookiecutter.project_slug}}/requirements/docs.in b/{{cookiecutter.project_slug}}/requirements/docs.in index 4c8f017..0f170bd 100644 --- a/{{cookiecutter.project_slug}}/requirements/docs.in +++ b/{{cookiecutter.project_slug}}/requirements/docs.in @@ -1 +1,3 @@ mkdocs-material +mkdocs-markdownextradata-plugin +mkdocs-click From 82ffbdb02f2d1c4c6bf3f60f66b099168d87d527 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:30:06 +0200 Subject: [PATCH 32/65] Update mkdocs.yml --- {{cookiecutter.project_slug}}/docs/mkdocs.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/{{cookiecutter.project_slug}}/docs/mkdocs.yml b/{{cookiecutter.project_slug}}/docs/mkdocs.yml index 17b9696..4770078 100644 --- a/{{cookiecutter.project_slug}}/docs/mkdocs.yml +++ b/{{cookiecutter.project_slug}}/docs/mkdocs.yml @@ -5,13 +5,6 @@ theme: features: - navigation.instant -nav: - - Overview: - - Introduction: index.md - - Commands: - - Overview: ./commands/index.md - -# Extensions markdown_extensions: - markdown.extensions.admonition - markdown.extensions.codehilite: @@ -37,3 +30,12 @@ markdown_extensions: - pymdownx.tasklist: custom_checkbox: true - pymdownx.tilde + - mkdocs-click + +plugins: + - search + - markdownextradata: {} + + +extra: + cli_command: {{cookiecutter.cli_command}} From 60b8b15a41c3ca69549e0511714b444ec6d4f547 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:31:20 +0200 Subject: [PATCH 33/65] Update docs.txt --- .../requirements/docs.txt | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/docs.txt b/{{cookiecutter.project_slug}}/requirements/docs.txt index 4a63212..c6728ec 100644 --- a/{{cookiecutter.project_slug}}/requirements/docs.txt +++ b/{{cookiecutter.project_slug}}/requirements/docs.txt @@ -1,18 +1,13 @@ # -# This file is autogenerated by pip-compile with python 3.9 +# This file is autogenerated by pip-compile # To update, run: # # pip-compile requirements/docs.in # -black==22.8.0 - # via -r requirements/docs.in -click==8.1.3 +click==7.1.2 # via - # black # mkdocs # nltk -colorama==0.4.5 - # via click future==0.18.2 # via lunr jinja2==2.11.3 @@ -30,22 +25,16 @@ markdown==3.3.3 # pymdown-extensions markupsafe==1.1.1 # via jinja2 -mkdocs==1.1.2 +mkdocs-material-extensions==1.0.1 # via mkdocs-material mkdocs-material==6.2.8 # via # -r requirements/docs.in # mkdocs-material-extensions -mkdocs-material-extensions==1.0.1 +mkdocs==1.1.2 # via mkdocs-material -mypy-extensions==0.4.3 - # via black nltk==3.5 # via lunr -pathspec==0.10.1 - # via black -platformdirs==2.5.2 - # via black pygments==2.7.4 # via mkdocs-material pymdown-extensions==8.1.1 @@ -58,13 +47,11 @@ six==1.15.0 # via # livereload # lunr -tomli==2.0.1 - # via black tornado==6.1 # via # livereload # mkdocs tqdm==4.56.0 # via nltk -typing-extensions==4.3.0 - # via black +mkdocs-markdownextradata-plugin +mkdocs-click From 947baa9c2d4a20885074b97896f97b2edc143a34 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:35:02 +0200 Subject: [PATCH 34/65] Update docs.txt --- .../requirements/docs.txt | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/{{cookiecutter.project_slug}}/requirements/docs.txt b/{{cookiecutter.project_slug}}/requirements/docs.txt index c6728ec..6e871c0 100644 --- a/{{cookiecutter.project_slug}}/requirements/docs.txt +++ b/{{cookiecutter.project_slug}}/requirements/docs.txt @@ -1,13 +1,16 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile requirements/docs.in # -click==7.1.2 +click==8.1.3 # via # mkdocs + # mkdocs-click # nltk +colorama==0.4.5 + # via click future==0.18.2 # via lunr jinja2==2.11.3 @@ -21,17 +24,24 @@ lunr[languages]==0.5.8 markdown==3.3.3 # via # mkdocs + # mkdocs-click # mkdocs-material # pymdown-extensions markupsafe==1.1.1 # via jinja2 -mkdocs-material-extensions==1.0.1 - # via mkdocs-material +mkdocs==1.1.2 + # via + # mkdocs-markdownextradata-plugin + # mkdocs-material +mkdocs-click==0.8.0 + # via -r requirements/docs.in +mkdocs-markdownextradata-plugin==0.2.5 + # via -r requirements/docs.in mkdocs-material==6.2.8 # via # -r requirements/docs.in # mkdocs-material-extensions -mkdocs==1.1.2 +mkdocs-material-extensions==1.0.1 # via mkdocs-material nltk==3.5 # via lunr @@ -40,7 +50,9 @@ pygments==2.7.4 pymdown-extensions==8.1.1 # via mkdocs-material pyyaml==5.4.1 - # via mkdocs + # via + # mkdocs + # mkdocs-markdownextradata-plugin regex==2020.11.13 # via nltk six==1.15.0 @@ -53,5 +65,3 @@ tornado==6.1 # mkdocs tqdm==4.56.0 # via nltk -mkdocs-markdownextradata-plugin -mkdocs-click From 505c94241447edf3929908deaa16a50459193186 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:37:40 +0200 Subject: [PATCH 35/65] feat: Added example test --- {{cookiecutter.project_slug}}/tests/test_help.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 {{cookiecutter.project_slug}}/tests/test_help.py diff --git a/{{cookiecutter.project_slug}}/tests/test_help.py b/{{cookiecutter.project_slug}}/tests/test_help.py new file mode 100644 index 0000000..027ce19 --- /dev/null +++ b/{{cookiecutter.project_slug}}/tests/test_help.py @@ -0,0 +1,9 @@ +from click.testing import CliRunner +from {{cookiecutter.project_slug}} import app + + +def test_help(): + runner = CliRunner() + result = runner.invoke(app.{{cookiecutter.cli_command}}) + assert result.exit_code == 0 + assert "Usage: " in result.output From aa7c9c7da137b6d9154cc8d7f75387e10df036ce Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:42:02 +0200 Subject: [PATCH 36/65] Update test_help.py --- {{cookiecutter.project_slug}}/tests/test_help.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/tests/test_help.py b/{{cookiecutter.project_slug}}/tests/test_help.py index 027ce19..a6d7b6c 100644 --- a/{{cookiecutter.project_slug}}/tests/test_help.py +++ b/{{cookiecutter.project_slug}}/tests/test_help.py @@ -4,6 +4,6 @@ def test_help(): runner = CliRunner() - result = runner.invoke(app.{{cookiecutter.cli_command}}) + result = runner.invoke(app.cli) assert result.exit_code == 0 assert "Usage: " in result.output From e8d2a496830b726fed1cf04a077011377ad364c3 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:44:16 +0200 Subject: [PATCH 37/65] Update mkdocs.yml --- {{cookiecutter.project_slug}}/docs/mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/docs/mkdocs.yml b/{{cookiecutter.project_slug}}/docs/mkdocs.yml index 4770078..073f8c8 100644 --- a/{{cookiecutter.project_slug}}/docs/mkdocs.yml +++ b/{{cookiecutter.project_slug}}/docs/mkdocs.yml @@ -38,4 +38,4 @@ plugins: extra: - cli_command: {{cookiecutter.cli_command}} + cli_command: "{{cookiecutter.cli_command}}" From e1c9159c0c5c6a806dd3c06bc1a6e3091961c4b5 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:50:00 +0200 Subject: [PATCH 38/65] feat: Added index.md in order to automatically generate docs from code --- {{cookiecutter.project_slug}}/docs/docs/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/{{cookiecutter.project_slug}}/docs/docs/index.md b/{{cookiecutter.project_slug}}/docs/docs/index.md index 9dbc05b..b61e00a 100644 --- a/{{cookiecutter.project_slug}}/docs/docs/index.md +++ b/{{cookiecutter.project_slug}}/docs/docs/index.md @@ -1 +1,7 @@ # Welcome to {{cookiecutter.project_name}} + +::: mkdocs-click + :module: {{cookiecutter.project_slug}}.app + :command: {{cookiecutter.cli_command}} + :depth: 1 + From b09d068cddbef367616b245f90aa60ab44d9b3db Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:53:38 +0200 Subject: [PATCH 39/65] Update app.py --- .../{{cookiecutter.project_slug}}/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py index f1dc399..8c23b17 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py @@ -7,7 +7,7 @@ @click.group() -def cli(): +def {{cookiecutter.cli_command}}(): pass From 45480335d53123bb0684e7b9a6a3118708e0bc0d Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:54:17 +0200 Subject: [PATCH 40/65] Update test_help.py --- {{cookiecutter.project_slug}}/tests/test_help.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/tests/test_help.py b/{{cookiecutter.project_slug}}/tests/test_help.py index a6d7b6c..027ce19 100644 --- a/{{cookiecutter.project_slug}}/tests/test_help.py +++ b/{{cookiecutter.project_slug}}/tests/test_help.py @@ -4,6 +4,6 @@ def test_help(): runner = CliRunner() - result = runner.invoke(app.cli) + result = runner.invoke(app.{{cookiecutter.cli_command}}) assert result.exit_code == 0 assert "Usage: " in result.output From 7e48e81c5cbcc73f72fe2cb23955bd9bc4a8862e Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:56:55 +0200 Subject: [PATCH 41/65] Update app.py --- .../{{cookiecutter.project_slug}}/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py index 8c23b17..3fb0114 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/app.py @@ -11,5 +11,5 @@ def {{cookiecutter.cli_command}}(): pass -cli.add_command(init) -cli.add_command(hello) +{{cookiecutter.cli_command}}.add_command(init) +{{cookiecutter.cli_command}}.add_command(hello) From 8532bcedd36960282892a27475abcb7d2a083c0c Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 14:57:27 +0200 Subject: [PATCH 42/65] Update setup.py --- {{cookiecutter.project_slug}}/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/setup.py b/{{cookiecutter.project_slug}}/setup.py index 9edc92c..76c0b3f 100644 --- a/{{cookiecutter.project_slug}}/setup.py +++ b/{{cookiecutter.project_slug}}/setup.py @@ -21,7 +21,7 @@ install_requires=requirements, entry_points={ "console_scripts": [ - "{{cookiecutter.cli_command.strip().lower().replace(' ', '_').replace('-', '_')}} = {{cookiecutter.project_slug}}.app:cli" + "{{cookiecutter.cli_command.strip().lower().replace(' ', '_').replace('-', '_')}} = {{cookiecutter.project_slug}}.app:{{cookiecutter.cli_command}}" ] }, classifiers=[ From a6e079bc1dedecd1243222800f587a0a61c9f91d Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:00:21 +0200 Subject: [PATCH 43/65] Delete index.md --- .../docs/docs/commands/index.md | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 {{cookiecutter.project_slug}}/docs/docs/commands/index.md diff --git a/{{cookiecutter.project_slug}}/docs/docs/commands/index.md b/{{cookiecutter.project_slug}}/docs/docs/commands/index.md deleted file mode 100644 index e0a11a1..0000000 --- a/{{cookiecutter.project_slug}}/docs/docs/commands/index.md +++ /dev/null @@ -1,20 +0,0 @@ -## Commands for the CLI. - -!!! note - `<>` is the one you chose during the project creation. - -### init - -Shows a welcome message as a CLI initialization. - -```bash -$ <> init -``` - -### show - -Shows a generic message. - -```bash -$ <> show -``` From e616b38403aadc3c5ff5b29947676b51ffd7de59 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:08:53 +0200 Subject: [PATCH 44/65] Update README.md --- README.md | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ae7bfa4..0613dcc 100644 --- a/README.md +++ b/README.md @@ -41,13 +41,13 @@ $ make venv $ source venv/bin/activate ``` -4a. Linux - Install development dependencies with editable mode to test the CLI. +4. For Linux / Mac Users only - Install development dependencies with editable mode to test the CLI. ```bash $ make install ``` -4b. Windows - Install development dependencies with editable mode to test the CLI. +4. For Windows Users only - Install development dependencies with editable mode to test the CLI. ```bash $ pip install -e . -r requirements/dev.txt @@ -55,7 +55,7 @@ $ pip install -e . -r requirements/dev.txt ## Take your CLI for a spin -This Cookiecutter comes with two generic CLI commands, namely, `init` and `show`. +This Cookiecutter comes with two generic CLI commands, namely, `init` and `hello`. > **NOTE** > @@ -75,7 +75,7 @@ CLI commands can be tested with Docker. 1. Build an image for the CLI. - Image is tagged with the same name as the `cli_command`. + Image is tagged <> name. ```bash $ make docker-image @@ -89,19 +89,31 @@ $ docker-run --rm <> init ## Documentation -1. Install documentation-related dependencies. +1. For Linux / Mac Users only - Install documentation-related dependencies. ```bash $ make docs ``` -2. Serve the docs locally. +1. For Windows Users only - Install development dependencies with editable mode to test the CLI. + +```bash +$ pip install -r requirements/docs.txt +``` + +2. For Linux / Mac Users only - Serve the docs locally. ```bash $ make serve-docs ``` -## Distribution +2. For Windows Users only - Serve the docs locally. + +```bash +$ mkdocs serve -f docs/mkdocs.yml +``` + +## Distribution - For Linux / Mac Users only > **NOTE** > @@ -119,7 +131,7 @@ $ make distributions $ twine dist/* ``` -## Help +## Help - For Linux / Mac Users only For help related to make commands. From 39e200e8910895519ac4c7861574b3fcaf6c8274 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:10:57 +0200 Subject: [PATCH 45/65] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0613dcc..db23f59 100644 --- a/README.md +++ b/README.md @@ -41,13 +41,13 @@ $ make venv $ source venv/bin/activate ``` -4. For Linux / Mac Users only - Install development dependencies with editable mode to test the CLI. +4. Linux / Mac - Install development dependencies with editable mode to test the CLI. ```bash $ make install ``` -4. For Windows Users only - Install development dependencies with editable mode to test the CLI. +4. Windows - Install development dependencies with editable mode to test the CLI. ```bash $ pip install -e . -r requirements/dev.txt @@ -89,31 +89,31 @@ $ docker-run --rm <> init ## Documentation -1. For Linux / Mac Users only - Install documentation-related dependencies. +1. Linux / Mac - Install documentation-related dependencies. ```bash $ make docs ``` -1. For Windows Users only - Install development dependencies with editable mode to test the CLI. +1. Windows - Install development dependencies with editable mode to test the CLI. ```bash $ pip install -r requirements/docs.txt ``` -2. For Linux / Mac Users only - Serve the docs locally. +2. Linux / Mac - Serve the docs locally. ```bash $ make serve-docs ``` -2. For Windows Users only - Serve the docs locally. +2. Windows - Serve the docs locally. ```bash $ mkdocs serve -f docs/mkdocs.yml ``` -## Distribution - For Linux / Mac Users only +## Linux / Mac - Distribution > **NOTE** > @@ -131,7 +131,7 @@ $ make distributions $ twine dist/* ``` -## Help - For Linux / Mac Users only +## Linux / Mac - Help For help related to make commands. From 0157980274b68b3b6fd02da16cfc06afbfa4ad3f Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:12:38 +0200 Subject: [PATCH 46/65] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index db23f59..9732805 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,17 @@ ## Comes with: + - [x] Containerization - [x] Pre-commit hooks - - [x] mypy + - [x] black + - [x] click - [x] flake8 - [x] mkdocs-material + - [x] mypy - [x] packaging - - [x] Containerization + - [] whistles + - [] bells + ## Usage From 2c2a781e4c2ef9f5b00989c5abf6797d00a843e7 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:12:52 +0200 Subject: [PATCH 47/65] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9732805..afb5876 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ - [x] mkdocs-material - [x] mypy - [x] packaging - - [] whistles - - [] bells + - [ ] whistles + - [ ] bells ## Usage From a57e1d9a575e5d24ff1a0ee42caaa64d3c8a694b Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:13:21 +0200 Subject: [PATCH 48/65] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index afb5876..e97661c 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,6 @@ - [x] mkdocs-material - [x] mypy - [x] packaging - - [ ] whistles - - [ ] bells ## Usage From 9e0cd6e1225b67777d164d5af25e6b37d252c556 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:14:42 +0200 Subject: [PATCH 49/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e97661c..4323365 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Cookiecutter for Python Click CLI :cookie: +# A cookiecutter to bake a delicious Python Click CLI tool :cookie: ![Come to the dark side... We have cookies!](https://github.com/ltpitt/cookiecutter-python-cli/blob/master/darth_vader_cookies.jpg?raw=true) From aec8ca4ec1d7d28658cbd0803e986761b0917a89 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:17:37 +0200 Subject: [PATCH 50/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4323365..f45a9d2 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ $ cookiecutter gh:ltpitt/cookiecutter-python-cli 2. Create a virtual environment. ```bash -$ make venv +$ python -m venv venv ``` 3. Activate it. From f20babb3f0bfcfc8940296c4299116985b892930 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:42:16 +0200 Subject: [PATCH 51/65] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f45a9d2..48dcfcd 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,16 @@ $ cookiecutter gh:ltpitt/cookiecutter-python-cli $ python -m venv venv ``` -3. Activate it. +3. Linux / Mac - Activate it. ```bash -$ source venv/bin/activate +$ source venv/Scripts/activate +``` + +3. Windows - Activate it. + +```bash +$ source venv/Scripts/Activate.ps1 ``` 4. Linux / Mac - Install development dependencies with editable mode to test the CLI. From feeee0406079cf20ac2931eb85207dd50e7ab008 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:51:05 +0200 Subject: [PATCH 52/65] Update README.md --- {{cookiecutter.project_slug}}/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_slug}}/README.md b/{{cookiecutter.project_slug}}/README.md index 99e6187..22255b1 100644 --- a/{{cookiecutter.project_slug}}/README.md +++ b/{{cookiecutter.project_slug}}/README.md @@ -24,7 +24,7 @@ $ make install ## Take your CLI for a spin -This Cookiecutter comes with two generic CLI commands, namely, `init` and `show`. +This Cookiecutter comes with two generic CLI commands, namely, `init` and `hello`. ```bash $ {{cookiecutter.cli_command.strip().lower().replace(' ', '_').replace('-', '_')}} init From c7bac92380900e302e34c137a85ebce316190b61 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 13 Sep 2022 15:53:40 +0200 Subject: [PATCH 53/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48dcfcd..62f33a5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# A cookiecutter to bake a delicious Python Click CLI tool :cookie: +# A cookiecutter to bake delicious Python Click CLI tools :cookie: ![Come to the dark side... We have cookies!](https://github.com/ltpitt/cookiecutter-python-cli/blob/master/darth_vader_cookies.jpg?raw=true) From ecadffd02c72fd744c0e60bb707e2f5f340a8699 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Thu, 15 Sep 2022 10:12:52 +0200 Subject: [PATCH 54/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62f33a5..2e582fb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# A cookiecutter to bake delicious Python Click CLI tools :cookie: +# A cookiecutter to bake tasty Python Click CLI tools :cookie: ![Come to the dark side... We have cookies!](https://github.com/ltpitt/cookiecutter-python-cli/blob/master/darth_vader_cookies.jpg?raw=true) From 3a43b5a8284d51418e415da8df1f99c615acf05e Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Thu, 15 Sep 2022 10:23:31 +0200 Subject: [PATCH 55/65] Update cookiecutter.json --- cookiecutter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookiecutter.json b/cookiecutter.json index f2e7684..6a91a4a 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -2,6 +2,6 @@ "project_name": "Awesome CLI", "project_slug": "{{cookiecutter.project_name.strip().lower().replace(' ', '_').replace('-', '_')}}", "cli_command": "acli", - "author": "Davide Nastri", + "author": "Yankee Maharjan", "description": "This CLI tool does one thing and does it well." } From 284590bb945fd8ae3739be853188c4aa27177670 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Thu, 15 Sep 2022 10:25:12 +0200 Subject: [PATCH 56/65] Update cookiecutter.json --- cookiecutter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookiecutter.json b/cookiecutter.json index 6a91a4a..369ca48 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -3,5 +3,5 @@ "project_slug": "{{cookiecutter.project_name.strip().lower().replace(' ', '_').replace('-', '_')}}", "cli_command": "acli", "author": "Yankee Maharjan", - "description": "This CLI tool does one thing and does it well." + "description": "This CLI tool does one thing and does it awesomely." } From 448070baf6cde62bda10a5ee30cc0b0007bd7f67 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Thu, 15 Sep 2022 11:05:22 +0200 Subject: [PATCH 57/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e582fb..e663fb6 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ $ pip install --user cookiecutter Generate your project template using cookiecutter. ```bash -$ cookiecutter gh:ltpitt/cookiecutter-python-cli +$ cookiecutter gh:yankeexe/cookiecutter-python-cli ``` ## Project Setup From afbe6faa2bfe52d772a24e7a9492e6ca84dc677e Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 27 Sep 2022 17:23:32 +0200 Subject: [PATCH 58/65] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e663fb6..c96fee0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# Important note +A newer version of this Cookiecutter, using the amazing [Typer](https://typer.tiangolo.com/), is work in progress and it is being built [here](https://github.com/ltpitt/python-cookiecutter-typer-cli). + # A cookiecutter to bake tasty Python Click CLI tools :cookie: ![Come to the dark side... We have cookies!](https://github.com/ltpitt/cookiecutter-python-cli/blob/master/darth_vader_cookies.jpg?raw=true) From d18482d9a9230adbbf9317910e5ed4ba8464b367 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Tue, 27 Sep 2022 17:24:42 +0200 Subject: [PATCH 59/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c96fee0..4449a18 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Important note -A newer version of this Cookiecutter, using the amazing [Typer](https://typer.tiangolo.com/), is work in progress and it is being built [here](https://github.com/ltpitt/python-cookiecutter-typer-cli). +A newer version of this Cookiecutter (using the amazing [Typer](https://typer.tiangolo.com/)!) is currently work in progress and available [here](https://github.com/ltpitt/python-cookiecutter-typer-cli). # A cookiecutter to bake tasty Python Click CLI tools :cookie: From 067f21e7ad5e3eef2155de81d1580f644d0cc6eb Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:10:39 +0200 Subject: [PATCH 60/65] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4449a18..282929d 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,13 @@ A newer version of this Cookiecutter (using the amazing [Typer](https://typer.ti Install cookiecutter. ```bash -$ pip install --user cookiecutter +pip install --user cookiecutter ``` Generate your project template using cookiecutter. ```bash -$ cookiecutter gh:yankeexe/cookiecutter-python-cli +cookiecutter gh:yankeexe/cookiecutter-python-cli ``` ## Project Setup From 02f13be1cfe5a8ae4cb0d368f9c1d13c49474837 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:11:06 +0200 Subject: [PATCH 61/65] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 282929d..86ca6d8 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ pip install --user cookiecutter Generate your project template using cookiecutter. ```bash -cookiecutter gh:yankeexe/cookiecutter-python-cli +cookiecutter gh:ltpitt/cookiecutter-python-cli ``` ## Project Setup From e4aa70ebc15cabc1bed04cd051929c67e2d5127a Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:24:24 +0200 Subject: [PATCH 62/65] Create dependabot.yml --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..855eaf1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file +version: 2 +updates: + - package-ecosystem: "pip" + directory: "{{cookiecutter.project_slug}}/requirements" + schedule: + interval: "weekly" From 98de1c6df28374cc535cf40c59f256123ac5ba27 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:26:46 +0200 Subject: [PATCH 63/65] Update README.md --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 86ca6d8..26d5d7b 100644 --- a/README.md +++ b/README.md @@ -38,31 +38,31 @@ cookiecutter gh:ltpitt/cookiecutter-python-cli 2. Create a virtual environment. ```bash -$ python -m venv venv +python -m venv venv ``` 3. Linux / Mac - Activate it. ```bash -$ source venv/Scripts/activate +source venv/Scripts/activate ``` 3. Windows - Activate it. ```bash -$ source venv/Scripts/Activate.ps1 +source venv/Scripts/Activate.ps1 ``` 4. Linux / Mac - Install development dependencies with editable mode to test the CLI. ```bash -$ make install +make install ``` 4. Windows - Install development dependencies with editable mode to test the CLI. ```bash -$ pip install -e . -r requirements/dev.txt +pip install -e . -r requirements/dev.txt ``` ## Take your CLI for a spin @@ -74,11 +74,11 @@ This Cookiecutter comes with two generic CLI commands, namely, `init` and `hello > `<>` is the executable command you choose for your CLI during project setup. ```bash -$ <> init +<> init ``` ```bash -$ <> hello +<> hello ``` ### Test with Docker @@ -90,13 +90,13 @@ CLI commands can be tested with Docker. Image is tagged <> name. ```bash -$ make docker-image +make docker-image ``` 2. Run the command inside the container. ```bash -$ docker-run --rm <> init +docker-run --rm <> init ``` ## Documentation @@ -104,25 +104,25 @@ $ docker-run --rm <> init 1. Linux / Mac - Install documentation-related dependencies. ```bash -$ make docs +make docs ``` 1. Windows - Install development dependencies with editable mode to test the CLI. ```bash -$ pip install -r requirements/docs.txt +pip install -r requirements/docs.txt ``` 2. Linux / Mac - Serve the docs locally. ```bash -$ make serve-docs +make serve-docs ``` 2. Windows - Serve the docs locally. ```bash -$ mkdocs serve -f docs/mkdocs.yml +mkdocs serve -f docs/mkdocs.yml ``` ## Linux / Mac - Distribution @@ -134,13 +134,13 @@ $ mkdocs serve -f docs/mkdocs.yml To publish you CLI to PyPI, run: ```bash -$ make distributions +make distributions ``` `dist` directory will be created inside your project directory. Upload it to PyPI using: ```bash -$ twine dist/* +twine dist/* ``` ## Linux / Mac - Help @@ -148,5 +148,5 @@ $ twine dist/* For help related to make commands. ```bash -$ make help +make help ``` From c8feed9a65e02d911029a4169aabb9ad7eb0c5a0 Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:35:09 +0200 Subject: [PATCH 64/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 1 + 1 file changed, 1 insertion(+) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index d262389..f4b3f58 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -8,3 +8,4 @@ black click typing-extensions rich +pyyaml>=6.0 From b511edc027108031b5d4e737e94290c3e6831ffe Mon Sep 17 00:00:00 2001 From: Davide Nastri Date: Wed, 3 Sep 2025 16:36:39 +0200 Subject: [PATCH 65/65] Update dev.in --- {{cookiecutter.project_slug}}/requirements/dev.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/{{cookiecutter.project_slug}}/requirements/dev.in b/{{cookiecutter.project_slug}}/requirements/dev.in index f4b3f58..e6d601a 100644 --- a/{{cookiecutter.project_slug}}/requirements/dev.in +++ b/{{cookiecutter.project_slug}}/requirements/dev.in @@ -9,3 +9,5 @@ click typing-extensions rich pyyaml>=6.0 +py>=1.11.0 +