diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 7730fa9..23419d0 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -12,3 +12,5 @@ tag = True [bumpversion:file:doc-source/index.rst] [bumpversion:file:mh_utils/__init__.py] + +[bumpversion:file:pyproject.toml] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 07665ac..37ab663 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -17,7 +17,10 @@ THE ISSUE WILL BE CLOSED IF INSUFFICIENT INFORMATION IS PROVIDED. ## Steps to Reproduce - + 1. 2. diff --git a/.github/workflows/python_ci.yml b/.github/workflows/python_ci.yml index b89a1c0..27b14cf 100644 --- a/.github/workflows/python_ci.yml +++ b/.github/workflows/python_ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: "windows-2019" continue-on-error: ${{ matrix.config.experimental }} env: - USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.5' + USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.6' strategy: fail-fast: False @@ -23,7 +23,7 @@ jobs: - {python-version: "3.7", testenvs: "py37,build", experimental: False} - {python-version: "3.8", testenvs: "py38,build", experimental: False} - {python-version: "3.9", testenvs: "py39,build", experimental: False} - - {python-version: "3.10.0-alpha.5", testenvs: "py310-dev,build", experimental: True} + - {python-version: "3.10.0-alpha.6", testenvs: "py310-dev,build", experimental: True} steps: - name: Checkout 🛎️ diff --git a/.github/workflows/python_ci_linux.yml b/.github/workflows/python_ci_linux.yml index 83e8404..947d6dd 100644 --- a/.github/workflows/python_ci_linux.yml +++ b/.github/workflows/python_ci_linux.yml @@ -13,7 +13,7 @@ jobs: runs-on: "ubuntu-20.04" continue-on-error: ${{ matrix.config.experimental }} env: - USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.5' + USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.6' strategy: fail-fast: False @@ -23,7 +23,7 @@ jobs: - {python-version: "3.7", testenvs: "py37,build", experimental: False} - {python-version: "3.8", testenvs: "py38,build", experimental: False} - {python-version: "3.9", testenvs: "py39,build", experimental: False} - - {python-version: "3.10.0-alpha.5", testenvs: "py310-dev,build", experimental: True} + - {python-version: "3.10.0-alpha.6", testenvs: "py310-dev,build", experimental: True} steps: - name: Checkout 🛎️ diff --git a/.github/workflows/python_ci_macos.yml b/.github/workflows/python_ci_macos.yml index 6801e51..21f8f6f 100644 --- a/.github/workflows/python_ci_macos.yml +++ b/.github/workflows/python_ci_macos.yml @@ -13,7 +13,7 @@ jobs: runs-on: "macos-latest" continue-on-error: ${{ matrix.config.experimental }} env: - USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.5' + USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10.0-alpha.6' strategy: fail-fast: False @@ -23,7 +23,7 @@ jobs: - {python-version: "3.7", testenvs: "py37,build", experimental: False} - {python-version: "3.8", testenvs: "py38,build", experimental: False} - {python-version: "3.9", testenvs: "py39,build", experimental: False} - - {python-version: "3.10.0-alpha.5", testenvs: "py310-dev,build", experimental: True} + - {python-version: "3.10.0-alpha.6", testenvs: "py310-dev,build", experimental: True} steps: - name: Checkout 🛎️ diff --git a/.pylintrc b/.pylintrc index 12063c9..a21206a 100644 --- a/.pylintrc +++ b/.pylintrc @@ -66,7 +66,7 @@ confidence= # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" disable=all -enable=assert-on-tuple,astroid-error,bad-except-order,bad-inline-option,bad-option-value,bad-reversed-sequence,bare-except,binary-op-exception,boolean-datetime,catching-non-exception,cell-var-from-loop,confusing-with-statement,consider-merging-isinstance,consider-using-enumerate,consider-using-ternary,continue-in-finally,cyclic-import,deprecated-pragma,django-not-available,duplicate-except,duplicate-key,eval-used,exec-used,expression-not-assigned,fatal,file-ignored,fixme,global-at-module-level,global-statement,global-variable-not-assigned,global-variable-undefined,http-response-with-content-type-json,http-response-with-json-dumps,invalid-all-object,invalid-characters-in-docstring,len-as-condition,literal-comparison,locally-disabled,locally-enabled,lost-exception,lowercase-l-suffix,misplaced-bare-raise,missing-kwoa,mixed-line-endings,model-has-unicode,model-missing-unicode,model-no-explicit-unicode,model-unicode-not-callable,multiple-imports,multiple-statements,new-db-field-with-default,non-ascii-bytes-literals,nonexistent-operator,not-in-loop,notimplemented-raised,overlapping-except,parse-error,pointless-statement,pointless-string-statement,raising-bad-type,raising-non-exception,raw-checker-failed,redefine-in-handler,redefined-argument-from-local,redefined-builtin,redundant-content-type-for-json-response,reimported,relative-import,return-outside-function,simplifiable-if-statement,singleton-comparison,syntax-error,trailing-comma-tuple,trailing-newlines,unbalanced-tuple-unpacking,undefined-all-variable,undefined-loop-variable,unexpected-line-ending-format,unidiomatic-typecheck,unnecessary-lambda,unnecessary-pass,unnecessary-semicolon,unneeded-not,unpacking-non-sequence,unreachable,unrecognized-inline-option,used-before-assignment,useless-else-on-loop,using-constant-test,wildcard-import,yield-outside-function,useless-return +enable=assert-on-tuple,astroid-error,bad-except-order,bad-inline-option,bad-option-value,bad-reversed-sequence,bare-except,binary-op-exception,boolean-datetime,catching-non-exception,cell-var-from-loop,confusing-with-statement,consider-merging-isinstance,consider-using-enumerate,consider-using-ternary,continue-in-finally,cyclic-import,deprecated-pragma,django-not-available,duplicate-except,duplicate-key,eval-used,exec-used,expression-not-assigned,fatal,file-ignored,fixme,global-at-module-level,global-statement,global-variable-not-assigned,global-variable-undefined,http-response-with-content-type-json,http-response-with-json-dumps,invalid-all-object,invalid-characters-in-docstring,len-as-condition,literal-comparison,locally-disabled,locally-enabled,lost-exception,lowercase-l-suffix,misplaced-bare-raise,missing-kwoa,mixed-line-endings,model-has-unicode,model-missing-unicode,model-no-explicit-unicode,model-unicode-not-callable,multiple-imports,new-db-field-with-default,non-ascii-bytes-literals,nonexistent-operator,not-in-loop,notimplemented-raised,overlapping-except,parse-error,pointless-statement,pointless-string-statement,raising-bad-type,raising-non-exception,raw-checker-failed,redefine-in-handler,redefined-argument-from-local,redefined-builtin,redundant-content-type-for-json-response,reimported,relative-import,return-outside-function,simplifiable-if-statement,singleton-comparison,syntax-error,trailing-comma-tuple,trailing-newlines,unbalanced-tuple-unpacking,undefined-all-variable,undefined-loop-variable,unexpected-line-ending-format,unidiomatic-typecheck,unnecessary-lambda,unnecessary-pass,unnecessary-semicolon,unneeded-not,unpacking-non-sequence,unreachable,unrecognized-inline-option,used-before-assignment,useless-else-on-loop,using-constant-test,wildcard-import,yield-outside-function,useless-return [REPORTS] diff --git a/.readthedocs.yml b/.readthedocs.yml index ce3f99b..41d2e57 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,7 +5,9 @@ version: 2 sphinx: builder: html configuration: doc-source/conf.py -formats: all +formats: + - pdf + - htmlzip python: version: 3.8 install: diff --git a/__pkginfo__.py b/__pkginfo__.py index a73d476..2022197 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -27,7 +27,6 @@ """ __version__ = "0.2.1" - repo_root = pathlib.Path(__file__).parent install_requires = (repo_root / "requirements.txt").read_text(encoding="utf-8").split('\n') -extras_require = {"all": []} +extras_require = {} diff --git a/doc-source/conf.py b/doc-source/conf.py index 4bdf609..e7a6926 100644 --- a/doc-source/conf.py +++ b/doc-source/conf.py @@ -23,7 +23,7 @@ """ author = "Dominic Davis-Foster" -project = "mh_utils" +project = "mh_utils".replace('_', '-') slug = re.sub(r'\W+', '-', project.lower()) release = version = __version__ copyright = "2020-2021 Dominic Davis-Foster" # pylint: disable=redefined-builtin @@ -35,6 +35,7 @@ "sphinx_toolbox.more_autodoc", "sphinx_toolbox.more_autosummary", "sphinx_toolbox.tweaks.param_dash", + "sphinx_toolbox.tweaks.latex_toc", "sphinx.ext.intersphinx", "sphinx.ext.mathjax", "sphinxcontrib.httpdomain", @@ -45,6 +46,7 @@ "sphinx_copybutton", "sphinxcontrib.default_values", "sphinxcontrib.toctree_plus", + "sphinx_debuginfo", "seed_intersphinx_mapping", "enum_tools.autoenum", "attr_utils.autoattrs", diff --git a/doc-source/index.rst b/doc-source/index.rst index 557ba37..6fa8010 100644 --- a/doc-source/index.rst +++ b/doc-source/index.rst @@ -10,116 +10,118 @@ mh_utils .. start shields -.. list-table:: - :stub-columns: 1 - :widths: 10 90 - - * - Docs - - |docs| |docs_check| - * - Tests - - |actions_linux| |actions_windows| |actions_macos| |coveralls| - * - PyPI - - |pypi-version| |supported-versions| |supported-implementations| |wheel| - * - Anaconda - - |conda-version| |conda-platform| - * - Activity - - |commits-latest| |commits-since| |maintained| |pypi-downloads| - * - QA - - |codefactor| |actions_flake8| |actions_mypy| |pre_commit_ci| - * - Other - - |license| |language| |requires| - -.. |docs| rtfd-shield:: - :project: mh_utils - :alt: Documentation Build Status - -.. |docs_check| actions-shield:: - :workflow: Docs Check - :alt: Docs Check Status - -.. |actions_linux| actions-shield:: - :workflow: Linux - :alt: Linux Test Status - -.. |actions_windows| actions-shield:: - :workflow: Windows - :alt: Windows Test Status - -.. |actions_macos| actions-shield:: - :workflow: macOS - :alt: macOS Test Status - -.. |actions_flake8| actions-shield:: - :workflow: Flake8 - :alt: Flake8 Status - -.. |actions_mypy| actions-shield:: - :workflow: mypy - :alt: mypy status - -.. |requires| requires-io-shield:: - :alt: Requirements Status - -.. |coveralls| coveralls-shield:: - :alt: Coverage - -.. |codefactor| codefactor-shield:: - :alt: CodeFactor Grade - -.. |pypi-version| pypi-shield:: - :project: mh_utils - :version: - :alt: PyPI - Package Version - -.. |supported-versions| pypi-shield:: - :project: mh_utils - :py-versions: - :alt: PyPI - Supported Python Versions - -.. |supported-implementations| pypi-shield:: - :project: mh_utils - :implementations: - :alt: PyPI - Supported Implementations - -.. |wheel| pypi-shield:: - :project: mh_utils - :wheel: - :alt: PyPI - Wheel - -.. |conda-version| image:: https://img.shields.io/conda/v/domdfcoding/mh_utils?logo=anaconda - :target: https://anaconda.org/domdfcoding/mh_utils - :alt: Conda - Package Version - -.. |conda-platform| image:: https://img.shields.io/conda/pn/domdfcoding/mh_utils?label=conda%7Cplatform - :target: https://anaconda.org/domdfcoding/mh_utils - :alt: Conda - Platform - -.. |license| github-shield:: - :license: - :alt: License - -.. |language| github-shield:: - :top-language: - :alt: GitHub top language - -.. |commits-since| github-shield:: - :commits-since: v0.2.1 - :alt: GitHub commits since tagged version - -.. |commits-latest| github-shield:: - :last-commit: - :alt: GitHub last commit - -.. |maintained| maintained-shield:: 2021 - :alt: Maintenance - -.. |pypi-downloads| pypi-shield:: - :project: mh_utils - :downloads: month - :alt: PyPI - Downloads - -.. |pre_commit_ci| pre-commit-ci-shield:: - :alt: pre-commit.ci status +.. only:: html + + .. list-table:: + :stub-columns: 1 + :widths: 10 90 + + * - Docs + - |docs| |docs_check| + * - Tests + - |actions_linux| |actions_windows| |actions_macos| |coveralls| + * - PyPI + - |pypi-version| |supported-versions| |supported-implementations| |wheel| + * - Anaconda + - |conda-version| |conda-platform| + * - Activity + - |commits-latest| |commits-since| |maintained| |pypi-downloads| + * - QA + - |codefactor| |actions_flake8| |actions_mypy| |pre_commit_ci| + * - Other + - |license| |language| |requires| + + .. |docs| rtfd-shield:: + :project: mh_utils + :alt: Documentation Build Status + + .. |docs_check| actions-shield:: + :workflow: Docs Check + :alt: Docs Check Status + + .. |actions_linux| actions-shield:: + :workflow: Linux + :alt: Linux Test Status + + .. |actions_windows| actions-shield:: + :workflow: Windows + :alt: Windows Test Status + + .. |actions_macos| actions-shield:: + :workflow: macOS + :alt: macOS Test Status + + .. |actions_flake8| actions-shield:: + :workflow: Flake8 + :alt: Flake8 Status + + .. |actions_mypy| actions-shield:: + :workflow: mypy + :alt: mypy status + + .. |requires| requires-io-shield:: + :alt: Requirements Status + + .. |coveralls| coveralls-shield:: + :alt: Coverage + + .. |codefactor| codefactor-shield:: + :alt: CodeFactor Grade + + .. |pypi-version| pypi-shield:: + :project: mh_utils + :version: + :alt: PyPI - Package Version + + .. |supported-versions| pypi-shield:: + :project: mh_utils + :py-versions: + :alt: PyPI - Supported Python Versions + + .. |supported-implementations| pypi-shield:: + :project: mh_utils + :implementations: + :alt: PyPI - Supported Implementations + + .. |wheel| pypi-shield:: + :project: mh_utils + :wheel: + :alt: PyPI - Wheel + + .. |conda-version| image:: https://img.shields.io/conda/v/domdfcoding/mh_utils?logo=anaconda + :target: https://anaconda.org/domdfcoding/mh_utils + :alt: Conda - Package Version + + .. |conda-platform| image:: https://img.shields.io/conda/pn/domdfcoding/mh_utils?label=conda%7Cplatform + :target: https://anaconda.org/domdfcoding/mh_utils + :alt: Conda - Platform + + .. |license| github-shield:: + :license: + :alt: License + + .. |language| github-shield:: + :top-language: + :alt: GitHub top language + + .. |commits-since| github-shield:: + :commits-since: v0.2.1 + :alt: GitHub commits since tagged version + + .. |commits-latest| github-shield:: + :last-commit: + :alt: GitHub last commit + + .. |maintained| maintained-shield:: 2021 + :alt: Maintenance + + .. |pypi-downloads| pypi-shield:: + :project: mh_utils + :downloads: month + :alt: PyPI - Downloads + + .. |pre_commit_ci| pre-commit-ci-shield:: + :alt: pre-commit.ci status .. end shields @@ -163,8 +165,10 @@ Installation .. start links -View the :ref:`Function Index ` or browse the `Source Code <_modules/index.html>`__. +.. only:: html -`Browse the GitHub Repository `__ + View the :ref:`Function Index ` or browse the `Source Code <_modules/index.html>`__. + + `Browse the GitHub Repository `__ .. end links diff --git a/doc-source/requirements.txt b/doc-source/requirements.txt index 0ddf59f..98b0634 100644 --- a/doc-source/requirements.txt +++ b/doc-source/requirements.txt @@ -8,10 +8,11 @@ repo-helper-sphinx-theme>=0.0.2 seed-intersphinx-mapping>=0.3.1 sphinx<3.4.0,>=3.0.3 sphinx-copybutton>=0.2.12 +sphinx-debuginfo>=0.1.0 sphinx-notfound-page>=0.5 sphinx-prompt>=1.1.0 sphinx-tabs>=1.1.13 -sphinx-toolbox>=1.8.3 +sphinx-toolbox>=2.1.0 sphinxcontrib-httpdomain>=1.7.0 sphinxemoji>=0.1.6 tabulate>=0.8.9 diff --git a/pyproject.toml b/pyproject.toml index fba467d..11dcb18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,23 @@ [build-system] requires = [ "setuptools>=40.6.0", "wheel>=0.34.2",] build-backend = "setuptools.build_meta" + +[project] +name = "mh_utils" +version = "0.2.1" +description = "Utilities for handing ancillary files produced by MassHunter." +readme = "README.rst" +keywords = [ "chemistry", "mass-spectrometry", "chromatography",] +dynamic = [ "requires-python", "classifiers", "dependencies",] +[[project.authors]] +email = "dominic@davis-foster.co.uk" +name = "Dominic Davis-Foster" + +[project.license] +file = "LICENSE" + +[project.urls] +Homepage = "https://github.com/domdfcoding/mh_utils" +"Issue Tracker" = "https://github.com/domdfcoding/mh_utils/issues" +"Source Code" = "https://github.com/domdfcoding/mh_utils" +Documentation = "https://mh_utils.readthedocs.io/en/latest" diff --git a/setup.py b/setup.py index 3e192e8..f5cd633 100644 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ # This file is managed by 'repo_helper'. Don't edit it directly. # stdlib +import shutil import sys # 3rd party @@ -19,3 +20,5 @@ py_modules=[], version=__version__, ) + +shutil.rmtree("mh_utils.egg-info", ignore_errors=True) diff --git a/tests/requirements.txt b/tests/requirements.txt index 19f7a94..8bda3fc 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -1,7 +1,7 @@ betamax>=0.8.1 coincidence>=0.1.0 coverage>=5.1 -coverage-pyver-pragma>=0.0.6 +coverage-pyver-pragma>=0.2.1 domdf-python-tools[testing]>=2.0.1 importlib-resources>=3.0.0 iniconfig!=1.1.0,>=1.0.1 diff --git a/tox.ini b/tox.ini index 599b529..a4a53fe 100644 --- a/tox.ini +++ b/tox.ini @@ -48,11 +48,11 @@ commands = sphinx-build -M html . ./build {posargs} skip_install = True changedir = {toxinidir} deps = - twine>=3.2.0 - pep517>=0.9.1 + build[virtualenv]>=0.3.1 check-wheel-contents>=0.1.0 + twine>=3.2.0 commands = - python -m pep517.build --source --binary "{toxinidir}" + python -m build --sdist --wheel "{toxinidir}" twine check dist/*.tar.gz dist/*.whl check-wheel-contents dist/ @@ -74,6 +74,7 @@ deps = flake8-strftime>=0.1.1 flake8-typing-imports>=1.10.0 flake8-encodings>=0.1.0 + flake8-slots>=0.1.0 git+https://github.com/PyCQA/pydocstyle@5118faa7173b0e5bbc230c4adf628758e13605bf git+https://github.com/domdfcoding/flake8-quotes.git git+https://github.com/domdfcoding/flake8-rst-docstrings.git @@ -107,7 +108,7 @@ whitelist_externals = /bin/bash changedir = {toxinidir} deps = coverage>=5 - coverage_pyver_pragma>=0.0.6 + coverage_pyver_pragma>=0.2.1 commands = /bin/bash -c "rm -rf htmlcov" coverage html @@ -115,15 +116,15 @@ commands = [flake8] max-line-length = 120 -select = E111 E112 E113 E121 E122 E125 E127 E128 E129 E131 E133 E201 E202 E203 E211 E222 E223 E224 E225 E225 E226 E227 E228 E231 E241 E242 E251 E261 E262 E265 E271 E272 E303 E304 E306 E402 E502 E703 E711 E712 E713 E714 E721 W291 W292 W293 W391 W504 YTT101 YTT102 YTT103 YTT201 YTT202 YTT203 YTT204 YTT301 YTT302 YTT303 STRFTIME001 STRFTIME002 SXL001 PT001 PT002 PT003 PT005 PT006 PT007 PT008 PT009 PT010 PT011 PT012 PT013 PT014 PT015 PT016 PT017 PT018 PT019 PT020 PT021 RST201 RST202 RST203 RST204 RST205 RST206 RST207 RST208 RST210 RST211 RST212 RST213 RST214 RST215 RST216 RST217 RST218 RST219 RST299 RST301 RST302 RST303 RST304 RST305 RST306 RST399 RST401 RST499 RST900 RST901 RST902 RST903 Q001 Q002 Q003 A001 A002 A003 TYP001 TYP002 TYP003 TYP004 TYP005 TYP006 ENC001 ENC002 ENC003 ENC004 Y001,Y002 Y003 Y004 Y005 Y006 Y007 Y008 Y009 Y010 Y011 Y012 Y013 Y014 Y015 Y090 Y091 E301 E302 E305 D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 -exclude = doc-source,.git,__pycache__,old,build,dist,__pkginfo__.py,setup.py,.tox,venv +select = E111 E112 E113 E121 E122 E125 E127 E128 E129 E131 E133 E201 E202 E203 E211 E222 E223 E224 E225 E225 E226 E227 E228 E231 E241 E242 E251 E261 E262 E265 E271 E272 E303 E304 E306 E402 E502 E703 E711 E712 E713 E714 E721 W291 W292 W293 W391 W504 YTT101 YTT102 YTT103 YTT201 YTT202 YTT203 YTT204 YTT301 YTT302 YTT303 STRFTIME001 STRFTIME002 SXL001 PT001 PT002 PT003 PT005 PT006 PT007 PT008 PT009 PT010 PT011 PT012 PT013 PT014 PT015 PT016 PT017 PT018 PT019 PT020 PT021 RST201 RST202 RST203 RST204 RST205 RST206 RST207 RST208 RST210 RST211 RST212 RST213 RST214 RST215 RST216 RST217 RST218 RST219 RST299 RST301 RST302 RST303 RST304 RST305 RST306 RST399 RST401 RST499 RST900 RST901 RST902 RST903 Q001 Q002 Q003 A001 A002 A003 TYP001 TYP002 TYP003 TYP004 TYP005 TYP006 ENC001 ENC002 ENC003 ENC004 Y001,Y002 Y003 Y004 Y005 Y006 Y007 Y008 Y009 Y010 Y011 Y012 Y013 Y014 Y015 Y090 Y091 E301 E302 E305 D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 SLOT000 SLOT001 SLOT002 +extend-exclude = doc-source,old,build,dist,__pkginfo__.py,setup.py,venv rst-directives = TODO envvar extras-require per-file-ignores = - tests/*: D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 - */*.pyi: E301 E302 E305 D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 + tests/*: D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 SLOT000 SLOT001 SLOT002 + */*.pyi: E301 E302 E305 D100 D101 D102 D103 D104 D106 D201 D204 D207 D208 D209 D210 D211 D212 D213 D214 D215 D300 D301 D400 D402 D403 D404 D415 D417 DALL000 SLOT000 SLOT001 SLOT002 pytest-parametrize-names-type = csv inline-quotes = " multiline-quotes = """