Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
190 lines (171 loc) · 6.9 KB
/
Copy pathpyproject.toml
File metadata and controls
190 lines (171 loc) · 6.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
[project]
name = "faust-streaming"
description = "Python Stream Processing. A Faust fork"
requires-python = ">=3.10"
dynamic = [
"version",
"optional-dependencies",
"dependencies",
]
readme = "README.md"
license = { file = "LICENSE" }
keywords = [
"stream",
"processing",
"asyncio",
"distributed",
"queue",
"kafka",
]
classifiers = [
"Framework :: AsyncIO",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Natural Language :: English",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"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",
"Programming Language :: Python :: 3.15",
"Programming Language :: Python :: Implementation :: CPython",
"Operating System :: POSIX",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS :: MacOS X",
"Operating System :: POSIX :: BSD",
"Operating System :: Microsoft :: Windows",
"Topic :: System :: Networking",
"Topic :: System :: Distributed Computing",
]
authors = [
{ name = "Ask Solem Hoel", email= "ask@robinhood.com" },
{ name = "Vineet Goel", email= "vineet@robinhood.com" },
]
maintainers = [
{ name = "Vikram Patki", email = "vpatki@wayfair.com" },
{ name = "William Barnhart", email = "williambbarnhart@gmail.com" },
]
[project.scripts]
faust = "faust.cli.faust:cli"
[project.urls]
Documentation = "https://faust-streaming.github.io/faust/"
Source = "https://github.com/faust-streaming/faust"
Changes = "https://github.com/faust-streaming/faust/releases"
[build-system]
requires = [
# setuptools >= 69 normalizes the sdist filename per PEP 625
# (faust_streaming-*.tar.gz), which PyPI now requires.
"setuptools>=69",
"setuptools_scm[toml]",
"wheel",
"cython>=0.29; implementation_name == 'cpython'",
"cython>=3.0.0; implementation_name == 'cpython' and python_version >= '3.12'",
# 3.1 is the first Cython that understands `freethreading_compatible`, the
# directive the three .pyx files set. It is what makes the generated
# modules emit `Py_mod_gil = Py_MOD_GIL_NOT_USED`; without it a
# free-threaded interpreter re-enables the GIL when it imports them (with
# only a RuntimeWarning to say so), silently undoing free-threading for the
# whole process. Older Cython ignores the directive rather than failing,
# so the floor has to be enforced here or the loss is invisible at build
# time. There is no PEP 508 marker for a free-threaded interpreter, so
# this gates on 3.13 -- the first version with a `t` ABI -- which covers
# every build that could be free-threaded.
"cython>=3.1; implementation_name == 'cpython' and python_version >= '3.13'",
]
build-backend = "setuptools.build_meta"
[tool.setuptools_scm]
# enables setuptools_scm to provide the dynamic version
[tool.flake8]
ignore = [
"W503",
"E203",
"E231",
"E225",
"B305",
]
max-line-length = 88
[tool.isort]
profile = "black"
combine_as_imports = true
[tool.mypy]
ignore_missing_imports = true
disallow_untyped_defs = true
# Pinned so the result does not depend on which interpreter runs mypy. Without
# it mypy targets the running version, and typeshed differs enough between them
# that a contributor on 3.10 and the lint job on PYTHON_LATEST would disagree
# about whether the tree is clean. Tracks the lint job's interpreter; raising
# it can surface new errors, so bump it deliberately.
python_version = "3.12"
# The type-checking ratchet is gone: `mypy -p faust` (run by `scripts/check`)
# now checks all 164 modules in the package with nothing silenced wholesale.
#
# Keep it that way. If a change makes mypy fail, fix the annotations rather
# than re-introducing an `ignore_errors` list -- that list was only ever a
# migration aid, and re-adding one would hide every other error in the module
# too. For a single line the checker genuinely gets wrong, use a specific
# `# type: ignore[code]` with a comment saying why.
#
# mypy is pinned in requirements/typecheck.txt because a different version
# reports a different set of errors; bump it deliberately.
# Every setting in `faust.types.settings.settings` is a method with a docstring and
# no body, decorated with `@sections.<Section>.setting(...)`. The decorator throws
# the function away and returns a `params.Param` descriptor built from its name,
# docstring and return annotation, so the body is never executed -- but mypy sees a
# function declaring a non-None return type and never returning, and reports
# `empty-body` for all ~100 of them. The check does not apply to this pattern.
#
# Note this disables one error code, not the module: every OTHER error code is
# still reported here, so new mistakes in it are caught.
[[tool.mypy.overrides]]
module = ["faust.types.settings.settings"]
disable_error_code = ["empty-body"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
minversion = "6.0"
addopts = [
"--cov-report=term-missing:skip-covered",
"--cov=faust",
"-rxXs",
"--strict-config",
"--strict-markers",
]
filterwarnings = [
"error::ResourceWarning",
]
xfail_strict = true
testpaths = [
"tests",
"integration",
]
[tool.cibuildwheel]
build = "cp3*"
archs = ["auto64"]
# The free-threaded builds (cp313t/cp314t) used to be skipped here because the
# Cython extension had not been validated under a no-GIL interpreter. It has
# been now: the three .pyx files declare `freethreading_compatible=True`, and
# the full unit + functional suite passes against the compiled extensions on
# both 3.13t and 3.14t with the GIL actually disabled. The `free-threaded`
# CI job keeps that true, and tests/unit/test_free_threading.py fails if an
# extension ever starts re-enabling the GIL again.
#
# Only musllinux stays skipped (unrelated to free-threading).
skip = ["*musllinux*"]
# >=3.1 for the `freethreading_compatible` directive. Older Cython ignores
# unknown directives instead of failing, so a lower version here would quietly
# produce extensions that re-enable the GIL -- see the note in
# `[build-system].requires`.
#
# Double-quoted, not single-quoted: cibuildwheel runs `before-build` through
# the native shell, which on windows-2022 is cmd.exe. cmd.exe does not treat
# single quotes as a quoting character, so `'Cython>=3.1'` left the `>`
# exposed as its output-redirection operator -- the command ran as `pip
# install 'Cython` with stdout redirected to a file literally named `3.1'`,
# which fails with no Cython installed. cmd.exe does honor double quotes, and
# bash/zsh treat `"..."` as a quoted string too, so this is quoted correctly
# on every platform cibuildwheel builds on here.
before-build = 'pip install "Cython>=3.1"'
manylinux-x86_64-image = "manylinux2014"
manylinux-pypy_x86_64-image = "manylinux2014"