feat: separate package configuration in `pyproject.toml` from the package’s development configuration and dependencies by jenstroeger · Pull Request #952 · jenstroeger/python-package-template

@@ -0,0 +1,177 @@
# https://bandit.readthedocs.io/en/latest/config.html # Skip test B101 because of issue https://github.com/PyCQA/bandit/issues/457 [tool.bandit] tests = [] skips = ["B101"]

# https://github.com/psf/black#configuration [tool.black] line-length = 120

# https://github.com/commitizen-tools/commitizen # https://commitizen-tools.github.io/commitizen/bump/ [tool.commitizen] bump_message = """bump: release $current_version → $new_version
Automatically generated by Commitizen. """ tag_format = "v$major.$minor.$patch$prerelease" update_changelog_on_bump = true version_files = [ "src/package/__init__.py:__version__", ] major_version_zero = false version = "2.16.0"

# https://github.com/pytest-dev/pytest-cov # https://github.com/nedbat/coveragepy [tool.coverage.report] fail_under = 100 show_missing = true
[tool.coverage.run] branch = true omit = [ "src/package/__main__.py", ]

# https://pycqa.github.io/isort/ [tool.isort] profile = "black" multi_line_output = 3 line_length = 120 skip_gitignore = true

# https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml [tool.mypy] # mypy_path = # exclude = show_error_codes = true show_column_numbers = true pretty = true show_traceback = true check_untyped_defs = true incremental = false strict = true warn_return_any = true warn_redundant_casts = true warn_unreachable = true warn_unused_configs = true warn_unused_ignores = true disallow_any_explicit = true disallow_untyped_calls = true disallow_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_decorators = true # disable_error_code = # allow_redefinition =
[[tool.mypy.overrides]] module = [ "pytest.*", ] ignore_missing_imports = true

# https://pylint.pycqa.org/en/latest/user_guide/configuration/index.html [tool.pylint.main] fail-under = 10.0 suggestion-mode = true load-plugins = [ "perflint", # A Linter for performance anti-patterns. "pylint.extensions.bad_builtin", "pylint.extensions.broad_try_clause", "pylint.extensions.check_elif", "pylint.extensions.code_style", "pylint.extensions.comparison_placement", "pylint.extensions.confusing_elif", "pylint.extensions.consider_refactoring_into_while_condition", "pylint.extensions.consider_ternary_expression", "pylint.extensions.dict_init_mutate", # "pylint.extensions.docparams", # "pylint.extensions.docstyle", "pylint.extensions.dunder", "pylint.extensions.empty_comment", "pylint.extensions.for_any_all", "pylint.extensions.magic_value", # "pylint.extensions.mccabe", "pylint.extensions.no_self_use", "pylint.extensions.overlapping_exceptions", "pylint.extensions.private_import", "pylint.extensions.redefined_loop_name", "pylint.extensions.redefined_variable_type", "pylint.extensions.set_membership", "pylint.extensions.typing", "pylint.extensions.while_used", ] disable = [ "fixme", "line-too-long", # Replaced by Flake8 Bugbear B950 check. "too-few-public-methods", "too-many-ancestors", "too-many-arguments", "too-many-boolean-expressions", "too-many-branches", "too-many-instance-attributes", "too-many-lines", "too-many-locals", "too-many-nested-blocks", "too-many-positional-arguments", "too-many-public-methods", "too-many-return-statements", "too-many-statements", "too-many-try-statements", ]
[tool.pylint.MISCELLANEOUS] notes = [ "FIXME", "TODO", "BUGBUG", ]
[tool.pylint.FORMAT] max-line-length = 120

# https://docs.pytest.org/en/latest/reference/customize.html#configuration-file-formats # https://docs.pytest.org/en/latest/reference/reference.html#configuration-options # https://docs.pytest.org/en/latest/reference/reference.html#command-line-flags # # To integrate Hypothesis into pytest and coverage, we use its native plugin: # https://hypothesis.readthedocs.io/en/latest/details.html#the-hypothesis-pytest-plugin # # To discover tests in documentation, we use doctest and the doctest-plus plugin which # adds multiple useful options to control tests in documentation. More details at: # https://docs.python.org/3/library/doctest.html # https://github.com/scientific-python/pytest-doctestplus # # To avoid failing pytest when no tests were dicovered, we need an extra plugin: # https://docs.pytest.org/en/latest/reference/exit-codes.html # https://github.com/yashtodi94/pytest-custom_exit_code [tool.pytest.ini_options] minversion = "7.0" addopts = """-vv -ra --tb native --durations 0 \ --hypothesis-show-statistics --hypothesis-explain --hypothesis-verbosity verbose \ --doctest-modules --doctest-continue-on-failure --doctest-glob '*.rst' --doctest-plus \ --suppress-no-test-exit-code \ --cov package \ """ # Consider adding --pdb # https://docs.python.org/3/library/doctest.html#option-flags doctest_optionflags = "IGNORE_EXCEPTION_DETAIL" env = [ "PYTHONDEVMODE=1", # https://docs.python.org/3/library/devmode.html ] filterwarnings = [ "error", "always::DeprecationWarning", # https://docs.pytest.org/en/latest/how-to/failures.html#warning-about-unraisable-exceptions-and-unhandled-thread-exceptions "error::pytest.PytestUnraisableExceptionWarning", "error::pytest.PytestUnhandledThreadExceptionWarning", ]