[project]
name = "mvt"
dynamic = ["version"]
authors = [{ name = "Claudio Guarnieri", email = "nex@nex.sx" }]
maintainers = [
    { name = "Etienne Maynier", email = "tek@randhome.io" },
    { name = "Donncha Ó Cearbhaill", email = "donncha.ocearbhaill@amnesty.org" },
    { name = "Rory Flynn", email = "rory.flynn@amnesty.org" },
]
description = "Mobile Verification Toolkit"
readme = "README.md"
keywords = ["security", "mobile", "forensics", "malware"]
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Intended Audience :: Information Technology",
    "Operating System :: OS Independent",
    "Programming Language :: Python",
]
dependencies = [
    "click==8.3.3",
    "rich==14.3.3",
    "tld==0.13.2",
    "requests==2.33.1",
    "simplejson==3.20.2",
    "packaging==26.2",
    "appdirs==1.4.4",
    "iOSbackup==0.9.925",
    "adb-shell[usb]==0.4.4",
    "libusb1==3.3.1",
    "cryptography==47.0.0",
    "PyYAML>=6.0.2",
    "pyahocorasick==2.3.1",
    "betterproto2==0.9.1",
    "pydantic==2.13.3",
    "pydantic-settings==2.14.0",
    "NSKeyedUnArchiver==1.5.2",
    "python-dateutil==2.9.0.post0",
    "tzdata==2026.2",
]
requires-python = ">= 3.10"

[project.urls]
homepage = "https://docs.mvt.re/en/latest/"
repository = "https://github.com/mvt-project/mvt"

[project.scripts]
mvt-ios = "mvt.ios:cli"
mvt-android = "mvt.android:cli"

[dependency-groups]
dev = [
    "requests>=2.31.0",
    "pytest>=7.4.3",
    "pytest-cov>=4.1.0",
    "pytest-github-actions-annotate-failures>=0.2.0",
    "pytest-mock>=3.14.0",
    "stix2>=3.0.1",
    "ruff>=0.1.6",
    "mypy>=1.7.1",
    "betterproto2-compiler",
    "types-PyYAML>=6.0.12.20250516",
    "types-python-dateutil>=2.9.0.20250822",
    "types-requests>=2.32.4.20250913",
]
docs = [
    "mkdocs==1.6.1",
    "mkdocs-autorefs==1.4.4",
    "mkdocs-material==9.7.6",
    "mkdocs-material-extensions==1.3.1",
    "mkdocstrings==1.0.4",
]

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[tool.coverage.run]
omit = ["tests/*"]

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

[tool.mypy]
install_types = false
ignore_missing_imports = true
packages = "src"

[tool.pytest.ini_options]
addopts = "-ra -q --cov=mvt --cov-report html --junitxml=pytest.xml --cov-report=term-missing:skip-covered"
testpaths = ["tests"]

[tool.ruff]
lint.select = ["C90", "E", "F", "W"] # flake8 default set
lint.ignore = [
    "E501", # don't enforce line length violations
    "C901", # complex-structure

    # These were previously ignored but don't seem to be required:
    # "E265",  # no-space-after-block-comment
    # "F401",  # unused-import
    # "E127",  # not included in ruff
    # "W503",  # not included in ruff
    # "E226",  # missing-whitespace-around-arithmetic-operator
    # "E203",  # whitespace-before-punctuation
]

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"] # unused-import

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

[tool.setuptools]
include-package-data = true
package-dir = { "" = "src" }

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.package-data]
mvt = ["ios/data/*.json"]

[tool.setuptools.dynamic]
version = { attr = "mvt.common.version.MVT_VERSION" }
