# 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.14.1,<2.0"]
build-backend = "maturin"

[project]
name = "apache-iggy"
requires-python = ">=3.10"
version = "0.8.1.dev2"
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",
    ] },
]

[tool.ruff.lint]
select = [
    "S", # detects usage of commands like `exec()` and `eval()`. Also usage of `pickle`, `marshal`, etc.
    "B", # flake8-bugbear rule family for likely bugs and unsafe exception patterns
    "E", # pycodestyle errors: basic PEP 8 style violations
    "F", # Pyflakes: undefined names, unused imports, and other logic issues
    "W", # pycodestyle warnings: whitespace and other style warnings
    "I", # isort: import sorting and grouping rules
    "T10", # flake8-debugger: debugger statements like pdb or breakpoint
    "C4", # flake8-comprehensions: unnecessary or suboptimal comprehensions
    "ARG", # flake8-unused-arguments: unused function arguments
    "SIM", # flake8-simplify: simplify redundant logic and expressions
    "UP", # pyupgrade: use newer, simpler Python syntax
]

[tool.ruff.lint.per-file-ignores]
"tests/*.py" = ["S101", "B017"]

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

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

# Development tools
dev = [
    "maturin>=1.14.1,<2.0",
    "pyrefly>=1.1.1",
    "ruff>=0.1.0,<1.0",
]

# All dependencies for full development setup
all = [
    "maturin>=1.14.1,<2.0",
    "pyrefly>=1.1.1",
    "pytest>=9.0.3,<10.0",
    "pytest-asyncio>=0.24.0,<2.0",
    "pytest-cov>=4.0,<8.0",
    "pytest-xdist>=3.0,<4.0",
    "pytest-timeout>=2.0,<3.0",
    "ruff>=0.1.0,<1.0",
    "testcontainers>=3.7.0,<5.0",
]

[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "session"
timeout = 30
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",
]

[tool.uv]
exclude-newer = "7 days"

[tool.pyrefly]
search-path = ["."]
project-includes = [
    "**/*.py*",
]
