From 37eae3835066bea95558c81d656ff1b0424bf933 Mon Sep 17 00:00:00 2001 From: Tao Feng Date: Sun, 16 Jul 2023 16:54:12 -0700 Subject: [PATCH] Some git setup --- .flake8 | 12 +++ .../workflows/actions/poetry_setup/action.yml | 76 ++++++++++++++ .github/workflows/lint.yml | 36 +++++++ .github/workflows/pytest.yml | 33 ------- .github/workflows/test.yml | 49 ++++++++++ .gitignore | 40 ++++++++ Makefile | 34 +++++++ poetry.lock | 98 ++++++++++++++++++- pyproject.toml | 16 ++- src/yival/__main__.py | 2 +- src/yival/api/__init__.py | 2 +- src/yival/cli/__init__.py | 2 +- src/yival/cli/add.py | 6 +- src/yival/cli/run.py | 4 +- 14 files changed, 366 insertions(+), 44 deletions(-) create mode 100644 .flake8 create mode 100644 .github/workflows/actions/poetry_setup/action.yml create mode 100644 .github/workflows/lint.yml delete mode 100644 .github/workflows/pytest.yml create mode 100644 .github/workflows/test.yml create mode 100644 Makefile diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..b9c53043 --- /dev/null +++ b/.flake8 @@ -0,0 +1,12 @@ +[flake8] +exclude = + venv + .venv + __pycache__ + notebooks +# Recommend matching the black line length (default 88), +# rather than using the flake8 default of 79: +max-line-length = 88 +extend-ignore = + # See https://github.com/PyCQA/pycodestyle/issues/373 + E203, \ No newline at end of file diff --git a/.github/workflows/actions/poetry_setup/action.yml b/.github/workflows/actions/poetry_setup/action.yml new file mode 100644 index 00000000..79e5e963 --- /dev/null +++ b/.github/workflows/actions/poetry_setup/action.yml @@ -0,0 +1,76 @@ +# An action for setting up poetry install with caching. +# Using a custom action since the default action does not +# take poetry install groups into account. +# Action code from: +# https://github.com/actions/setup-python/issues/505#issuecomment-1273013236 +name: poetry-install-with-caching +description: Poetry install with support for caching of dependency groups. + +inputs: + python-version: + description: Python version, supporting MAJOR.MINOR only + required: true + + poetry-version: + description: Poetry version + required: true + + install-command: + description: Command run for installing dependencies + required: false + default: poetry install + + cache-key: + description: Cache key to use for manual handling of caching + required: true + + working-directory: + description: Directory to run install-command in + required: false + default: "" + +runs: + using: composite + steps: + - uses: actions/setup-python@v4 + name: Setup python $${ inputs.python-version }} + with: + python-version: ${{ inputs.python-version }} + + - uses: actions/cache@v3 + id: cache-pip + name: Cache Pip ${{ inputs.python-version }} + env: + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + with: + path: | + ~/.cache/pip + key: pip-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }} + + - run: pipx install poetry==${{ inputs.poetry-version }} --python python${{ inputs.python-version }} + shell: bash + + - name: Check Poetry File + shell: bash + run: | + poetry check + + - name: Check lock file + shell: bash + run: | + poetry lock --check + + - uses: actions/cache@v3 + id: cache-poetry + env: + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + with: + path: | + ~/.cache/pypoetry/virtualenvs + ~/.cache/pypoetry/cache + ~/.cache/pypoetry/artifacts + key: poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles('poetry.lock') }} + + - run: ${{ inputs.install-command }} + working-directory: ${{ inputs.working-directory }} + shell: bash diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..f76dfe0f --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,36 @@ +name: lint + +on: + push: + branches: [main] + pull_request: + +env: + POETRY_VERSION: "1.4.2" + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + steps: + - uses: actions/checkout@v3 + - name: Install poetry + run: | + pipx install poetry==$POETRY_VERSION + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: poetry + - name: Install dependencies + run: | + poetry install + - name: Analysing the code with our lint + run: | + make lint diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml deleted file mode 100644 index dc01d660..00000000 --- a/.github/workflows/pytest.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: PyTest - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - build: - - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ["3.10"] - - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip poetry - python -m poetry install - - name: Test with pytest - run: | - poetry run pytest - - name: Test with pylint - run: | - poetry run pytest --pylint -m pylint . diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..042a8d15 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,49 @@ +name: test + +on: + push: + branches: [master] + pull_request: + workflow_dispatch: + +env: + POETRY_VERSION: "1.4.2" + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + test_type: + - "core" + - "extended" + name: Python ${{ matrix.python-version }} ${{ matrix.test_type }} + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: "./.github/actions/poetry_setup" + with: + python-version: ${{ matrix.python-version }} + poetry-version: "1.4.2" + cache-key: ${{ matrix.test_type }} + install-command: | + if [ "${{ matrix.test_type }}" == "core" ]; then + echo "Running core tests, installing dependencies with poetry..." + poetry install + else + echo "Running extended tests, installing dependencies with poetry..." + poetry install -E extended_testing + fi + - name: Run ${{matrix.test_type}} tests + run: | + if [ "${{ matrix.test_type }}" == "core" ]; then + make test + else + make extended_tests + fi + shell: bash diff --git a/.gitignore b/.gitignore index b6e47617..623bbb6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +.vs/ +.vscode/ +.idea/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -70,12 +73,14 @@ instance/ # Sphinx documentation docs/_build/ +docs/docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints +notebooks/ # IPython profile_default/ @@ -103,7 +108,9 @@ celerybeat.pid # Environments .env +.envrc .venv +.venvs env/ venv/ ENV/ @@ -127,3 +134,36 @@ dmypy.json # Pyre type checker .pyre/ + +# macOS display setting files +.DS_Store + +# Wandb directory +wandb/ + +# asdf tool versions +.tool-versions +/.ruff_cache/ + +*.pkl +*.bin + +# integration test artifacts +data_map* +\[('_type', 'fake'), ('stop', None)] + +# Replit files +*replit* + +node_modules +docs/.yarn/ +docs/node_modules/ +docs/.docusaurus/ +docs/.cache-loader/ +docs/_dist +docs/api_reference/_build +docs/docs_skeleton/build +docs/docs_skeleton/node_modules +docs/docs_skeleton/yarn.lock + +aimebot.pem \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..ea6165e9 --- /dev/null +++ b/Makefile @@ -0,0 +1,34 @@ +.PHONY: all format lint test + +all: help + +format: + poetry run black . + poetry run ruff --select I --fix . + +tests: + poetry run pytest . + +PYTHON_FILES=. +lint: PYTHON_FILES=. +lint_diff: PYTHON_FILES=$(shell git diff --name-only --diff-filter=d master | grep -E '\.py$$') +lint lint_diff: + poetry run mypy $(PYTHON_FILES) + poetry run black $(PYTHON_FILES) --check + poetry run ruff . + +help: + @echo '----' + @echo 'coverage - run unit tests and generate coverage report' + @echo 'docs_build - build the documentation' + @echo 'docs_clean - clean the documentation build artifacts' + @echo 'docs_linkcheck - run linkchecker on the documentation' + @echo 'format - run code formatters' + @echo 'lint - run linters' + @echo 'test - run unit tests' + @echo 'tests - run unit tests' + @echo 'test TEST_FILE= - run all tests in file' + @echo 'extended_tests - run only extended unit tests' + @echo 'test_watch - run unit tests in watch mode' + @echo 'integration_tests - run integration tests' + @echo 'docker_tests - run unit tests in docker' \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index c1849a56..9cf3470b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -170,6 +170,51 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "black" +version = "23.7.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "certifi" version = "2023.5.7" @@ -265,6 +310,20 @@ files = [ {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] +[[package]] +name = "click" +version = "8.1.5" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.5-py3-none-any.whl", hash = "sha256:e576aa487d679441d7d30abb87e1b43d24fc53bffb8758443b1a9e1cee504548"}, + {file = "click-8.1.5.tar.gz", hash = "sha256:4be4b1af8d665c6d942909916d31a213a106800c47d0eeba73d34da3cbc11367"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.6" @@ -676,6 +735,17 @@ files = [ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + [[package]] name = "platformdirs" version = "3.9.1" @@ -843,6 +913,32 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "ruff" +version = "0.0.278" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.278-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:1a90ebd8f2a554db1ee8d12b2f3aa575acbd310a02cd1a9295b3511a4874cf98"}, + {file = "ruff-0.0.278-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:38ca1c0c8c1221fe64c0a66784c91501d09a8ed02a4dbfdc117c0ce32a81eefc"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c62a0bde4d20d087cabce2fa8b012d74c2e985da86d00fb3359880469b90e31"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7545bb037823cd63dca19280f75a523a68bd3e78e003de74609320d6822b5a52"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb380d2d6fdb60656a0b5fa78305535db513fc72ce11f4532cc1641204ef380"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d11149c7b186f224f2055e437a030cd83b164a43cc0211314c33ad1553ed9c4c"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:666e739fb2685277b879d493848afe6933e3be30d40f41fe0e571ad479d57d77"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec8b0469b54315803aaf1fbf9a37162a3849424cab6182496f972ad56e0ea702"}, + {file = "ruff-0.0.278-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c25b96602695a147d62a572865b753ef56aff1524abab13b9436724df30f9bd7"}, + {file = "ruff-0.0.278-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a48621f5f372d5019662db5b3dbfc5f1450f927683d75f1153fe0ebf20eb9698"}, + {file = "ruff-0.0.278-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1078125123a3c68e92463afacedb7e41b15ccafc09e510c6c755a23087afc8de"}, + {file = "ruff-0.0.278-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3ce0d620e257b4cad16e2f0c103b2f43a07981668a3763380542e8a131d11537"}, + {file = "ruff-0.0.278-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1cae4c07d334eb588f171f1363fa89a8911047eb93184276be11a24dbbc996c7"}, + {file = "ruff-0.0.278-py3-none-win32.whl", hash = "sha256:70d39f5599d8449082ab8ce542fa98e16413145eb411dd1dc16575b44565d52d"}, + {file = "ruff-0.0.278-py3-none-win_amd64.whl", hash = "sha256:e131595ab7f4ce61a1650463bd2fe304b49e7d0deb0dfa664b92817c97cdba5f"}, + {file = "ruff-0.0.278-py3-none-win_arm64.whl", hash = "sha256:737a0cfb6c36aaa92d97a46957dfd5e55329299074ad06ed12663b98e0c6fc82"}, + {file = "ruff-0.0.278.tar.gz", hash = "sha256:1a9f1d925204cfba81b18368b7ac943befcfccc3a41e170c91353b674c6b7a66"}, +] + [[package]] name = "toml" version = "0.10.2" @@ -1129,4 +1225,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.10,<4" -content-hash = "f5eb68a5fb00e21ed33ac27644ab67e36b1bd78e8f8afa055ae4322918b5a48b" +content-hash = "fefb9186226060d846cc1df76d31ba82ffdf51aa07686ae423acca378a69d401" diff --git a/pyproject.toml b/pyproject.toml index 5f25d4db..c8884a85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,13 +16,25 @@ python = ">=3.10,<4" openai = "^0.27.4" -[tool.poetry.group.dev.dependencies] -pytest = "^7.2.2" +[tool.poetry.group.lint.dependencies] +ruff = "^0.0.278" +black = "^23.7.0" + + + +[tool.poetry.group.test.dependencies] +pytest = "^7.4.0" pytest-isort = "^3.1.0" pytest-mypy = "^0.10.3" pytest-pylint = "^0.19.0" pytest-yapf3 = "^0.7.0" +[tool.ruff] +select = [ + "E", # pycodestyle + "F", # pyflakes + "I", # isort +] [build-system] requires = ["poetry-core", "poetry-dynamic-versioning"] diff --git a/src/yival/__main__.py b/src/yival/__main__.py index de047b16..a0bcb306 100644 --- a/src/yival/__main__.py +++ b/src/yival/__main__.py @@ -22,5 +22,5 @@ def main(): sys.exit(status) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/src/yival/api/__init__.py b/src/yival/api/__init__.py index b22e4c7a..7d18815e 100644 --- a/src/yival/api/__init__.py +++ b/src/yival/api/__init__.py @@ -2,4 +2,4 @@ from .add import add -__all__ = (add.__name__, ) +__all__ = (add.__name__,) diff --git a/src/yival/cli/__init__.py b/src/yival/cli/__init__.py index b01c496c..6dfee867 100644 --- a/src/yival/cli/__init__.py +++ b/src/yival/cli/__init__.py @@ -8,7 +8,7 @@ def add_subcommands_to(parser: ArgumentParser): """Add subcommands to the main parser.""" - subparser = parser.add_subparsers(title='actions') + subparser = parser.add_subparsers(title="actions") for func in ( ADD, diff --git a/src/yival/cli/add.py b/src/yival/cli/add.py index 8724e90b..19e1a991 100644 --- a/src/yival/cli/add.py +++ b/src/yival/cli/add.py @@ -7,12 +7,12 @@ def add_arguments_to(subparser): """Add arguments to subcommand add.""" - parser: ArgumentParser = subparser.add_parser('add', help=add.__doc__) + parser: ArgumentParser = subparser.add_parser("add", help=add.__doc__) parser.description = add.__doc__ parser.set_defaults(func=add) - parser.add_argument('one', type=int, help='The 1st number.') - parser.add_argument('another', type=int, help='The 2nd number.') + parser.add_argument("one", type=int, help="The 1st number.") + parser.add_argument("another", type=int, help="The 2nd number.") def add(args: Namespace): diff --git a/src/yival/cli/run.py b/src/yival/cli/run.py index c869060b..f4555d03 100644 --- a/src/yival/cli/run.py +++ b/src/yival/cli/run.py @@ -5,7 +5,7 @@ def add_arguments_to(subparser): """Add arguments to subcommand run.""" - parser: ArgumentParser = subparser.add_parser('run', help=run.__doc__) + parser: ArgumentParser = subparser.add_parser("run", help=run.__doc__) parser.description = run.__doc__ parser.set_defaults(func=run) @@ -14,4 +14,4 @@ def add_arguments_to(subparser): def run(args: Namespace): """Run.""" - print(f'TODO: {args}') + print(f"TODO: {args}")