# 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.7.0"
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 = "Dario Lencina Talarico", email = "darioalessandrolencina@gmail.com" },
    { name = "Albin Skott", email = "albin@mattsson.io" },
]
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 :: 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"]
include = [
    { path = "LICENSE", format = [
        "sdist",
        "wheel",
    ] },
    { path = "NOTICE", format = [
        "sdist",
        "wheel",
    ] },
    { path = "apache_iggy.pyi", format = [
        "sdist",
    ] },
]

[project.optional-dependencies]
# Core testing dependencies
testing = [
    "pytest>=7.0,<9.0",
    "pytest-asyncio>=0.21.0,<1.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,<25.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>=7.0,<9.0",
    "pytest-asyncio>=0.21.0,<1.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,<25.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",
]
