blob: c0e545fbe1b6e83abc3153254357c158a455636a [file]
# 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.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.2,<2.0",
"pyrefly>=1.0.0",
"ruff>=0.1.0,<1.0",
]
# All dependencies for full development setup
all = [
"maturin>=1.2,<2.0",
"pyrefly>=1.0.0",
"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*",
]