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

[project]
name = "certisigma-census"
dynamic = ["version"]
description = "Cryptographic file inventory and exfiltration detection — powered by CertiSigma"
readme = "README.md"
license = "MIT"
requires-python = ">=3.10"
authors = [{ name = "Ten Sigma Sagl" }]
keywords = ["cryptography", "attestation", "forensics", "breach-detection", "file-integrity"]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Intended Audience :: System Administrators",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Security :: Cryptography",
    "Topic :: System :: Filesystems",
]
dependencies = [
    "certisigma>=1.8.0",
    "click>=8.1",
    "tomli>=2.0; python_version < '3.11'",
]

[project.optional-dependencies]
watch = [
    "watchdog>=4.0.0",
]
report = [
    "fpdf2>=2.8.0",
]
dev = [
    "pytest>=7.0",
    "pytest-cov>=4.0",
    "watchdog>=4.0.0",
    "fpdf2>=2.8.0",
    "pyyaml>=6.0",
]

[project.scripts]
census = "certisigma_census.cli:main"

[project.urls]
Homepage = "https://certisigma.ch"
Documentation = "https://developers.certisigma.ch/census"
Repository = "https://github.com/massimocavallin/certisigma-census"
Issues = "https://github.com/massimocavallin/certisigma-census/issues"

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

[tool.hatch.build.targets.wheel]
packages = ["src/certisigma_census"]

[tool.pytest.ini_options]
testpaths = ["tests"]
markers = [
    "integration: tests that call the real CertiSigma API (require CERTISIGMA_API_KEY)",
]
addopts = "-m 'not integration'"

[tool.coverage.run]
source = ["certisigma_census"]
branch = true
omit = ["tests/*", "*/__pycache__/*"]

[tool.coverage.report]
fail_under = 79
show_missing = true
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "if __name__ == .__main__.",
]

[tool.coverage.html]
directory = "htmlcov"
