2022-01-28 22:09:05 +00:00
|
|
|
[build-system]
|
2023-08-17 15:36:22 +00:00
|
|
|
requires = ["setuptools==68.0.0", "wheel~=0.40.0"]
|
2022-01-28 22:09:05 +00:00
|
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
|
2022-05-25 02:01:27 +00:00
|
|
|
[project]
|
|
|
|
name = "homeassistant"
|
2023-09-27 17:03:06 +00:00
|
|
|
version = "2023.11.0.dev0"
|
2022-05-25 02:01:27 +00:00
|
|
|
license = {text = "Apache-2.0"}
|
|
|
|
description = "Open-source home automation platform running on Python 3."
|
|
|
|
readme = "README.rst"
|
|
|
|
authors = [
|
2022-05-26 00:54:49 +00:00
|
|
|
{name = "The Home Assistant Authors", email = "hello@home-assistant.io"}
|
2022-05-25 02:01:27 +00:00
|
|
|
]
|
|
|
|
keywords = ["home", "automation"]
|
|
|
|
classifiers = [
|
|
|
|
"Development Status :: 5 - Production/Stable",
|
|
|
|
"Intended Audience :: End Users/Desktop",
|
|
|
|
"Intended Audience :: Developers",
|
|
|
|
"License :: OSI Approved :: Apache Software License",
|
|
|
|
"Operating System :: OS Independent",
|
2023-06-26 17:03:56 +00:00
|
|
|
"Programming Language :: Python :: 3.11",
|
2022-05-25 02:01:27 +00:00
|
|
|
"Topic :: Home Automation",
|
|
|
|
]
|
2023-07-22 21:03:45 +00:00
|
|
|
requires-python = ">=3.11.0"
|
2022-05-26 00:54:49 +00:00
|
|
|
dependencies = [
|
2023-10-08 11:21:46 +00:00
|
|
|
"aiohttp==3.9.0b0",
|
2022-05-26 00:54:49 +00:00
|
|
|
"astral==2.2",
|
2023-08-14 13:50:43 +00:00
|
|
|
"attrs==23.1.0",
|
2022-07-08 21:17:56 +00:00
|
|
|
"atomicwrites-homeassistant==1.4.1",
|
2023-09-14 08:07:09 +00:00
|
|
|
"awesomeversion==23.8.0",
|
2023-01-21 16:16:28 +00:00
|
|
|
"bcrypt==4.0.1",
|
2022-05-26 00:54:49 +00:00
|
|
|
"certifi>=2021.5.30",
|
2022-12-22 20:01:59 +00:00
|
|
|
"ciso8601==2.3.0",
|
2022-05-26 00:54:49 +00:00
|
|
|
# When bumping httpx, please check the version pins of
|
|
|
|
# httpcore, anyio, and h11 in gen_requirements_all
|
2023-05-23 17:31:03 +00:00
|
|
|
"httpx==0.24.1",
|
2023-08-27 14:29:17 +00:00
|
|
|
"home-assistant-bluetooth==1.10.3",
|
2023-05-23 12:18:26 +00:00
|
|
|
"ifaddr==0.2.0",
|
2023-06-01 01:12:53 +00:00
|
|
|
"Jinja2==3.1.2",
|
2023-06-13 08:37:59 +00:00
|
|
|
"lru-dict==1.2.0",
|
2023-07-19 12:35:54 +00:00
|
|
|
"PyJWT==2.8.0",
|
2022-05-26 00:54:49 +00:00
|
|
|
# PyJWT has loose dependency. We want the latest one.
|
2023-09-26 10:27:56 +00:00
|
|
|
"cryptography==41.0.4",
|
2023-06-17 20:23:06 +00:00
|
|
|
# pyOpenSSL 23.2.0 is required to work with cryptography 41+
|
|
|
|
"pyOpenSSL==23.2.0",
|
2023-09-08 18:59:35 +00:00
|
|
|
"orjson==3.9.7",
|
2023-08-04 10:29:18 +00:00
|
|
|
"packaging>=23.1",
|
2023-07-17 22:37:02 +00:00
|
|
|
"pip>=21.3.1",
|
2022-05-26 00:54:49 +00:00
|
|
|
"python-slugify==4.0.1",
|
2023-07-18 06:50:15 +00:00
|
|
|
"PyYAML==6.0.1",
|
2023-05-22 18:48:56 +00:00
|
|
|
"requests==2.31.0",
|
2023-09-18 09:58:47 +00:00
|
|
|
"typing-extensions>=4.8.0,<5.0",
|
2023-08-27 16:32:41 +00:00
|
|
|
"ulid-transform==0.8.1",
|
2022-05-26 00:54:49 +00:00
|
|
|
"voluptuous==0.13.1",
|
2023-02-15 22:14:45 +00:00
|
|
|
"voluptuous-serialize==2.6.0",
|
2023-04-26 23:39:32 +00:00
|
|
|
"yarl==1.9.2",
|
2022-05-26 00:54:49 +00:00
|
|
|
]
|
2022-05-25 02:01:27 +00:00
|
|
|
|
|
|
|
[project.urls]
|
2023-06-26 17:03:56 +00:00
|
|
|
"Homepage" = "https://www.home-assistant.io/"
|
2022-05-25 02:01:27 +00:00
|
|
|
"Source Code" = "https://github.com/home-assistant/core"
|
|
|
|
"Bug Reports" = "https://github.com/home-assistant/core/issues"
|
|
|
|
"Docs: Dev" = "https://developers.home-assistant.io/"
|
|
|
|
"Discord" = "https://www.home-assistant.io/join-chat/"
|
|
|
|
"Forum" = "https://community.home-assistant.io/"
|
|
|
|
|
|
|
|
[project.scripts]
|
|
|
|
hass = "homeassistant.__main__:main"
|
|
|
|
|
|
|
|
[tool.setuptools]
|
|
|
|
platforms = ["any"]
|
|
|
|
zip-safe = false
|
|
|
|
include-package-data = true
|
|
|
|
|
|
|
|
[tool.setuptools.packages.find]
|
|
|
|
include = ["homeassistant*"]
|
|
|
|
|
2019-07-30 23:59:12 +00:00
|
|
|
[tool.black]
|
2022-12-04 22:12:37 +00:00
|
|
|
extend-exclude = "/generated/"
|
2020-10-06 09:26:48 +00:00
|
|
|
|
2022-06-06 19:43:47 +00:00
|
|
|
[tool.pylint.MAIN]
|
2023-07-22 21:03:45 +00:00
|
|
|
py-version = "3.11"
|
2020-10-06 09:26:48 +00:00
|
|
|
ignore = [
|
|
|
|
"tests",
|
|
|
|
]
|
|
|
|
# Use a conservative default here; 2 should speed up most setups and not hurt
|
|
|
|
# any too bad. Override on command line as appropriate.
|
2021-03-01 12:40:46 +00:00
|
|
|
jobs = 2
|
2022-01-29 22:47:40 +00:00
|
|
|
init-hook = """\
|
|
|
|
from pathlib import Path; \
|
|
|
|
import sys; \
|
|
|
|
|
|
|
|
from pylint.config import find_default_config_files; \
|
|
|
|
|
|
|
|
sys.path.append( \
|
|
|
|
str(Path(next(find_default_config_files())).parent.joinpath('pylint/plugins'))
|
|
|
|
) \
|
|
|
|
"""
|
2020-10-06 09:26:48 +00:00
|
|
|
load-plugins = [
|
2021-07-19 13:57:06 +00:00
|
|
|
"pylint.extensions.code_style",
|
2021-04-25 00:39:24 +00:00
|
|
|
"pylint.extensions.typing",
|
2023-09-18 18:39:36 +00:00
|
|
|
"hass_enforce_super_call",
|
2022-01-24 12:38:56 +00:00
|
|
|
"hass_enforce_type_hints",
|
2023-05-24 10:49:35 +00:00
|
|
|
"hass_inheritance",
|
2021-05-22 08:15:30 +00:00
|
|
|
"hass_imports",
|
2021-05-20 17:00:10 +00:00
|
|
|
"hass_logger",
|
2023-01-22 16:26:24 +00:00
|
|
|
"pylint_per_file_ignores",
|
2020-10-06 09:26:48 +00:00
|
|
|
]
|
|
|
|
persistent = false
|
2021-07-10 20:58:37 +00:00
|
|
|
extension-pkg-allow-list = [
|
|
|
|
"av.audio.stream",
|
2023-09-12 17:38:11 +00:00
|
|
|
"av.logging",
|
2021-07-10 20:58:37 +00:00
|
|
|
"av.stream",
|
2020-10-06 09:26:48 +00:00
|
|
|
"ciso8601",
|
2022-06-22 19:59:51 +00:00
|
|
|
"orjson",
|
2020-10-06 09:26:48 +00:00
|
|
|
"cv2",
|
|
|
|
]
|
2022-07-04 21:04:56 +00:00
|
|
|
fail-on = [
|
|
|
|
"I",
|
|
|
|
]
|
2020-10-06 09:26:48 +00:00
|
|
|
|
|
|
|
[tool.pylint.BASIC]
|
2021-03-30 04:02:56 +00:00
|
|
|
class-const-naming-style = "any"
|
2020-10-06 09:26:48 +00:00
|
|
|
|
|
|
|
[tool.pylint."MESSAGES CONTROL"]
|
|
|
|
# Reasons disabled:
|
|
|
|
# format - handled by black
|
|
|
|
# locally-disabled - it spams too much
|
|
|
|
# duplicate-code - unavoidable
|
|
|
|
# cyclic-import - doesn't test if both import on load
|
|
|
|
# abstract-class-little-used - prevents from setting right foundation
|
|
|
|
# unused-argument - generic callbacks and setup methods create a lot of warnings
|
|
|
|
# too-many-* - are not enforced for the sake of readability
|
|
|
|
# too-few-* - same as too-many-*
|
|
|
|
# abstract-method - with intro of async there are always methods missing
|
|
|
|
# inconsistent-return-statements - doesn't handle raise
|
|
|
|
# too-many-ancestors - it's too strict.
|
|
|
|
# wrong-import-order - isort guards this
|
2021-09-18 11:52:59 +00:00
|
|
|
# consider-using-f-string - str.format sometimes more readable
|
2021-07-19 13:57:06 +00:00
|
|
|
# ---
|
2023-02-02 11:49:01 +00:00
|
|
|
# Pylint CodeStyle plugin
|
|
|
|
# consider-using-namedtuple-or-dataclass - too opinionated
|
|
|
|
# consider-using-assignment-expr - decision to use := better left to devs
|
2020-10-06 09:26:48 +00:00
|
|
|
disable = [
|
|
|
|
"format",
|
|
|
|
"abstract-method",
|
|
|
|
"cyclic-import",
|
|
|
|
"duplicate-code",
|
|
|
|
"inconsistent-return-statements",
|
|
|
|
"locally-disabled",
|
|
|
|
"not-context-manager",
|
|
|
|
"too-few-public-methods",
|
|
|
|
"too-many-ancestors",
|
|
|
|
"too-many-arguments",
|
|
|
|
"too-many-instance-attributes",
|
|
|
|
"too-many-lines",
|
|
|
|
"too-many-locals",
|
|
|
|
"too-many-public-methods",
|
|
|
|
"too-many-boolean-expressions",
|
|
|
|
"wrong-import-order",
|
2021-09-18 11:52:59 +00:00
|
|
|
"consider-using-f-string",
|
2021-07-19 13:57:06 +00:00
|
|
|
"consider-using-namedtuple-or-dataclass",
|
2021-09-18 11:52:59 +00:00
|
|
|
"consider-using-assignment-expr",
|
2023-06-27 15:42:46 +00:00
|
|
|
|
|
|
|
# Handled by ruff
|
|
|
|
# Ref: <https://github.com/astral-sh/ruff/issues/970>
|
|
|
|
"await-outside-async", # PLE1142
|
|
|
|
"bad-str-strip-call", # PLE1310
|
|
|
|
"bad-string-format-type", # PLE1307
|
|
|
|
"bidirectional-unicode", # PLE2502
|
|
|
|
"continue-in-finally", # PLE0116
|
|
|
|
"duplicate-bases", # PLE0241
|
|
|
|
"format-needs-mapping", # F502
|
|
|
|
"function-redefined", # F811
|
|
|
|
"invalid-all-format", # PLE0605
|
|
|
|
"invalid-all-object", # PLE0604
|
|
|
|
"invalid-character-backspace", # PLE2510
|
|
|
|
"invalid-character-esc", # PLE2513
|
|
|
|
"invalid-character-nul", # PLE2514
|
|
|
|
"invalid-character-sub", # PLE2512
|
|
|
|
"invalid-character-zero-width-space", # PLE2515
|
2023-06-30 13:00:15 +00:00
|
|
|
"logging-too-few-args", # PLE1206
|
2023-06-27 15:42:46 +00:00
|
|
|
"logging-too-many-args", # PLE1205
|
|
|
|
"missing-format-string-key", # F524
|
|
|
|
"mixed-format-string", # F506
|
|
|
|
"no-method-argument", # N805
|
|
|
|
"no-self-argument", # N805
|
|
|
|
"nonexistent-operator", # B002
|
|
|
|
"nonlocal-without-binding", # PLE0117
|
|
|
|
"not-in-loop", # F701, F702
|
|
|
|
"notimplemented-raised", # F901
|
|
|
|
"return-in-init", # PLE0101
|
|
|
|
"return-outside-function", # F706
|
|
|
|
"syntax-error", # E999
|
|
|
|
"too-few-format-args", # F524
|
|
|
|
"too-many-format-args", # F522
|
|
|
|
"too-many-star-expressions", # F622
|
|
|
|
"truncated-format-string", # F501
|
|
|
|
"undefined-all-variable", # F822
|
|
|
|
"undefined-variable", # F821
|
|
|
|
"used-prior-global-declaration", # PLE0118
|
|
|
|
"yield-inside-async-function", # PLE1700
|
|
|
|
"yield-outside-function", # F704
|
|
|
|
"anomalous-backslash-in-string", # W605
|
|
|
|
"assert-on-string-literal", # PLW0129
|
|
|
|
"assert-on-tuple", # F631
|
|
|
|
"bad-format-string", # W1302, F
|
|
|
|
"bad-format-string-key", # W1300, F
|
|
|
|
"bare-except", # E722
|
|
|
|
"binary-op-exception", # PLW0711
|
|
|
|
"cell-var-from-loop", # B023
|
|
|
|
# "dangerous-default-value", # B006, ruff catches new occurrences, needs more work
|
|
|
|
"duplicate-except", # B014
|
|
|
|
"duplicate-key", # F601
|
|
|
|
"duplicate-string-formatting-argument", # F
|
|
|
|
"duplicate-value", # F
|
|
|
|
"eval-used", # PGH001
|
|
|
|
"exec-used", # S102
|
|
|
|
# "expression-not-assigned", # B018, ruff catches new occurrences, needs more work
|
|
|
|
"f-string-without-interpolation", # F541
|
|
|
|
"forgotten-debug-statement", # T100
|
|
|
|
"format-string-without-interpolation", # F
|
|
|
|
# "global-statement", # PLW0603, ruff catches new occurrences, needs more work
|
|
|
|
"global-variable-not-assigned", # PLW0602
|
|
|
|
"implicit-str-concat", # ISC001
|
|
|
|
"import-self", # PLW0406
|
|
|
|
"inconsistent-quotes", # Q000
|
|
|
|
"invalid-envvar-default", # PLW1508
|
|
|
|
"keyword-arg-before-vararg", # B026
|
|
|
|
"logging-format-interpolation", # G
|
|
|
|
"logging-fstring-interpolation", # G
|
|
|
|
"logging-not-lazy", # G
|
|
|
|
"misplaced-future", # F404
|
|
|
|
"named-expr-without-context", # PLW0131
|
|
|
|
"nested-min-max", # PLW3301
|
|
|
|
# "pointless-statement", # B018, ruff catches new occurrences, needs more work
|
|
|
|
"raise-missing-from", # TRY200
|
|
|
|
# "redefined-builtin", # A001, ruff is way more stricter, needs work
|
|
|
|
"try-except-raise", # TRY302
|
|
|
|
"unused-argument", # ARG001, we don't use it
|
|
|
|
"unused-format-string-argument", #F507
|
|
|
|
"unused-format-string-key", # F504
|
|
|
|
"unused-import", # F401
|
|
|
|
"unused-variable", # F841
|
|
|
|
"useless-else-on-loop", # PLW0120
|
|
|
|
"wildcard-import", # F403
|
|
|
|
"bad-classmethod-argument", # N804
|
|
|
|
"consider-iterating-dictionary", # SIM118
|
|
|
|
"empty-docstring", # D419
|
|
|
|
"invalid-name", # N815
|
|
|
|
"line-too-long", # E501, disabled globally
|
|
|
|
"missing-class-docstring", # D101
|
|
|
|
"missing-final-newline", # W292
|
|
|
|
"missing-function-docstring", # D103
|
|
|
|
"missing-module-docstring", # D100
|
|
|
|
"multiple-imports", #E401
|
|
|
|
"singleton-comparison", # E711, E712
|
2023-08-19 12:17:17 +00:00
|
|
|
"subprocess-run-check", # PLW1510
|
2023-06-27 15:42:46 +00:00
|
|
|
"superfluous-parens", # UP034
|
|
|
|
"ungrouped-imports", # I001
|
|
|
|
"unidiomatic-typecheck", # E721
|
|
|
|
"unnecessary-direct-lambda-call", # PLC3002
|
|
|
|
"unnecessary-lambda-assignment", # PLC3001
|
|
|
|
"unneeded-not", # SIM208
|
|
|
|
"useless-import-alias", # PLC0414
|
|
|
|
"wrong-import-order", # I001
|
|
|
|
"wrong-import-position", # E402
|
|
|
|
"comparison-of-constants", # PLR0133
|
|
|
|
"comparison-with-itself", # PLR0124
|
|
|
|
"consider-alternative-union-syntax", # UP007
|
|
|
|
"consider-merging-isinstance", # PLR1701
|
|
|
|
"consider-using-alias", # UP006
|
|
|
|
"consider-using-dict-comprehension", # C402
|
|
|
|
"consider-using-generator", # C417
|
|
|
|
"consider-using-get", # SIM401
|
|
|
|
"consider-using-set-comprehension", # C401
|
|
|
|
"consider-using-sys-exit", # PLR1722
|
|
|
|
"consider-using-ternary", # SIM108
|
|
|
|
"literal-comparison", # F632
|
|
|
|
"property-with-parameters", # PLR0206
|
|
|
|
"super-with-arguments", # UP008
|
|
|
|
"too-many-branches", # PLR0912
|
|
|
|
"too-many-return-statements", # PLR0911
|
|
|
|
"too-many-statements", # PLR0915
|
|
|
|
"trailing-comma-tuple", # COM818
|
|
|
|
"unnecessary-comprehension", # C416
|
|
|
|
"use-a-generator", # C417
|
|
|
|
"use-dict-literal", # C406
|
|
|
|
"use-list-literal", # C405
|
|
|
|
"useless-object-inheritance", # UP004
|
|
|
|
"useless-return", # PLR1711
|
2023-09-13 06:14:01 +00:00
|
|
|
# "no-self-use", # PLR6301 # Optional plugin, not enabled
|
2023-06-27 15:42:46 +00:00
|
|
|
|
|
|
|
# Handled by mypy
|
|
|
|
# Ref: <https://github.com/antonagestam/pylint-mypy-overlap>
|
|
|
|
"abstract-class-instantiated",
|
|
|
|
"arguments-differ",
|
|
|
|
"assigning-non-slot",
|
|
|
|
"assignment-from-no-return",
|
|
|
|
"assignment-from-none",
|
|
|
|
"bad-exception-cause",
|
|
|
|
"bad-format-character",
|
|
|
|
"bad-reversed-sequence",
|
|
|
|
"bad-super-call",
|
|
|
|
"bad-thread-instantiation",
|
|
|
|
"catching-non-exception",
|
|
|
|
"comparison-with-callable",
|
|
|
|
"deprecated-class",
|
|
|
|
"dict-iter-missing-items",
|
|
|
|
"format-combined-specification",
|
|
|
|
"global-variable-undefined",
|
|
|
|
"import-error",
|
|
|
|
"inconsistent-mro",
|
|
|
|
"inherit-non-class",
|
|
|
|
"init-is-generator",
|
|
|
|
"invalid-class-object",
|
|
|
|
"invalid-enum-extension",
|
|
|
|
"invalid-envvar-value",
|
|
|
|
"invalid-format-returned",
|
|
|
|
"invalid-hash-returned",
|
|
|
|
"invalid-metaclass",
|
|
|
|
"invalid-overridden-method",
|
|
|
|
"invalid-repr-returned",
|
|
|
|
"invalid-sequence-index",
|
|
|
|
"invalid-slice-index",
|
|
|
|
"invalid-slots-object",
|
|
|
|
"invalid-slots",
|
|
|
|
"invalid-star-assignment-target",
|
|
|
|
"invalid-str-returned",
|
|
|
|
"invalid-unary-operand-type",
|
|
|
|
"invalid-unicode-codec",
|
|
|
|
"isinstance-second-argument-not-valid-type",
|
|
|
|
"method-hidden",
|
|
|
|
"misplaced-format-function",
|
|
|
|
"missing-format-argument-key",
|
|
|
|
"missing-format-attribute",
|
|
|
|
"missing-kwoa",
|
|
|
|
"no-member",
|
|
|
|
"no-value-for-parameter",
|
|
|
|
"non-iterator-returned",
|
|
|
|
"non-str-assignment-to-dunder-name",
|
|
|
|
"nonlocal-and-global",
|
|
|
|
"not-a-mapping",
|
|
|
|
"not-an-iterable",
|
|
|
|
"not-async-context-manager",
|
|
|
|
"not-callable",
|
|
|
|
"not-context-manager",
|
|
|
|
"overridden-final-method",
|
|
|
|
"raising-bad-type",
|
|
|
|
"raising-non-exception",
|
|
|
|
"redundant-keyword-arg",
|
|
|
|
"relative-beyond-top-level",
|
|
|
|
"self-cls-assignment",
|
|
|
|
"signature-differs",
|
|
|
|
"star-needs-assignment-target",
|
|
|
|
"subclassed-final-class",
|
|
|
|
"super-without-brackets",
|
|
|
|
"too-many-function-args",
|
|
|
|
"typevar-double-variance",
|
|
|
|
"typevar-name-mismatch",
|
|
|
|
"unbalanced-dict-unpacking",
|
|
|
|
"unbalanced-tuple-unpacking",
|
|
|
|
"unexpected-keyword-arg",
|
|
|
|
"unhashable-member",
|
|
|
|
"unpacking-non-sequence",
|
|
|
|
"unsubscriptable-object",
|
|
|
|
"unsupported-assignment-operation",
|
|
|
|
"unsupported-binary-operation",
|
|
|
|
"unsupported-delete-operation",
|
|
|
|
"unsupported-membership-test",
|
|
|
|
"used-before-assignment",
|
|
|
|
"using-final-decorator-in-unsupported-version",
|
|
|
|
"wrong-exception-operation",
|
2020-10-06 09:26:48 +00:00
|
|
|
]
|
|
|
|
enable = [
|
|
|
|
#"useless-suppression", # temporarily every now and then to clean them up
|
|
|
|
"use-symbolic-message-instead",
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.pylint.REPORTS]
|
|
|
|
score = false
|
|
|
|
|
|
|
|
[tool.pylint.TYPECHECK]
|
|
|
|
ignored-classes = [
|
|
|
|
"_CountingAttr", # for attrs
|
|
|
|
]
|
2021-11-25 23:13:27 +00:00
|
|
|
mixin-class-rgx = ".*[Mm]ix[Ii]n"
|
2020-10-06 09:26:48 +00:00
|
|
|
|
|
|
|
[tool.pylint.FORMAT]
|
|
|
|
expected-line-ending-format = "LF"
|
|
|
|
|
|
|
|
[tool.pylint.EXCEPTIONS]
|
|
|
|
overgeneral-exceptions = [
|
2023-02-02 11:49:01 +00:00
|
|
|
"builtins.BaseException",
|
|
|
|
"builtins.Exception",
|
|
|
|
# "homeassistant.exceptions.HomeAssistantError", # too many issues
|
2020-10-06 09:26:48 +00:00
|
|
|
]
|
|
|
|
|
2021-04-25 00:39:24 +00:00
|
|
|
[tool.pylint.TYPING]
|
|
|
|
runtime-typing = false
|
|
|
|
|
2021-09-18 11:52:59 +00:00
|
|
|
[tool.pylint.CODE_STYLE]
|
|
|
|
max-line-length-suggestions = 72
|
|
|
|
|
2023-01-22 16:26:24 +00:00
|
|
|
[tool.pylint-per-file-ignores]
|
2023-01-27 11:51:58 +00:00
|
|
|
# hass-component-root-import: Tests test non-public APIs
|
|
|
|
# protected-access: Tests do often test internals a lot
|
|
|
|
# redefined-outer-name: Tests reference fixtures in the test function
|
|
|
|
"/tests/"="hass-component-root-import,protected-access,redefined-outer-name"
|
2023-01-22 16:26:24 +00:00
|
|
|
|
2020-10-06 09:26:48 +00:00
|
|
|
[tool.pytest.ini_options]
|
|
|
|
testpaths = [
|
|
|
|
"tests",
|
|
|
|
]
|
|
|
|
norecursedirs = [
|
|
|
|
".git",
|
|
|
|
"testing_config",
|
|
|
|
]
|
2022-04-05 08:10:16 +00:00
|
|
|
log_format = "%(asctime)s.%(msecs)03d %(levelname)-8s %(threadName)s %(name)s:%(filename)s:%(lineno)s %(message)s"
|
|
|
|
log_date_format = "%Y-%m-%d %H:%M:%S"
|
2022-11-29 21:36:36 +00:00
|
|
|
asyncio_mode = "auto"
|
2023-08-20 16:30:28 +00:00
|
|
|
filterwarnings = [
|
|
|
|
"error::sqlalchemy.exc.SAWarning",
|
|
|
|
|
|
|
|
# -- HomeAssistant - aiohttp
|
|
|
|
# Overwrite web.Application to pass a custom default argument to _make_request
|
|
|
|
"ignore:Inheritance class HomeAssistantApplication from web.Application is discouraged:DeprecationWarning",
|
|
|
|
# Hass wraps `ClientSession.close` to emit a warning if the session is closed accidentally
|
|
|
|
"ignore:Setting custom ClientSession.close attribute is discouraged:DeprecationWarning:homeassistant.helpers.aiohttp_client",
|
|
|
|
# Modify app state for testing
|
|
|
|
"ignore:Changing state of started or joined application is deprecated:DeprecationWarning:tests.components.http.test_ban",
|
|
|
|
|
|
|
|
# -- Tests
|
|
|
|
# Ignore custom pytest marks
|
|
|
|
"ignore:Unknown pytest.mark.disable_autouse_fixture:pytest.PytestUnknownMarkWarning:tests.components.met",
|
|
|
|
|
|
|
|
# -- design choice 3rd party
|
|
|
|
# https://github.com/gwww/elkm1/blob/2.2.5/elkm1_lib/util.py#L8-L19
|
|
|
|
"ignore:ssl.TLSVersion.TLSv1 is deprecated:DeprecationWarning:elkm1_lib.util",
|
2023-10-05 05:11:17 +00:00
|
|
|
# https://github.com/michaeldavie/env_canada/blob/v0.5.37/env_canada/ec_cache.py
|
2023-08-20 16:30:28 +00:00
|
|
|
"ignore:Inheritance class CacheClientSession from ClientSession is discouraged:DeprecationWarning:env_canada.ec_cache",
|
|
|
|
# https://github.com/bachya/regenmaschine/blob/2023.08.0/regenmaschine/client.py#L51
|
|
|
|
"ignore:ssl.TLSVersion.SSLv3 is deprecated:DeprecationWarning:regenmaschine.client",
|
|
|
|
|
|
|
|
# -- Setuptools DeprecationWarnings
|
|
|
|
# https://github.com/googleapis/google-cloud-python/issues/11184
|
|
|
|
# https://github.com/zopefoundation/meta/issues/194
|
|
|
|
"ignore:Deprecated call to `pkg_resources.declare_namespace\\(('google.*'|'pywinusb'|'repoze'|'xbox'|'zope')\\)`:DeprecationWarning:pkg_resources",
|
|
|
|
"ignore:Deprecated call to `pkg_resources.declare_namespace\\('google.*'\\)`:DeprecationWarning:google.rpc",
|
|
|
|
|
|
|
|
# -- tracked upstream / open PRs
|
|
|
|
# https://github.com/caronc/apprise/issues/659 - v1.4.5
|
|
|
|
"ignore:Use setlocale\\(\\), getencoding\\(\\) and getlocale\\(\\) instead:DeprecationWarning:apprise.AppriseLocal",
|
|
|
|
# https://github.com/beetbox/mediafile/issues/67 - v0.12.0
|
|
|
|
"ignore:'imghdr' is deprecated and slated for removal in Python 3.13:DeprecationWarning:mediafile",
|
|
|
|
# https://github.com/eclipse/paho.mqtt.python/issues/653 - v1.6.1
|
|
|
|
# https://github.com/eclipse/paho.mqtt.python/pull/665
|
|
|
|
"ignore:ssl.PROTOCOL_TLS is deprecated:DeprecationWarning:paho.mqtt.client",
|
|
|
|
# https://github.com/PythonCharmers/python-future/issues/488 - v0.18.3
|
|
|
|
"ignore:the imp module is deprecated in favour of importlib and slated for removal in Python 3.12:DeprecationWarning:future.standard_library",
|
|
|
|
# https://github.com/foxel/python_ndms2_client/issues/6 - v0.1.2
|
|
|
|
"ignore:'telnetlib' is deprecated and slated for removal in Python 3.13:DeprecationWarning:ndms2_client.connection",
|
|
|
|
# https://github.com/pytest-dev/pytest-cov/issues/557 - v4.1.0
|
|
|
|
# Should resolve itself once pytest-xdist 4.0 is released and the option is removed
|
|
|
|
"ignore:The --rsyncdir command line argument and rsyncdirs config variable are deprecated:DeprecationWarning:xdist.plugin",
|
|
|
|
|
|
|
|
# -- fixed, waiting for release / update
|
2023-09-03 11:04:01 +00:00
|
|
|
# https://github.com/kurtmckee/feedparser/issues/330 - >6.0.10
|
|
|
|
"ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning:feedparser.encodings",
|
|
|
|
# https://github.com/jaraco/jaraco.abode/commit/9e3e789efc96cddcaa15f920686bbeb79a7469e0 - update jaraco.abode to >=5.1.0
|
|
|
|
"ignore:`jaraco.functools.call_aside` is deprecated, use `jaraco.functools.invoke` instead:DeprecationWarning:jaraco.abode.helpers.timeline",
|
2023-09-18 10:26:16 +00:00
|
|
|
# https://github.com/poljar/matrix-nio/pull/438 - >0.21.2
|
|
|
|
"ignore:FormatChecker.cls_checks is deprecated:DeprecationWarning:nio.schemas",
|
|
|
|
# https://github.com/poljar/matrix-nio/pull/439 - >0.21.2
|
|
|
|
"ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning:nio.client.http_client",
|
|
|
|
# https://github.com/grahamwetzler/smart-meter-texas/pull/143 - >0.5.3
|
|
|
|
"ignore:ssl.OP_NO_SSL\\*/ssl.OP_NO_TLS\\* options are deprecated:DeprecationWarning:smart_meter_texas",
|
2023-08-20 16:30:28 +00:00
|
|
|
|
|
|
|
# -- not helpful
|
|
|
|
# pyatmo.__init__ imports deprecated moduls from itself - v7.5.0
|
|
|
|
"ignore:The module pyatmo.* is deprecated:DeprecationWarning:pyatmo",
|
|
|
|
|
2023-09-03 11:04:01 +00:00
|
|
|
# -- other
|
|
|
|
# Locale changes might take some time to resolve upstream
|
|
|
|
"ignore:Use setlocale\\(\\), getencoding\\(\\) and getlocale\\(\\) instead:DeprecationWarning:homematicip.base.base_connection",
|
|
|
|
"ignore:Use setlocale\\(\\), getencoding\\(\\) and getlocale\\(\\) instead:DeprecationWarning:micloud.micloud",
|
2023-09-18 10:26:16 +00:00
|
|
|
# Wrong stacklevel
|
|
|
|
# https://bugs.launchpad.net/beautifulsoup/+bug/2034451
|
|
|
|
"ignore:It looks like you're parsing an XML document using an HTML parser:UserWarning:bs4.builder",
|
2023-09-03 11:04:01 +00:00
|
|
|
|
2023-08-20 16:30:28 +00:00
|
|
|
# -- unmaintained projects, last release about 2+ years
|
|
|
|
# https://pypi.org/project/agent-py/ - v0.0.23 - 2020-06-04
|
|
|
|
"ignore:with timeout\\(\\) is deprecated:DeprecationWarning:agent.a",
|
|
|
|
# https://pypi.org/project/aiomodernforms/ - v0.1.8 - 2021-06-27
|
|
|
|
"ignore:with timeout\\(\\) is deprecated:DeprecationWarning:aiomodernforms.modernforms",
|
|
|
|
# https://pypi.org/project/directv/ - v0.4.0 - 2020-09-12
|
|
|
|
"ignore:with timeout\\(\\) is deprecated:DeprecationWarning:directv.directv",
|
|
|
|
# https://pypi.org/project/emulated-roku/ - v0.2.1 - 2020-01-23 (archived)
|
|
|
|
"ignore:loop argument is deprecated:DeprecationWarning:emulated_roku",
|
|
|
|
# https://pypi.org/project/foobot_async/ - v1.0.0 - 2020-11-24
|
|
|
|
"ignore:with timeout\\(\\) is deprecated:DeprecationWarning:foobot_async",
|
|
|
|
# https://pypi.org/project/lark-parser/ - v0.12.0 - 2021-08-30 -> moved to `lark`
|
|
|
|
# https://pypi.org/project/commentjson/ - v0.9.0 - 2020-10-05
|
|
|
|
# https://github.com/vaidik/commentjson/issues/51
|
2023-09-18 10:26:16 +00:00
|
|
|
# https://github.com/vaidik/commentjson/pull/52
|
2023-08-20 16:30:28 +00:00
|
|
|
# Fixed upstream, commentjson depends on old version and seems to be unmaintained
|
|
|
|
"ignore:module '(sre_parse|sre_constants)' is deprecate:DeprecationWarning:lark.utils",
|
|
|
|
# https://pypi.org/project/lomond/ - v0.3.3 - 2018-09-21
|
|
|
|
"ignore:ssl.PROTOCOL_TLS is deprecated:DeprecationWarning:lomond.session",
|
|
|
|
# https://pypi.org/project/passlib/ - v1.7.4 - 2020-10-08
|
|
|
|
"ignore:'crypt' is deprecated and slated for removal in Python 3.13:DeprecationWarning:passlib.utils",
|
|
|
|
# https://pypi.org/project/pyqwikswitch/ - v0.94 - 2019-08-19
|
|
|
|
"ignore:client.loop property is deprecated:DeprecationWarning:pyqwikswitch.async_",
|
|
|
|
"ignore:with timeout\\(\\) is deprecated:DeprecationWarning:pyqwikswitch.async_",
|
|
|
|
# https://pypi.org/project/rxv/ - v0.7.0 - 2021-10-10
|
|
|
|
"ignore:defusedxml.cElementTree is deprecated, import from defusedxml.ElementTree instead:DeprecationWarning:rxv.ssdp",
|
|
|
|
# https://pypi.org/project/vilfo-api-client/ - v0.4.1 - 2021-11-06
|
|
|
|
"ignore:Function 'semver.compare' is deprecated. Deprecated since version 3.0.0:PendingDeprecationWarning:.*vilfo.client",
|
|
|
|
# https://pypi.org/project/webrtcvad/ - v2.0.10 - 2017-01-08
|
|
|
|
"ignore:pkg_resources is deprecated as an API:DeprecationWarning:webrtcvad",
|
|
|
|
]
|
2023-01-24 11:15:16 +00:00
|
|
|
|
|
|
|
[tool.ruff]
|
2023-01-26 16:17:13 +00:00
|
|
|
select = [
|
2023-06-27 15:42:46 +00:00
|
|
|
"B002", # Python does not support the unary prefix increment
|
2023-02-18 02:08:18 +00:00
|
|
|
"B007", # Loop control variable {name} not used within loop body
|
2023-02-18 13:38:04 +00:00
|
|
|
"B014", # Exception handler with duplicate exception
|
2023-06-27 15:42:46 +00:00
|
|
|
"B023", # Function definition does not bind loop variable {name}
|
|
|
|
"B026", # Star-arg unpacking after a keyword argument is strongly discouraged
|
2023-01-26 16:17:13 +00:00
|
|
|
"C", # complexity
|
2023-06-27 15:42:46 +00:00
|
|
|
"COM818", # Trailing comma on bare tuple prohibited
|
2023-01-26 16:17:13 +00:00
|
|
|
"D", # docstrings
|
2023-08-25 01:23:43 +00:00
|
|
|
"DTZ003", # Use datetime.now(tz=) instead of datetime.utcnow()
|
|
|
|
"DTZ004", # Use datetime.fromtimestamp(ts, tz=) instead of datetime.utcfromtimestamp(ts)
|
2023-01-26 16:17:13 +00:00
|
|
|
"E", # pycodestyle
|
|
|
|
"F", # pyflakes/autoflake
|
2023-06-27 15:42:46 +00:00
|
|
|
"G", # flake8-logging-format
|
2023-06-08 21:43:56 +00:00
|
|
|
"I", # isort
|
2023-02-15 22:14:45 +00:00
|
|
|
"ICN001", # import concentions; {name} should be imported as {asname}
|
2023-06-27 15:42:46 +00:00
|
|
|
"ISC001", # Implicitly concatenated string literals on one line
|
|
|
|
"N804", # First argument of a class method should be named cls
|
|
|
|
"N805", # First argument of a method should be named self
|
|
|
|
"N815", # Variable {name} in class scope should not be mixedCase
|
|
|
|
"PGH001", # No builtin eval() allowed
|
2023-01-26 17:05:05 +00:00
|
|
|
"PGH004", # Use specific rule codes when using noqa
|
2023-01-27 15:32:04 +00:00
|
|
|
"PLC0414", # Useless import alias. Import alias does not rename original package.
|
2023-06-27 15:42:46 +00:00
|
|
|
"PLC", # pylint
|
|
|
|
"PLE", # pylint
|
|
|
|
"PLR", # pylint
|
|
|
|
"PLW", # pylint
|
|
|
|
"Q000", # Double quotes found but single quotes preferred
|
|
|
|
"RUF006", # Store a reference to the return value of asyncio.create_task
|
|
|
|
"S102", # Use of exec detected
|
2023-06-08 20:46:04 +00:00
|
|
|
"S103", # bad-file-permissions
|
|
|
|
"S108", # hardcoded-temp-file
|
|
|
|
"S306", # suspicious-mktemp-usage
|
|
|
|
"S307", # suspicious-eval-usage
|
|
|
|
"S313", # suspicious-xmlc-element-tree-usage
|
|
|
|
"S314", # suspicious-xml-element-tree-usage
|
|
|
|
"S315", # suspicious-xml-expat-reader-usage
|
|
|
|
"S316", # suspicious-xml-expat-builder-usage
|
|
|
|
"S317", # suspicious-xml-sax-usage
|
|
|
|
"S318", # suspicious-xml-mini-dom-usage
|
|
|
|
"S319", # suspicious-xml-pull-dom-usage
|
|
|
|
"S320", # suspicious-xmle-tree-usage
|
|
|
|
"S601", # paramiko-call
|
|
|
|
"S602", # subprocess-popen-with-shell-equals-true
|
|
|
|
"S604", # call-with-shell-equals-true
|
|
|
|
"S608", # hardcoded-sql-expression
|
|
|
|
"S609", # unix-command-wildcard-injection
|
2023-01-27 02:06:22 +00:00
|
|
|
"SIM105", # Use contextlib.suppress({exception}) instead of try-except-pass
|
2023-01-27 10:52:49 +00:00
|
|
|
"SIM117", # Merge with-statements that use the same scope
|
2023-02-15 11:39:12 +00:00
|
|
|
"SIM118", # Use {key} in {dict} instead of {key} in {dict}.keys()
|
2023-02-15 13:43:02 +00:00
|
|
|
"SIM201", # Use {left} != {right} instead of not {left} == {right}
|
2023-06-27 15:42:46 +00:00
|
|
|
"SIM208", # Use {expr} instead of not (not {expr})
|
2023-02-15 14:22:34 +00:00
|
|
|
"SIM212", # Use {a} if {a} else {b} instead of {b} if not {a} else {a}
|
2023-01-30 10:03:23 +00:00
|
|
|
"SIM300", # Yoda conditions. Use 'age == 42' instead of '42 == age'.
|
2023-01-27 12:08:44 +00:00
|
|
|
"SIM401", # Use get from dict with default instead of an if block
|
2023-06-27 15:42:46 +00:00
|
|
|
"T100", # Trace found: {name} used
|
2023-01-26 16:17:13 +00:00
|
|
|
"T20", # flake8-print
|
2023-08-18 17:10:29 +00:00
|
|
|
"TID251", # Banned imports
|
2023-01-30 13:06:52 +00:00
|
|
|
"TRY004", # Prefer TypeError exception for invalid type
|
2023-06-27 15:42:46 +00:00
|
|
|
"TRY200", # Use raise from to specify exception cause
|
|
|
|
"TRY302", # Remove exception handler; error is immediately re-raised
|
2023-01-26 16:17:13 +00:00
|
|
|
"UP", # pyupgrade
|
2023-01-26 17:05:05 +00:00
|
|
|
"W", # pycodestyle
|
2023-01-26 16:17:13 +00:00
|
|
|
]
|
2023-01-24 11:15:16 +00:00
|
|
|
|
|
|
|
ignore = [
|
|
|
|
"D202", # No blank lines allowed after function docstring
|
|
|
|
"D203", # 1 blank line required before class docstring
|
|
|
|
"D213", # Multi-line docstring summary should start at the second line
|
|
|
|
"D406", # Section name should end with a newline
|
|
|
|
"D407", # Section name underlining
|
|
|
|
"E501", # line too long
|
|
|
|
"E731", # do not assign a lambda expression, use a def
|
2023-10-02 19:49:10 +00:00
|
|
|
|
|
|
|
# Ignore ignored, as the rule is now back in preview/nursery, which cannot
|
|
|
|
# be ignored anymore without warnings.
|
|
|
|
# https://github.com/astral-sh/ruff/issues/7491
|
|
|
|
# "PLC1901", # Lots of false positives
|
|
|
|
|
2023-06-27 15:42:46 +00:00
|
|
|
# False positives https://github.com/astral-sh/ruff/issues/5386
|
|
|
|
"PLC0208", # Use a sequence type instead of a `set` when iterating over values
|
|
|
|
"PLR0911", # Too many return statements ({returns} > {max_returns})
|
|
|
|
"PLR0912", # Too many branches ({branches} > {max_branches})
|
|
|
|
"PLR0913", # Too many arguments to function call ({c_args} > {max_args})
|
|
|
|
"PLR0915", # Too many statements ({statements} > {max_statements})
|
|
|
|
"PLR2004", # Magic value used in comparison, consider replacing {value} with a constant variable
|
|
|
|
"PLW2901", # Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target
|
2023-06-08 19:53:43 +00:00
|
|
|
"UP006", # keep type annotation style as is
|
|
|
|
"UP007", # keep type annotation style as is
|
2023-03-07 12:25:31 +00:00
|
|
|
# Ignored due to performance: https://github.com/charliermarsh/ruff/issues/2923
|
|
|
|
"UP038", # Use `X | Y` in `isinstance` call instead of `(X, Y)`
|
2023-06-27 15:42:46 +00:00
|
|
|
|
2023-01-24 11:15:16 +00:00
|
|
|
]
|
|
|
|
|
2023-02-09 12:41:50 +00:00
|
|
|
[tool.ruff.flake8-import-conventions.extend-aliases]
|
|
|
|
voluptuous = "vol"
|
2023-03-01 17:40:26 +00:00
|
|
|
"homeassistant.helpers.area_registry" = "ar"
|
2023-02-09 12:41:50 +00:00
|
|
|
"homeassistant.helpers.config_validation" = "cv"
|
2023-03-01 17:40:26 +00:00
|
|
|
"homeassistant.helpers.device_registry" = "dr"
|
|
|
|
"homeassistant.helpers.entity_registry" = "er"
|
|
|
|
"homeassistant.helpers.issue_registry" = "ir"
|
2023-05-30 20:30:31 +00:00
|
|
|
"homeassistant.util.dt" = "dt_util"
|
2023-02-09 12:41:50 +00:00
|
|
|
|
2023-01-26 17:05:05 +00:00
|
|
|
[tool.ruff.flake8-pytest-style]
|
|
|
|
fixture-parentheses = false
|
|
|
|
|
2023-08-18 17:10:29 +00:00
|
|
|
[tool.ruff.flake8-tidy-imports.banned-api]
|
2023-10-04 16:19:19 +00:00
|
|
|
"async_timeout".msg = "use asyncio.timeout instead"
|
2023-08-18 17:10:29 +00:00
|
|
|
"pytz".msg = "use zoneinfo instead"
|
|
|
|
|
2023-06-08 21:43:56 +00:00
|
|
|
[tool.ruff.isort]
|
|
|
|
force-sort-within-sections = true
|
|
|
|
known-first-party = [
|
|
|
|
"homeassistant",
|
|
|
|
]
|
|
|
|
combine-as-imports = true
|
2023-08-10 12:27:03 +00:00
|
|
|
split-on-trailing-comma = false
|
2023-06-08 21:43:56 +00:00
|
|
|
|
2023-01-24 11:15:16 +00:00
|
|
|
[tool.ruff.per-file-ignores]
|
|
|
|
|
2023-01-24 13:24:21 +00:00
|
|
|
# Allow for main entry & scripts to write to stdout
|
|
|
|
"homeassistant/__main__.py" = ["T201"]
|
|
|
|
"homeassistant/scripts/*" = ["T201"]
|
|
|
|
"script/*" = ["T20"]
|
|
|
|
|
2023-01-24 11:15:16 +00:00
|
|
|
[tool.ruff.mccabe]
|
|
|
|
max-complexity = 25
|