Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
157 lines (143 loc) · 4.51 KB
/
Copy pathpyproject.toml
File metadata and controls
157 lines (143 loc) · 4.51 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
[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools>=77.0"]
[project]
name = "HAP-python"
license = "Apache-2.0"
description = "HomeKit Accessory Protocol implementation in python"
readme = "README.md"
authors = [{ name = "Ivan Kalchev" }]
requires-python = ">=3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: End Users/Desktop",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Home Automation",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"cryptography",
"chacha20poly1305-reuseable",
"orjson>=3.7.2",
"zeroconf>=0.36.2",
"h11",
]
dynamic = ["version"]
[project.optional-dependencies]
QRCode = [
"base36",
"pyqrcode",
]
Talkback = [
"pylibsrtp",
]
bench = [
"psutil",
"py-spy",
]
[project.urls]
"Source" = "https://github.com/ikalchev/HAP-python"
"Bug Reports" = "https://github.com/ikalchev/HAP-python/issues"
"Documentation" = "http://hap-python.readthedocs.io/en/latest/"
[tool.setuptools.package-data]
pyhap = ["resources/*"]
[tool.setuptools.packages.find]
include = ["pyhap*"]
[tool.setuptools.dynamic]
version = { attr = "pyhap.const.__version__" }
[tool.ruff]
line-length = 88
target-version = "py311"
# Directories previously excluded from black.
exclude = ["generated"]
[tool.ruff.lint]
# Replaces flake8 (E/W/F), flake8-docstrings/pydocstyle (D), isort (I),
# pylint (PL) and bandit (S). B and UP are adopted additions.
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"D", # pydocstyle
"I", # isort
"PL", # pylint
"S", # flake8-bandit
"B", # flake8-bugbear
"BLE", # flake8-blind-except: broad excepts must opt out per use
"UP", # pyupgrade
"ANN", # flake8-annotations
"E721", # type-comparison: use isinstance(x, T) instead of type(x) == T
]
ignore = [
"ANN401", # Any is sometimes the honest type; prefer precise types
# Old flake8 invocation:
# flake8 pyhap tests --ignore=D10,D205,D4,E501,E126,E128,W504,W503,E203
# E501 is now enforced at 88 instead of ignored. E126/E128/W503/W504 are
# not implemented in ruff (the formatter owns those decisions).
"D10", # D100-D107: docstring presence was not enforced
"D203", # conflicts with D211; ruff defaults to no blank line before class
"D205", # 1 blank line required between summary and description
"D213", # conflicts with D212; ruff defaults to summary on the first line
"D4", # D400-D419: docstring punctuation/content rules
"E203", # whitespace before ':' conflicts with the formatter
# Pylint parity: the too-many-* design checks were disabled and
# magic-value-comparison is off by default in pylint.
"PLR2004", # magic-value-comparison
"PLR0904", # too-many-public-methods
"PLR0911", # too-many-return-statements
"PLR0912", # too-many-branches
"PLR0913", # too-many-arguments
"PLR0914", # too-many-locals
"PLR0915", # too-many-statements
"PLR0916", # too-many-boolean-expressions
"PLR0917", # too-many-positional-arguments
]
[tool.ruff.lint.per-file-ignores]
# bandit previously only ever scanned pyhap (`bandit -r pyhap`), never the
# test suite - keep ignoring the whole S family there.
"tests/*" = [
"S", # flake8-bandit
]
# The benchmark orchestrator spawns subprocesses by design (the accessory
# server, git, sysctl, py-spy) with locally-computed arguments.
"benchmarks/*" = [
"S603", # subprocess call - args are not user input
"S607", # partial executable path is resolved via shutil.which
]
[tool.ruff.lint.isort]
# Settings carried over from [tool.isort].
force-sort-within-sections = true
combine-as-imports = true
known-first-party = [
"pyhap",
"benchmarks",
]
[tool.ty.rules]
# Recommended stricter configuration from ty's migration guide:
# https://docs.astral.sh/ty/coming-from-mypy-or-pyright/#recommended-configuration
dynamic-function-decorator-return = "error"
missing-type-argument = "error"
possibly-unresolved-reference = "warn"
unsound-return-statement = "error"
[tool.ty.src]
include = [
"pyhap",
"tests",
"benchmarks",
"scripts",
]
[tool.ty.environment]
python-version = "3.11"
[tool.pytest.ini_options]
testpaths = [
"tests",
]
norecursedirs = [
".git",
"testing_config",
]
asyncio_mode = "auto"