[tool.poetry]
name = "pydase"
version = "0.7.4"
description = "A flexible and robust Python library for creating, managing, and interacting with data services, with built-in support for web and RPC servers, and customizable features for diverse use cases."
authors = ["Mose Mueller <mosmuell@ethz.ch>"]
readme = "README.md"
packages = [{ include = "pydase", from = "src" }]


[tool.poetry.dependencies]
python = "^3.10"
rpyc = "^5.3.1"
fastapi = "^0.108.0"
uvicorn = "^0.27.0"
toml = "^0.10.2"
python-socketio = "^5.8.0"
confz = "^2.0.0"
pint = "^0.22"
pillow = "^10.0.0"
websocket-client = "^1.7.0"

[tool.poetry.group.dev]
optional = true

[tool.poetry.group.dev.dependencies]
types-toml = "^0.10.8.6"
pytest = "^7.4.0"
pytest-cov = "^4.1.0"
mypy = "^1.4.1"
matplotlib = "^3.7.2"
pyright = "^1.1.323"
pytest-mock = "^3.11.1"
ruff = "^0.2.0"
pytest-asyncio = "^0.23.2"

[tool.poetry.group.docs]
optional = true

[tool.poetry.group.docs.dependencies]
mkdocs = "^1.5.2"
mkdocs-include-markdown-plugin = "^3.9.1"
mkdocstrings = "^0.22.0"
pymdown-extensions = "^10.1"

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

[tool.ruff]
target-version = "py310" # Always generate Python 3.10-compatible code
extend-exclude = [
  "docs", "frontend"
]

[tool.ruff.lint]
select = [
    "ASYNC", # flake8-async
    "C4",    # flake8-comprehensions
    "C901",  # mccabe complex-structure
    "E",     # pycodestyle errors
    "ERA",   # eradicate
    "F",     # pyflakes
    "FLY",   # flynt
    "G",     # flake8-logging-format
    "I",     # isort
    "ICN",   # flake8-import-conventions
    "INP",   # flake8-no-pep420
    "ISC",   # flake8-implicit-str-concat
    "N",     # pep8-naming
    "NPY",   # NumPy-specific rules
    "PERF",  # perflint
    "PIE",   # flake8-pie
    "PL",    # pylint
    "PYI",   # flake8-pyi
    "Q",     # flake8-quotes
    "RET",   # flake8-return
    "RUF",   # Ruff-specific rules
    "SIM",   # flake8-simplify
    "TID",   # flake8-tidy-imports
    "TCH",   # flake8-type-checking
    "UP",    # pyupgrade
    "YTT",   # flake8-2020
    "W",     # pycodestyle warnings
]
ignore = [
    "RUF006",  # asyncio-dangling-task
    "PERF203",  # try-except-in-loop
]

[tool.ruff.lint.mccabe]
max-complexity = 7


[tool.pyright]
include = ["src/pydase"]
typeCheckingMode = "basic"


[tool.mypy]
disallow_untyped_defs = true
disallow_untyped_calls = true
disallow_incomplete_defs = true
disallow_any_generics = true
check_untyped_defs = true
ignore_missing_imports = false
