[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "heros"
dynamic = ["version"]
description = "Make your objects available everywhere"
readme = "README.md"
license = {text = "LGPL-3.0-or-later"}
keywords = ["remote object", "zenoh", "pub/sub", "rpc"]
authors = [
    {name = "Thomas Niederprüm", email = "t.niederpruem@rptu.de"},
    {name = "Suthep Pomjaksilp", email = "s.pomjaksilp@rptu.de"},
]
maintainers = [
    {name = "Thomas Niederprüm", email = "t.niederpruem@rptu.de"},
    {name = "Suthep Pomjaksilp", email = "s.pomjaksilp@rptu.de"},
]
requires-python = ">=3.10"

dependencies = [
    "eclipse-zenoh>=1.1.0,<1.8.0",
    "cbor2",
    "numpy",
]

classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "Topic :: Communications",
    "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)",
    "Environment :: Console",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3 :: Only"
]

[project.urls]
Homepage = "https://gitlab.com/atomiq-project/heros"
Repository = "https://gitlab.com/atomiq-project/heros"
Documentation = "https://gitlab.com/atomiq-project/heros/wiki"
"Bug Tracker" = "https://gitlab.com/atomiq-project/heros/issues"

[project.optional-dependencies]
dev = [
    "hatch",
    "pytest>=7.1",
    "pytest-mock>=3",
    "flake8>=6.0",
    "pytest-cov>=4.0",
    "pre-commit>=2.15.0",
    "ruff",
]
docs = [
    "hatch",
    "sphinx>=8 ; python_version >= '3.11'",
    "sphinx-autoapi>=3",
    "sphinx-autodoc-typehints>=3 ; python_version >= '3.11'",
    "sphinx-argparse",
    "furo>=2024",
    "toml"
]

[tool.hatch.version]
path = "src/heros/__init__.py"

[tool.ruff]
show-fixes = true

line-length = 120
target-version = "py310"

[tool.ruff.lint.pydocstyle]
# Use Google-style docstrings.
convention = "pep257"

[tool.ruff.lint.pylint]

max-args = 10
max-branches = 25
max-returns = 15
max-statements = 50

[tool.ruff.format]
# Force Linux/macOS line endings
line-ending = "lf"

[tool.codespell]
# explicit is misspelled in the iTunes API
ignore-words-list = "heros"
skip = "*.svg"

[tool.mypy]
follow_untyped_imports = true
