diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 82e1968..ba65746 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -19,5 +19,9 @@ jobs: with: python-version: ${{ matrix.python-version }} - run: python -m pip install --upgrade pip - - run: python -m pip install -e .[test] - - run: python -m pytest + - run: python -m pip install -e ".[dev]" + - run: ruff check . + - run: ruff format --check . + - run: mypy . + - run: pytest + diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..288278c --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["ms-python.python", "ms-python.vscode-pylance", "charliermarsh.ruff"] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..de7aaf4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "python.testing.pytestEnabled": true, + "python.testing.unittestEnabled": false, + "python.testing.pytestArgs": ["tests"], + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.ruff": "explicit", + "source.organizeImports.ruff": "explicit" + } + } +} diff --git a/pyproject.toml b/pyproject.toml index 8645a07..78f96e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,5 +16,31 @@ dependencies = [] [project.urls] Repository = "https://github.com/arionvlad/python-apprentice" +[project.optional-dependencies] +dev = [ + "mypy", + "pytest", + "ruff", +] + [tool.setuptools.packages.find] -where = ["src"] \ No newline at end of file +where = ["src"] + +[tool.ruff] +line-length = 88 +target-version = "py311" + +[tool.ruff.lint] +select = ["E", "F", "I", "UP"] + +[tool.ruff.format] +quote-style = "double" + +[tool.mypy] +python_version = "3.11" +strict = true +files = ["src", "tests"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +pythonpath = ["src"] \ No newline at end of file diff --git a/src/python_apprentice/__init__.py b/src/python_apprentice/__init__.py index fd2e6df..4ed5d28 100644 --- a/src/python_apprentice/__init__.py +++ b/src/python_apprentice/__init__.py @@ -1,12 +1,5 @@ """Python Apprentice package.""" -from __future__ import annotations +from .greetings import greet - -def greet(name: str) -> str: - return f"Hello, {name}!" - - -from .main import main - -__all__ = ["greet", "main"] +__all__ = ["greet"] diff --git a/src/python_apprentice/greetings.py b/src/python_apprentice/greetings.py new file mode 100644 index 0000000..1e21eeb --- /dev/null +++ b/src/python_apprentice/greetings.py @@ -0,0 +1,2 @@ +def greet(name: str) -> str: + return f"Hello, {name}!" diff --git a/src/python_apprentice/main.py b/src/python_apprentice/main.py index 3398f3b..da7d57e 100644 --- a/src/python_apprentice/main.py +++ b/src/python_apprentice/main.py @@ -1,13 +1,7 @@ """Application entrypoint.""" -from __future__ import annotations - -from . import greet +from python_apprentice import greet def main() -> None: - print(greet("World")) - - -if __name__ == "__main__": - main() + print(greet("world")) diff --git a/tests/test_greeting.py b/tests/test_greeting.py new file mode 100644 index 0000000..df094b5 --- /dev/null +++ b/tests/test_greeting.py @@ -0,0 +1,5 @@ +from python_apprentice import greet + + +def test_greet_returns_personalized_message() -> None: + assert greet("Vlad") == "Hello, Vlad!" diff --git a/tests/test_my_package.py b/tests/test_my_package.py deleted file mode 100644 index 0209e0d..0000000 --- a/tests/test_my_package.py +++ /dev/null @@ -1,5 +0,0 @@ -from python_apprentice import greet - - -def test_greet_returns_expected_message() -> None: - assert greet("World") == "Hello, World!"