From 548f378b09f22887b84f74f03a948d09a4382220 Mon Sep 17 00:00:00 2001 From: Ian Currie Date: Sun, 15 Dec 2024 10:26:59 +0100 Subject: [PATCH] add pyproject.toml materials (snakesay) --- python-pyproject-toml/README.md | 3 ++ .../snakesay-project/.gitignore | 5 +++ .../snakesay-project/LICENSE | 19 +++++++++ .../snakesay-project/README.md | 19 +++++++++ .../snakesay-project/pyproject.toml | 41 +++++++++++++++++-- .../snakesay-project/snakesay/__init__.py | 3 ++ .../snakesay-project/snakesay/__main__.py | 4 +- .../snakesay-project/snakesay/snake.py | 14 +++---- 8 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 python-pyproject-toml/snakesay-project/.gitignore create mode 100644 python-pyproject-toml/snakesay-project/LICENSE create mode 100644 python-pyproject-toml/snakesay-project/README.md create mode 100644 python-pyproject-toml/snakesay-project/snakesay/__init__.py diff --git a/python-pyproject-toml/README.md b/python-pyproject-toml/README.md index e69de29bb2..0428090f46 100644 --- a/python-pyproject-toml/README.md +++ b/python-pyproject-toml/README.md @@ -0,0 +1,3 @@ +# Python pyproject.toml Project Example + +Here are supporting materials for the Real Python tutorial [How to Manage Python Projects With `pyproject.toml`](https://realpython.com/python-pyproject-toml/). diff --git a/python-pyproject-toml/snakesay-project/.gitignore b/python-pyproject-toml/snakesay-project/.gitignore new file mode 100644 index 0000000000..294badfbb9 --- /dev/null +++ b/python-pyproject-toml/snakesay-project/.gitignore @@ -0,0 +1,5 @@ +__pycache__ +*.pyc +*.pyo +*.egg-info +venv/ \ No newline at end of file diff --git a/python-pyproject-toml/snakesay-project/LICENSE b/python-pyproject-toml/snakesay-project/LICENSE new file mode 100644 index 0000000000..6c86d5ae59 --- /dev/null +++ b/python-pyproject-toml/snakesay-project/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2024 Real Python + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/python-pyproject-toml/snakesay-project/README.md b/python-pyproject-toml/snakesay-project/README.md new file mode 100644 index 0000000000..8f47e7ee17 --- /dev/null +++ b/python-pyproject-toml/snakesay-project/README.md @@ -0,0 +1,19 @@ +# Snakesay + +A simple Python project that prints a message in a speech bubble inspired by the classic [`cowsay`](https://en.wikipedia.org/wiki/Cowsay) program. Originally created by [Ian Currie](https://realpython.com/team/icurrie/) and [Geir Arne Hjelle](https://realpython.com/team/gahjelle/) for the [Everyday Project Packaging With `pyproject.toml`](https://realpython.com/courses/packaging-with-pyproject-toml/) course on Real Python. + +```console +$ ssay Hello World! + + ______________ +( Hello World! ) + ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + \ + \ ___ + \ (o o) + \_/ \ + λ \ \ + _\ \_ + (_____)_ + (________)=Oo° +``` diff --git a/python-pyproject-toml/snakesay-project/pyproject.toml b/python-pyproject-toml/snakesay-project/pyproject.toml index fa0a80c56f..ef367d3f28 100644 --- a/python-pyproject-toml/snakesay-project/pyproject.toml +++ b/python-pyproject-toml/snakesay-project/pyproject.toml @@ -1,10 +1,45 @@ [build-system] -requires = ["setuptools", "setuptools-scm"] +requires = ["setuptools>=75.3.0"] build-backend = "setuptools.build_meta" [project] name = "snakesay" -version = "1.0.0" +dependencies = ["rich>=13.9.0"] +authors = [{name = "Jin Doe", email = "jindoe@example.com"}] +keywords = ["CLI", "ASCII Art"] +readme = {file = "README.md", content-type = "text/markdown"} +requires-python = ">=3.9" +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] +dynamic = ["version"] + +[project.urls] +Repository = "https://github.com/me/spam.git" +Issues = "https://github.com/me/spam/issues" + +[project.optional-dependencies] +dev = ["black>=24.1.0", "isort>=5.13.0", "build", "twine"] [project.scripts] -snakey = "snakesay.__main__:main" +ssay = "snakesay.__main__:main" + +[tool.setuptools.packages.find] +where = ["."] + +[tool.setuptools.dynamic] +version = {attr = "snakesay.__version__"} + +[tool.black] +line-length = 88 + +[tool.isort] +profile = "black" \ No newline at end of file diff --git a/python-pyproject-toml/snakesay-project/snakesay/__init__.py b/python-pyproject-toml/snakesay-project/snakesay/__init__.py new file mode 100644 index 0000000000..4387b5b076 --- /dev/null +++ b/python-pyproject-toml/snakesay-project/snakesay/__init__.py @@ -0,0 +1,3 @@ +"""Snakesay - cowsay, but with a snake.""" + +__version__ = "0.1.0" diff --git a/python-pyproject-toml/snakesay-project/snakesay/__main__.py b/python-pyproject-toml/snakesay-project/snakesay/__main__.py index cbb83045bb..70f142dbad 100644 --- a/python-pyproject-toml/snakesay-project/snakesay/__main__.py +++ b/python-pyproject-toml/snakesay-project/snakesay/__main__.py @@ -2,8 +2,10 @@ from snakesay import snake + def main(): snake.say(" ".join(sys.argv[1:])) + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/python-pyproject-toml/snakesay-project/snakesay/snake.py b/python-pyproject-toml/snakesay-project/snakesay/snake.py index 412bb956a1..4ca60c44a9 100644 --- a/python-pyproject-toml/snakesay-project/snakesay/snake.py +++ b/python-pyproject-toml/snakesay-project/snakesay/snake.py @@ -1,9 +1,9 @@ SNAKE = r""" \ - \ __ - \ {oo} - (__)\ - λ \\ - _\\__ + \ ___ + \ (o o) + \_/ \ + λ \ \ + _\ \_ (_____)_ (________)=Oo° """ @@ -18,5 +18,5 @@ def bubble(message): def say(message): - print(bubble(message)) - print(SNAKE) \ No newline at end of file + print(bubble(message.replace("s", "ss").replace("S", "SS"))) + print(SNAKE)