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-12-28 01:08:16 +00:00
version = "2024.2.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-11-29 15:13:54 +00:00
"aiohttp==3.9.1" ,
2023-11-02 20:18:12 +00:00
"aiohttp_cors==0.7.0" ,
2023-11-27 15:04:04 +00:00
"aiohttp-fast-url-dispatcher==0.3.0" ,
2023-12-27 18:04:07 +00:00
"aiohttp-zlib-ng==0.1.3" ,
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-11-08 08:11:54 +00:00
"awesomeversion==23.11.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-12-21 20:11:00 +00:00
"httpx==0.26.0" ,
2023-12-12 07:31:23 +00:00
"home-assistant-bluetooth==1.11.0" ,
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-12-17 23:16:31 +00:00
"lru-dict==1.3.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-11-28 11:09:12 +00:00
"cryptography==41.0.7" ,
2023-06-17 20:23:06 +00:00
# pyOpenSSL 23.2.0 is required to work with cryptography 41+
"pyOpenSSL==23.2.0" ,
2023-10-18 23:48:05 +00:00
"orjson==3.9.9" ,
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-12-11 16:30:24 +00:00
"typing-extensions>=4.9.0,<5.0" ,
2023-10-20 14:49:18 +00:00
"ulid-transform==0.9.0" ,
2024-01-02 12:34:19 +00:00
# Constrain urllib3 to ensure we deal with CVE-2020-26137 and CVE-2021-33503
# Temporary setting an upper bound, to prevent compat issues with urllib3>=2
# https://github.com/home-assistant/core/issues/97248
"urllib3>=1.26.5,<2" ,
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-12-08 11:11:59 +00:00
"yarl==1.9.4" ,
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*" ]
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:
2023-11-27 20:42:11 +00:00
# format - handled by ruff
2020-10-06 09:26:48 +00:00
# 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
2023-12-22 13:52:31 +00:00
# https://github.com/gwww/elkm1/blob/2.2.6/elkm1_lib/util.py#L8-L19
2023-08-20 16:30:28 +00:00
"ignore:ssl.TLSVersion.TLSv1 is deprecated:DeprecationWarning:elkm1_lib.util" ,
2023-10-11 09:04:33 +00:00
# https://github.com/michaeldavie/env_canada/blob/v0.6.0/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" ,
2023-10-10 19:34:49 +00:00
# https://github.com/allenporter/ical/pull/215 - v5.0.0
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:ical.util" ,
2023-12-22 13:52:31 +00:00
# https://github.com/bachya/regenmaschine/blob/2023.12.0/regenmaschine/client.py#L57
2023-08-20 16:30:28 +00:00
"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
2023-10-10 19:34:49 +00:00
# https://github.com/influxdata/influxdb-client-python/issues/603 - v1.37.0
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:influxdb_client.client.write.point" ,
2023-08-20 16:30:28 +00:00
# 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" ,
2023-12-22 13:52:31 +00:00
# https://github.com/foxel/python_ndms2_client/issues/6 - v0.1.3
# https://github.com/foxel/python_ndms2_client/pull/8
2023-08-20 16:30:28 +00:00
"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-10-10 19:34:49 +00:00
# https://github.com/ludeeus/aiogithubapi/pull/208 - >=23.9.0
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:aiogithubapi.namespaces.events" ,
2023-12-22 13:52:31 +00:00
# https://github.com/bachya/aiopurpleair/pull/200 - >=2023.10.0
2023-10-10 19:34:49 +00:00
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:aiopurpleair.helpers.validators" ,
2023-12-22 13:52:31 +00:00
# https://github.com/kiorky/croniter/pull/52 - >=2.0.0
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:croniter.croniter" ,
2023-09-03 11:04:01 +00:00
# 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-10-09 19:07:16 +00:00
# https://github.com/nextcord/nextcord/pull/1095 - >2.6.1
"ignore:pkg_resources is deprecated as an API:DeprecationWarning:nextcord.health_check" ,
2023-12-22 13:52:31 +00:00
# https://github.com/bachya/pytile/pull/280 - >=2023.10.0
2023-10-10 19:34:49 +00:00
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:pytile.tile" ,
# https://github.com/rytilahti/python-miio/pull/1809 - >0.5.12
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:miio.protocol" ,
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:miio.miioprotocol" ,
# https://github.com/hunterjm/python-onvif-zeep-async/pull/51 - >3.1.12
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:onvif.client" ,
# Fixed upstream in python-telegram-bot - >=20.0
"ignore:python-telegram-bot is using upstream urllib3:UserWarning:telegram.utils.request" ,
2023-09-18 10:26:16 +00:00
# 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-10-10 19:34:49 +00:00
# https://github.com/Bluetooth-Devices/xiaomi-ble/pull/59 - >0.21.1
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:xiaomi_ble.parser" ,
2023-12-22 13:52:31 +00:00
# https://github.com/mvantellingen/python-zeep/pull/1364 - >4.2.1
"ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning:zeep.utils" ,
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
2023-12-22 13:52:31 +00:00
"ignore:'locale.getdefaultlocale' is deprecated and slated for removal in Python 3.15:DeprecationWarning:micloud.micloud" ,
# https://github.com/protocolbuffers/protobuf - v4.25.1
2023-10-10 19:34:49 +00:00
"ignore:Type google._upb._message.(Message|Scalar)MapContainer uses PyType_Spec with a metaclass that has custom tp_new. .* Python 3.14:DeprecationWarning" ,
# https://github.com/googleapis/google-auth-library-python/blob/v2.23.3/google/auth/_helpers.py#L95 - v2.23.3
"ignore:datetime.*utcnow\\(\\) is deprecated:DeprecationWarning:google.auth._helpers" ,
# https://github.com/googleapis/proto-plus-python/blob/v1.22.3/proto/datetime_helpers.py#L24 - v1.22.3
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated:DeprecationWarning:proto.datetime_helpers" ,
# https://github.com/MatsNl/pyatag/issues/11 - v0.3.7.1
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:pyatag.gateway" ,
2023-12-22 13:52:31 +00:00
# https://github.com/lidatong/dataclasses-json/issues/328
# https://github.com/lidatong/dataclasses-json/pull/351
"ignore:The 'default' argument to fields is deprecated. Use 'dump_default' instead:DeprecationWarning:dataclasses_json.mm" ,
# Fixed for Python 3.12
# https://github.com/lextudio/pysnmp/issues/10
"ignore:The asyncore module is deprecated and will be removed in Python 3.12:DeprecationWarning:pysnmp.carrier.asyncore.base" ,
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-10-09 19:07:16 +00:00
# New in aiohttp - v3.9.0
"ignore:It is recommended to use web.AppKey instances for keys:UserWarning:(homeassistant|tests|aiohttp_cors)" ,
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" ,
2023-10-10 19:34:49 +00:00
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:directv.models" ,
2023-08-20 16:30:28 +00:00
# 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" ,
2023-10-10 19:34:49 +00:00
# https://pypi.org/project/influxdb/ - v5.3.1 - 2020-11-11 (archived)
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:influxdb.line_protocol" ,
2023-08-20 16:30:28 +00:00
# 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" ,
2023-10-10 19:34:49 +00:00
# https://pypi.org/project/oauth2client/ - v4.1.3 - 2018-09-07 (archived)
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:oauth2client.client" ,
2023-08-20 16:30:28 +00:00
# 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" ,
2023-10-10 19:34:49 +00:00
# https://pypi.org/project/PyMetEireann/ - v2021.8.0 - 2021-08-16
"ignore:datetime.*utcnow\\(\\) is deprecated and scheduled for removal:DeprecationWarning:meteireann" ,
2023-08-20 16:30:28 +00:00
# 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_" ,
2023-10-10 19:34:49 +00:00
# https://pypi.org/project/Rx/ - v3.2.0 - 2021-04-25
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning:rx.internal.constants" ,
2023-08-20 16:30:28 +00:00
# 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
"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-12-20 22:55:09 +00:00
# May conflict with the formatter, https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
"W191" ,
"E111" ,
"E114" ,
"E117" ,
"D206" ,
"D300" ,
"Q000" ,
"Q001" ,
"Q002" ,
"Q003" ,
"COM812" ,
"COM819" ,
"ISC001" ,
"ISC002" ,
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