# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[build-system]
requires = ["maturin>=1.2,<2.0"]
build-backend = "maturin"

[project]
name = "apache-iggy"
requires-python = ">=3.10"
version = "0.8.1.dev1"
description = "Apache Iggy is the persistent message streaming platform written in Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing millions of messages per second."
readme = "README.md"
license = { file = "LICENSE" }
authors = [{ name = "Iggy Committers", email = "dev@iggy.apache.org" }]
keywords = ["streaming", "messaging", "pubsub", "iggy", "rust", "performance"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software 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 :: Rust",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: System :: Networking",
    "Topic :: System :: Distributed Computing",
]

[project.urls]
"Homepage" = "https://iggy.apache.org"
"Documentation" = "https://iggy.apache.org/docs/"
"Repository" = "https://github.com/apache/iggy"
"Bug Tracker" = "https://github.com/apache/iggy/issues"
"Discord" = "https://discord.gg/C5Sux5NcRa"

[tool.maturin]
features = ["pyo3/extension-module"]
# LICENSE-binary enumerates the statically-linked Rust crates
# bundled into the wheel by maturin/PyO3. Generated at build time by
# `scripts/ci/third-party-licenses.sh --generate --manifest foreign/python/Cargo.toml --output foreign/python/LICENSE-binary`
# (foreign/python is excluded from the workspace, so cargo-about must be
# pointed at this Cargo.toml explicitly). File is .gitignored; the wheel
# build pipeline must generate it before invoking maturin.
include = [
    { path = "LICENSE", format = [
        "sdist",
        "wheel",
    ] },
    { path = "NOTICE", format = [
        "sdist",
        "wheel",
    ] },
    { path = "LICENSE-binary", format = [
        "wheel",
    ] },
    { path = "apache_iggy.pyi", format = [
        "sdist",
    ] },
]

[project.optional-dependencies]
# Core testing dependencies
testing = [
    "pytest>=9.0.3,<10.0",
    "pytest-asyncio>=0.24.0,<2.0",
    "pytest-cov>=4.0,<7.0",
    "pytest-xdist>=3.0,<4.0",
    "pytest-timeout>=2.0,<3.0",
]

# For containerized testing (CI/CD)
testing-docker = ["testcontainers[docker]>=3.7.0,<5.0"]

# Development tools
dev = [
    "maturin>=1.2,<2.0",
    "black>=23.0,<27.0",
    "isort>=5.12.0,<6.0",
    "mypy>=1.5.0,<2.0",
    "ruff>=0.1.0,<1.0",
]

# All dependencies for full development setup
all = [
    "pytest>=9.0.3,<10.0",
    "pytest-asyncio>=0.24.0,<2.0",
    "pytest-cov>=4.0,<7.0",
    "pytest-xdist>=3.0,<4.0",
    "pytest-timeout>=2.0,<3.0",
    "loguru>=0.7.0,<1.0",
    "testcontainers[docker]>=3.7.0,<5.0",
    "maturin>=1.2,<2.0",
    "black>=23.0,<27.0",
    "isort>=5.12.0,<6.0",
    "mypy>=1.5.0,<2.0",
    "ruff>=0.1.0,<1.0",
]

[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "session"
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = ["-v", "--strict-markers", "--tb=short", "--disable-warnings"]
markers = [
    "integration: Integration tests that require a running server",
    "unit: Fast unit tests",
]
filterwarnings = [
    "ignore::DeprecationWarning",
    "ignore::pytest.PytestUnraisableExceptionWarning",
]
