[tool.poetry]
name = "python-kasa"
version = "0.6.2.1"
description = "Python API for TP-Link Kasa Smarthome devices"
license = "GPL-3.0-or-later"
authors = ["python-kasa developers"]
repository = "https://github.com/python-kasa/python-kasa"
readme = "README.md"
packages = [
  { include = "kasa" }
]
include = [
  { path= "CHANGELOG.md", format = "sdist" }
]

[tool.poetry.urls]
"Bug Tracker" = "https://github.com/python-kasa/python-kasa/issues"
"Documentation" = "https://python-kasa.readthedocs.io"

[tool.poetry.scripts]
kasa = "kasa.cli:cli"

[tool.poetry.dependencies]
python = "^3.8"
anyio = "*"  # see https://github.com/python-trio/asyncclick/issues/18
asyncclick = ">=8"
pydantic = ">=1"
cryptography = ">=1.9"
async-timeout = ">=3.0.0"
aiohttp = ">=3"

# speed ups
orjson = { "version" = ">=3.9.1", optional = true }
kasa-crypt = { "version" = ">=0.2.0", optional = true }

# required only for docs
sphinx = { version = "^5", optional = true }
sphinx_rtd_theme = { version = "^0", optional = true }
sphinxcontrib-programoutput = { version = "^0", optional = true }
myst-parser = { version = "*", optional = true }
docutils = { version = ">=0.17", optional = true }

# shell support
# ptpython = { version = "*", optional = true }

[tool.poetry.group.dev.dependencies]
pytest = "*"
pytest-cov = "*"
pytest-asyncio = "*"
pytest-sugar = "*"
pre-commit = "*"
voluptuous = "*"
toml = "*"
tox = "*"
pytest-mock = "*"
codecov = "*"
xdoctest = "*"
coverage = {version = "*", extras = ["toml"]}

[tool.poetry.extras]
docs = ["sphinx", "sphinx_rtd_theme", "sphinxcontrib-programoutput", "myst-parser", "docutils"]
speedups = ["orjson", "kasa-crypt"]
# shell = ["ptpython"]

[tool.coverage.run]
source = ["kasa"]
branch = true
omit = ["kasa/tests/*"]

[tool.coverage.report]
exclude_lines = [
  # ignore debug logging
  "if debug_enabled:",
  # Don't complain if tests don't hit defensive assertion code:
  "raise AssertionError",
  "raise NotImplementedError",
  # Don't complain about missing debug-only code:
  "def __repr__",
  # Have to re-enable the standard pragma
  "pragma: no cover",
  # TYPE_CHECKING and @overload blocks are never executed during pytest run
  "if TYPE_CHECKING:",
  "@overload"
]

[tool.pytest.ini_options]
markers = [
    "requires_dummy: test requires dummy data to pass, skipped on real devices",
]
asyncio_mode = "auto"

[tool.doc8]
paths = ["docs"]
ignore = ["D001"]
ignore-path-errors = ["docs/source/index.rst;D000"]

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

[tool.ruff]
target-version = "py38"
select = [
  "E",  # pycodestyle
  "D",  # pydocstyle
  "F",  # pyflakes
  "UP",  # pyupgrade
  "B",  # flake8-bugbear
  "SIM",  # flake8-simplify
  "I",  # isort
  "S",  # bandit
]
ignore = [
  "D105",  # Missing docstring in magic method
  "D107",  # Missing docstring in `__init__`
]

[tool.ruff.pydocstyle]
convention = "pep257"

[tool.ruff.per-file-ignores]
"kasa/tests/*.py" = [
    "D100",
    "D101",
    "D102",
    "D103",
    "D104",
    "S101", # allow asserts
    "E501", # ignore line-too-longs
]
"docs/source/conf.py" = [
    "D100",
    "D103",
]