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
|
[build-system]
requires = ["setuptools>=62.3"]
build-backend = "setuptools.build_meta"
[project]
name = "xknx"
authors = [
{ name = "Julius Mittenzwei", email = "julius@mittenzwei.com" },
{ name = "Matthias Alphart", email = "farmio@alphart.net" },
{ name = "Marvin Wichmann", email = "me@marvin-wichmann.de" },
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"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",
"Topic :: System :: Hardware :: Hardware Drivers",
]
dependencies = [
"async_timeout>=4.0.0; python_version<'3.11'",
"typing_extensions; python_version<'3.11'",
"cryptography>=35.0.0",
"ifaddr>=0.1.7",
]
description = "An Asynchronous Library for the KNX protocol. Documentation: https://xknx.io/"
dynamic = ["version"]
keywords = ["KNX", "EIB", "Home Assistant", "home automation"]
license = { text = "MIT" }
readme = "README.md"
requires-python = ">=3.10.0"
[project.urls]
homepage = "https://xknx.io/"
repository = "https://github.com/XKNX/xknx.git"
[tool.setuptools.dynamic]
version = { attr = "xknx.__version__.__version__" }
[tool.setuptools.packages.find]
include = ["xknx*"]
[tool.codespell]
skip = '*.min.js,docs/config-converter/lib/*,*.lock'
ignore-words-list = 'hass'
quiet-level = 2
[tool.mypy]
pretty = true
python_version = "3.10"
show_error_codes = true
strict = true
# additional flags to strict mode
ignore_missing_imports = true
implicit_reexport = true
warn_unreachable = true
[tool.pylint.master]
init-hook = 'import sys; sys.path.append(".")'
persistent = "no"
reports = "no"
allow-reexport-from-package = true
jobs = 0
[tool.pylint.message_control]
# Reasons disabled:
# too-many-* - are not enforced for the sake of readability
# too-few-* - same as too-many-*
disable = [
"cyclic-import", # doesn't test if both import on load
"duplicate-code", # unavoidable
"fixme", # TODO
"format", # handled by ruff
"inconsistent-return-statements", # doesn't handle raise
"locally-disabled", # it spams too much
"no-member", # handled by mypy - pylint has false positives sometimes
"too-few-public-methods",
"too-many-ancestors", # it's too strict.
"too-many-arguments",
"too-many-boolean-expressions",
"too-many-branches",
"too-many-instance-attributes",
"too-many-lines",
"too-many-locals",
"too-many-positional-arguments",
"too-many-public-methods",
"too-many-return-statements",
"too-many-statements",
"ungrouped-imports", # handled by ruff
"unused-argument", # generic callbacks and setup methods create a lot of warnings
"wrong-import-order", # handled by ruff
]
# disabled for tests via command line options in tox.ini:
# - protected-access
# - abstract-class-instantiated
enable = ["use-symbolic-message-instead"]
[tool.pylint.format]
expected-line-ending-format = "LF"
[tool.pylint.reports]
score = "no"
output-format = "colorized"
[tool.pytest.ini_options]
testpaths = "test"
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = "--durations=10"
[tool.ruff]
lint.select = [
"A", # builtins shadowing
"ANN", # annotations
"ASYNC", # async
"B", # bugbear
"C4", # comprehensions
"D", # pydocstyle
"E", # pycodestyle
"F", # pyflakes
"FLY", # flynt
"FURB", # refurb
"G", # logging
"I", # isort
"LOG", # logging
"PTH", # pathlib
"RUF", # ruff specific
"SLF", # private member access
"SIM", # simplify
"T20", # print
"UP", # pyupgrade
"W", # pydocstyle warning
]
lint.ignore = [
"ANN401", # any-type - mypy should handle this where necessary
"D202",
"D203",
"D212",
"E501", # line too long
"SIM102", # collapsible-if
"SIM105", #suppressible-exception
]
extend-exclude = ["script"]
[tool.ruff.lint.isort]
force-sort-within-sections = true
combine-as-imports = true
[tool.ruff.lint.per-file-ignores]
"examples/*" = ["T20"] # print-used
"test/*" = [
"RUF012",
"SLF", # private member access
] # Mutable class attributes should be annotated with `typing.ClassVar`
[tool.ruff.lint.flake8-builtins]
builtins-allowed-modules = [
# been there before ruff check A005 was added - backwards compatibility
"datetime",
"io",
"profile",
"typing",
]
|