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

[tool.black]
target-version = ["py39"]

[tool.coverage.report]
exclude_lines = ["raise NotImplementedError", "TYPE_CHECKING"]
fail_under = 100
show_missing = true

[tool.coverage.run]
omit = ["aiopurpleair/backports/*"]
source = ["aiopurpleair"]

[tool.isort]
known_first_party = "aiopurpleair,examples,tests"
multi_line_output = 3
profile = "black"

[tool.mypy]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
follow_imports = "silent"
ignore_missing_imports = true
no_implicit_optional = true
platform = "linux"
plugins = ["pydantic.mypy"]
python_version = "3.10"
show_error_codes = true
strict_equality = true
warn_incomplete_stub = true
warn_redundant_casts = true
warn_return_any = true
warn_unreachable = true
warn_unused_configs = true
warn_unused_ignores = true

[tool.poetry]
name = "aiopurpleair"
version = "2023.10.0"
description = "A Python 3, asyncio-based library to interact with the PurpleAir API"
readme = "README.md"
authors = ["Aaron Bach <bachya1208@gmail.com>"]
license = "MIT"
repository = "https://github.com/bachya/aiopurpleair"
classifiers = [
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
]

[tool.poetry.dependencies]
aiohttp = ">=3.9.0b0"
certifi = ">=2023.07.22"
pydantic = ">=2.0.0,<3.0.0"
python = ">=3.10,<=3.12"
yarl = ">=1.9.2"

[tool.poetry.group.dev.dependencies]
GitPython = ">=3.1.35"
Pygments = ">=2.15.0"
aresponses = "^2.1.6"
bandit = "^1.7.4"
black = ">=22.10,<24.0"
blacken-docs = "^1.12.1"
codespell = "^2.2.2"
coverage = {version = ">=6.5,<8.0", extras = ["toml"]}
darglint = "^1.8.1"
isort = "^5.10.1"
mypy = "^1.2.0"
pre-commit = ">=2.20,<4.0"
pre-commit-hooks = "^4.3.0"
pylint = ">=2.15.5,<4.0.0"
pytest = "^7.2.0"
pytest-aiohttp = "^1.0.0"
pytest-asyncio = ">=0.20.1,<0.22.0"
pytest-cov = "^4.0.0"
pyupgrade = "^3.1.0"
pyyaml = "^6.0.1"
requests = ">=2.31.0"
ruff = ">=0.0.261,<0.0.293"
safety = "^2.3.1"
typing-extensions = "^4.8.0"
vulture = "^2.6"
yamllint = "^1.28.0"

[tool.poetry.urls]
"Bug Tracker" = "https://github.com/bachya/aiopurpleair/issues"
Changelog = "https://github.com/bachya/aiopurpleair/releases"

[tool.pylint.BASIC]
expected-line-ending-format = "LF"

[tool.pylint.DESIGN]
max-attributes = 20

[tool.pylint.FORMAT]
max-line-length = 88

[tool.pylint.MASTER]
extension-pkg-whitelist = [
  "pydantic",
]
ignore = [
  "tests",
]
load-plugins = [
  "pylint.extensions.bad_builtin",
  "pylint.extensions.code_style",
  "pylint.extensions.docparams",
  "pylint.extensions.docstyle",
  "pylint.extensions.empty_comment",
  "pylint.extensions.overlapping_exceptions",
  "pylint.extensions.typing",
]

[tool.pylint."MESSAGES CONTROL"]
# Reasons disabled:
# consider-alternative-union-syntax - Pydantic + Python 3.9 struggles with | operators
# unnecessary-pass - This can hurt readability
disable = [
  "consider-alternative-union-syntax",
  "unnecessary-pass"
]

[tool.pylint.REPORTS]
score = false

[tool.pylint.SIMILARITIES]
# Minimum lines number of a similarity.
# We set this higher because of some cases where V2 and V3 functionality are
# similar, but abstracting them isn't feasible.
min-similarity-lines = 4

# Ignore comments when computing similarities.
ignore-comments = true

# Ignore docstrings when computing similarities.
ignore-docstrings = true

# Ignore imports when computing similarities.
ignore-imports = true

[tool.pyright]
include = ["aiopurpleair"]

[tool.vulture]
min_confidence = 80
paths = ["aiopurpleair", "tests"]
verbose = false
