[project]
name = "FindMy"
version = "0.9.4"
description = "Query the location of your FindMy devices with Python!"
readme = "README.md"
authors = [{ name = "Mike Almeloo", email = "git@mikealmel.ooo" }]
license-files = ["LICENSE.md"]
requires-python = ">=3.9,<3.14"
dependencies = [
    "srp>=1.0.21,<2.0.0",
    "cryptography>=42.0.0,<46.0.0",
    "beautifulsoup4>=4.12.3,<5.0.0",
    "aiohttp>=3.9.5,<4.0.0",
    "bleak>=1.0.0,<2.0.0",
    "typing-extensions>=4.12.2,<5.0.0",
    "anisette>=1.2.4,<2.0.0",
]

[dependency-groups]
dev = [
    "pre-commit>=4.0.0,<5.0.0",
    "basedpyright>=1.31.1,<2.0.0",
    "ruff>=0.8.4,<1.0.0",
    "tomli>=2.0.1,<3.0.0",
    "packaging>=25.0,<26.0",
]
test = ["pytest>=8.3.2,<9.0.0"]
docs = [
    "furo>=2025.7.19",
    "myst-parser>=4.0.1; python_full_version >= '3.10'",
    "sphinx>=8.2.3,<8.3.0; python_full_version >= '3.11'",
    "sphinx-autoapi==3.6.0",
    "sphinx-book-theme>=1.1.4",
    "sphinx-design>=0.6.1",
    "sphinx-togglebutton>=0.3.2",
]

[tool.pyright]
venvPath = "."
venv = ".venv"

# rule overrides
typeCheckingMode = "standard"
reportImplicitOverride = true

[tool.ruff]
line-length = 100

exclude = ["docs/", "tests/"]

[tool.ruff.lint]
select = ["ALL"]
ignore = [
    "FIX002", # resolving TODOs

    "D203", # one blank line before class docstring
    "D212", # multi-line docstring start at first line
    "D105", # docstrings in magic methods

    "S101", # assert statements
    "S603", # false-positive subprocess call (https://github.com/astral-sh/ruff/issues/4045)

    "PLR2004", # "magic" values >.>
    "FBT",     # boolean "traps"
    "COM812",  # trailing commas
]

[tool.ruff.lint.per-file-ignores]
"docs/*" = [
    "INP001", # implicit namespaces
]
"examples/*" = [
    "T201",   # use of "print"
    "S101",   # use of "assert"
    "D",      # documentation
    "INP001", # namespacing
    "ERA001", # commented out code
]
"scripts/*" = [
    "T201", # use of "print"
    "D",    # documentation
]
"tests/*" = [
    "INP001",  # implicit namespaces
    "PLC0415", # import not on top of file
]

[tool.setuptools]
packages = ["findmy"]

[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
