[project] name = "tdagent" version = "0.1.0" description = "TDA Agent Tools implemented for huggingface hackathon." authors = [ { name = "Pedro Completo Bento", email = "pedrobento988@gmail.com" }, { name = "Josep Pon Farreny", email = "ponpepo@gmail.com" }, { name = "Miguel Rodin Rodriguez", email = "miguelrodinrodriguez@gmail.com" }, { name = "Sofia Jeronimo dos Santos", email = "sofia.santos@siemens.com" }, { name = "Rodrigo Dominguez Sanz", email = "rodrigo.dominguez-sanz@siemens.com" }, ] requires-python = ">=3.10,<4" readme = "README.md" license = "" dependencies = [ "attackcti>=0.5.4", "audioop-lts>=0.2.1 ; python_full_version >= '3.13'", "black>=25.1.0", "cachetools>=6.0.0", "dnspython>=2.7.0", "gradio[mcp]>=5.32.1", "markdown>=3.8", "python-whois>=0.9.5", "requests>=2.32.3", "vt-py~=0.21.0", ] [project.scripts] [dependency-groups] dev = ["mypy~=1.14", "ruff>=0.9,<1", "pre-commit~=3.4", "pip-audit>=2.9.0"] test = [ "pytest>=7.4.4,<8", "pytest-cov>=4.1.0,<5", "pytest-randomly>=3.15.0,<4", "xdoctest>=1.1.2,<2", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.uv] package = false default-groups = ["dev", "test"] [tool.uv.workspace] members = ["test"] [tool.black] target-version = ["py39", "py310", "py311"] line-length = 88 [tool.isort] profile = "black" lines_after_imports = 2 [tool.mypy] cache_dir = ".cache/mypy/" ignore_missing_imports = true no_implicit_optional = true check_untyped_defs = true strict_equality = true disallow_any_generics = true disallow_subclassing_any = true disallow_untyped_calls = true disallow_untyped_defs = true disallow_incomplete_defs = true disallow_untyped_decorators = true warn_redundant_casts = true warn_unused_ignores = true exclude = "docs/" plugins = ["pydantic.mypy"] # ["numpy.typing.mypy_plugin"] [[tool.mypy.overrides]] module = "tests.*" disallow_untyped_defs = false disallow_incomplete_defs = false [tool.pytest.ini_options] cache_dir = ".cache" testpaths = ["tests", "tda_agent"] addopts = [ "--strict", "-r sxX", "--cov-report=html", "--cov-report=term-missing:skip-covered", "--no-cov-on-fail", "--xdoc", ] console_output_style = "count" markers = "" filterwarnings = ["ignore::DeprecationWarning"] [tool.ruff] cache-dir = ".cache/ruff" exclude = [ ".git", "__pycache__", "docs/source/conf.py", "old", "build", "dist", ".venv", "scripts", ] line-length = 88 [tool.ruff.lint] select = ["ALL"] ignore = ["D100", "D104", "D107", "D401", "EM102", "ERA001", "TRY003", "UP038"] [tool.ruff.lint.flake8-quotes] inline-quotes = "double" [tool.ruff.lint.flake8-bugbear] # Allow default arguments like, e.g., `data: List[str] = fastapi.Query(None)`. extend-immutable-calls = ["typer.Argument", "typer.Option"] [tool.ruff.lint.pep8-naming] ignore-names = ["F", "L"] [tool.ruff.lint.isort] lines-after-imports = 2 [tool.ruff.lint.mccabe] max-complexity = 18 [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.per-file-ignores] "*/__init__.py" = ["F401"] "tdagent/cli/**/*.py" = ["D103", "T201"] "tdagent/tools/rdap.py" = ["PLR2004"] "tests/*.py" = ["D103", "PLR2004", "S101"]