[tool.poetry]
name = "poetry"
version = "1.6.0.dev0"
description = "Python dependency management and packaging made easy."
authors = ["Sébastien Eustace <sebastien@eustace.io>"]
maintainers = [
    "Arun Babu Neelicattu <arun.neelicattu@gmail.com>",
    "Bjorn Neergaard <bjorn@neersighted.com>",
    "Branch Vincent <branchevincent@gmail.com>",
    "Randy Döring <radoering.poetry@gmail.com>",
    "Steph Samson <hello@stephsamson.com>",
    "finswimmer <finswimmer77@gmail.com>",
    "Secrus <b.sokorski@gmail.com>",
]
license = "MIT"
readme = "README.md"
packages = [{ include = "poetry", from = "src" }]
include = [{ path = "tests", format = "sdist" }]
homepage = "https://python-poetry.org/"
repository = "https://github.com/python-poetry/poetry"
documentation = "https://python-poetry.org/docs"
keywords = ["packaging", "dependency", "poetry"]
classifiers = [
    "Topic :: Software Development :: Build Tools",
    "Topic :: Software Development :: Libraries :: Python Modules",
]

[tool.poetry.urls]
Changelog = "https://python-poetry.org/history/"

# Requirements
[tool.poetry.dependencies]
python = "^3.8"

poetry-core = "1.6.0"
poetry-plugin-export = "^1.3.1"
build = "^0.10.0"
cachecontrol = { version = "^0.12.9", extras = ["filecache"] }
cleo = "^2.0.0"
crashtest = "^0.4.1"
dulwich = "^0.21.2"
filelock = "^3.8.0"
importlib-metadata = { version = ">=4.4", python = "<3.10" }
installer = "^0.7.0"
jsonschema = "^4.10.0"
keyring = "^23.9.0"
lockfile = "^0.12.2"
# packaging uses calver, so version is unclamped
packaging = ">=20.4"
pexpect = "^4.7.0"
pkginfo = "^1.9.4"
platformdirs = "^3.0.0"
pyproject-hooks = "^1.0.0"
requests = "^2.18"
requests-toolbelt = ">=0.9.1,<2"
shellingham = "^1.5"
tomli = { version = "^2.0.1", python = "<3.11" }
tomlkit = ">=0.11.4,<1.0.0"
# trove-classifiers uses calver, so version is unclamped
trove-classifiers = ">=2022.5.19"
virtualenv = "^20.22.0"
xattr = { version = "^0.10.0", markers = "sys_platform == 'darwin'" }
urllib3 = "^1.26.0"

[tool.poetry.group.dev.dependencies]
pre-commit = "^2.6"

[tool.poetry.group.test.dependencies]
deepdiff = "^6.3"
httpretty = "^1.0"
pytest = "^7.1"
pytest-cov = "^4.0"
pytest-mock = "^3.9"
pytest-randomly = "^3.12"
pytest-xdist = { version = "^3.1", extras = ["psutil"] }

[tool.poetry.group.typing.dependencies]
mypy = ">=1.0"
types-jsonschema = ">=4.9.0"
types-requests = ">=2.28.8"

# only used in github actions
[tool.poetry.group.github-actions]
optional = true
[tool.poetry.group.github-actions.dependencies]
pytest-github-actions-annotate-failures = "^0.1.7"

[tool.poetry.scripts]
poetry = "poetry.console.application:main"


[build-system]
requires = ["poetry-core>=1.5.0"]
build-backend = "poetry.core.masonry.api"


[tool.ruff]
fix = true
unfixable = [
    "ERA", # do not autoremove commented out code
]
target-version = "py38"
line-length = 88
extend-select = [
    "B",   # flake8-bugbear
    "C4",  # flake8-comprehensions
    "ERA", # flake8-eradicate/eradicate
    "I",   # isort
    "N",   # pep8-naming
    "PIE", # flake8-pie
    "PGH", # pygrep
    "RUF", # ruff checks
    "SIM", # flake8-simplify
    "TCH", # flake8-type-checking
    "TID", # flake8-tidy-imports
    "UP",  # pyupgrade
]
ignore = [
    "B904", # use 'raise ... from err'
    "B905", # use explicit 'strict=' parameter with 'zip()'
    "N818", #  Exception name should be named with an Error suffix
]
extend-exclude = [
    "docs/*",
    # Frozen and not subject to change in this repo
    "install-poetry.py",
    # External to the project's coding standards
    "tests/**/fixtures/*",
]

[tool.ruff.flake8-tidy-imports]
ban-relative-imports = "all"

[tool.ruff.isort]
force-single-line = true
lines-between-types = 1
lines-after-imports = 2
known-first-party = ["poetry"]
known-third-party = ["poetry.core"]
required-imports = ["from __future__ import annotations"]

[tool.black]
target-version = ['py38']
preview = true
force-exclude = '''
.*/setup\.py$
'''


[tool.mypy]
files = "src, tests"
mypy_path = "src"
namespace_packages = true
explicit_package_bases = true
show_error_codes = true
strict = true
enable_error_code = [
    "ignore-without-code",
    "redundant-expr",
    "truthy-bool",
]
exclude = [
    "tests/fixtures",
    "tests/masonry/builders/fixtures",
    "tests/utils/fixtures",
]

# use of importlib-metadata backport makes it impossible to satisfy mypy
# without some ignores: but we get different sets of ignores at different
# python versions.
[[tool.mypy.overrides]]
module = [
    'poetry.plugins.plugin_manager',
    'poetry.repositories.installed_repository',
    'poetry.utils.env',
    'tests.console.commands.self.test_show_plugins',
    'tests.helpers',
    'tests.repositories.test_installed_repository',
]
warn_unused_ignores = false

[[tool.mypy.overrides]]
module = [
    'cachecontrol.*',
    'deepdiff.*',
    'httpretty.*',
    'keyring.*',
    'lockfile.*',
    'pexpect.*',
    'requests_toolbelt.*',
    'shellingham.*',
    'virtualenv.*',
    'xattr.*',
    'zipp.*',
]
ignore_missing_imports = true


[tool.pytest.ini_options]
addopts = "-n auto"
testpaths = ["tests"]


[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:"
]
