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

[project]
name = "venomqa"
version = "0.4.7"
description = "Autonomous API QA agent — define actions and invariants, explore every state path automatically."
readme = "README.md"
license = "MIT"
license-files = ["LICENSE"]
requires-python = ">=3.10"
authors = [
    { name = "Naman Agarwal", email = "naman@venomqa.dev" }
]
maintainers = [
    { name = "Naman Agarwal", email = "naman@venomqa.dev" }
]
keywords = [
    "testing",
    "qa",
    "api-testing",
    "e2e-testing",
    "end-to-end",
    "stateful-testing",
    "journey-testing",
    "integration-testing",
    "state-management",
    "checkpoint",
    "branch-exploration",
    "test-automation",
    "http-testing",
    "rest-api",
    "graphql-testing",
]
classifiers = [
    "Development Status :: 4 - Beta",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Intended Audience :: Information Technology",
    "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",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Framework :: Pytest",
    "Topic :: Software Development :: Testing",
    "Topic :: Software Development :: Testing :: Acceptance",
    "Topic :: Software Development :: Quality Assurance",
    "Topic :: Internet :: WWW/HTTP",
    "Typing :: Typed",
]
dependencies = [
    "httpx>=0.25.0",
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    "click>=8.0.0",
    "rich>=13.0.0",
    "pyyaml>=6.0",
    "psycopg[binary]>=3.1.0",
    "faker>=18.0.0",
    "watchdog>=3.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "pytest-cov>=4.0.0",
    "hypothesis>=6.0.0",
    "mypy>=1.0.0",
    "ruff>=0.1.0",
    "black>=23.0.0",
]
docs = [
    "mkdocs>=1.5.0",
    "mkdocs-material>=9.5.0",
    "mkdocstrings[python]>=0.24.0",
    "mkdocs-autorefs>=0.5.0",
    "mkdocs-gen-files>=0.5.0",
    "mkdocs-literate-nav>=0.6.0",
    "mkdocs-section-index>=0.3.0",
]
postgres = [
    "psycopg[binary]>=3.1.0",
]
redis = [
    "redis>=4.0.0",
]
s3 = [
    "boto3>=1.26.0",
]
docker = [
    "docker>=6.0.0",
]
graphql = [
    "gql>=3.4.0",
    "graphql-core>=3.2.0",
]
all = [
    "venomqa[postgres,redis,s3,docker,graphql]",
]

[project.urls]
Homepage = "https://namanag97.github.io/venomqa"
Documentation = "https://namanag97.github.io/venomqa"
Repository = "https://github.com/namanag97/venomqa"
"Source Code" = "https://github.com/namanag97/venomqa"
"Bug Tracker" = "https://github.com/namanag97/venomqa/issues"
Changelog = "https://github.com/namanag97/venomqa/blob/main/CHANGELOG.md"
"Getting Started" = "https://github.com/namanag97/venomqa/blob/main/SETUP.md"

[project.scripts]
venomqa = "venomqa.cli:main"

[project.entry-points."venomqa.state_backends"]
postgresql = "venomqa.state.postgres:PostgreSQLStateManager"
mysql = "venomqa.state.mysql:MySQLStateManager"
sqlite = "venomqa.state.sqlite:SQLiteStateManager"
memory = "venomqa.state.memory:InMemoryStateManager"

[project.entry-points."venomqa.reporters"]
markdown = "venomqa.reporters.markdown:MarkdownReporter"
json = "venomqa.reporters.json_report:JSONReporter"
junit = "venomqa.reporters.junit:JUnitReporter"
html = "venomqa.reporters.html:HTMLReporter"
sarif = "venomqa.reporters.sarif:SARIFReporter"
slack = "venomqa.reporters.slack:SlackReporter"
discord = "venomqa.reporters.discord:DiscordReporter"

[project.entry-points."venomqa.plugins"]
# Built-in example plugins
console-logger = "venomqa.plugins.examples.console_logger:ConsoleLoggerPlugin"
timing-analyzer = "venomqa.plugins.examples.timing_analyzer:TimingAnalyzerPlugin"
custom-assertions = "venomqa.plugins.examples.custom_assertions:CustomAssertionsPlugin"
slack-notifier = "venomqa.plugins.examples.slack_notifier:SlackNotifierPlugin"
datadog-metrics = "venomqa.plugins.examples.datadog_metrics:DataDogMetricsPlugin"

[project.entry-points."venomqa.adapters"]
# Adapters for dependency injection
redis = "venomqa.adapters.redis_cache:RedisCacheAdapter"
time = "venomqa.adapters.controllable_time:ControllableTimeAdapter"
mail = "venomqa.adapters.mail:MockMailAdapter"
queue = "venomqa.adapters.queue:MockQueueAdapter"
cache = "venomqa.adapters.cache:MockCacheAdapter"

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

[tool.ruff]
line-length = 100
target-version = "py310"

[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP", "B", "C4"]

[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
    "timeout: marks test with timeout",
    "network: marks tests that require network",
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "integration: marks tests that require live services (postgres, redis, etc.)",
    "stress: marks stress/load tests",
    "branching: marks tests that exercise state branching",
    "concurrency: marks concurrency tests",
    "performance: marks performance benchmark tests",
]
