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
|
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "aiomqtt"
version = "2.3.1"
description = "The idiomatic asyncio MQTT client"
authors = [
{ name = "Frederik Aalund", email = "fpa@sbtinstruments.com" },
{ name = "Felix Böhm", email = "f@bo3hm.com" },
{ name = "Jonathan Plasse", email = "jonathan.plasse@live.fr" },
]
readme = "README.md"
keywords = [
"mqtt",
"iot",
"internet-of-things",
"asyncio",
"paho-mqtt",
"mqttv5",
]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"License :: OSI Approved :: BSD License",
]
requires-python = ">=3.8,<4.0"
dependencies = [
"paho-mqtt>=2.1.0,<3.0.0",
"typing-extensions>=4.4.0,<5.0.0; python_version < \"3.10\"",
]
[project.urls]
source = "https://github.com/empicano/aiomqtt"
documentation = "https://aiomqtt.bo3hm.com"
issues = "https://github.com/empicano/aiomqtt/issues"
[dependency-groups]
dev = [
"mypy>=1.10.0,<2.0.0",
"ruff>=0.4.8,<0.5.0",
"pytest>=7.3.1,<8.0.0",
"pytest-cov>=4.0.0,<5.0.0",
"anyio>=3.6.2,<4.0.0",
"furo>=2023.3.27,<2024.0.0",
"sphinx-autobuild>=2021.3.14,<2022.0.0",
"myst-parser>=1.0.0,<2.0.0",
"sphinx-copybutton>=0.5.2,<0.6.0",
"sphinx>=5.3,<6.0",
]
[tool.ruff]
target-version = "py38"
[tool.ruff.lint]
select = [
"F", # Pyflakes
"E", # pycodestyle
"W", # pycodestyle
"C90", # mccabe
"I", # isort
"N", # pep8-naming
"D", # pydocstyle
"UP", # pyupgrade
"YTT", # flake8-2020
"ANN", # flake8-annotations
"S", # flake8-bandit
"B", # flake8-bugbear
"A", # flake8-builtins
"COM", # flake8-commas
"C4", # flake8-comprehensions
"EM", # flake8-errmsg
"ISC", # flake8-implicit-str-concat
"ICN", # flake8-import-conventions
"INP", # flake8-no-pep420
"PIE", # flake8-pie
"T20", # flake8-print
"PT", # flake8-pytest-style
"RSE", # flake8-raise
"RET", # flake8-return
"SLF", # flake8-self
"SIM", # flake8-simplify
"TID", # flake8-tidy-imports
"PTH", # flake8-use-pathlib
"TD", # flake8-todos
"ERA", # eradicate
"PGH", # pygrep-hooks
"PL", # Pylint
"TRY", # tryceratops
"RUF", # Ruff-specific rules
"G", # flake8-logging-format
]
ignore = [
"ANN101", # missing-type-self
"ANN102", # missing-type-cls
"ANN401", # dynamically-typed-expression
"BLE001", # blind-except
"COM", # trailing-comma
"D10", # missing-docstring
"E501", # line-too-long
"ISC001", # single-line-implicit-string-concatenation
"SIM105", # use-contextlib-suppress
"TD003", # missing-todo-link
]
unfixable = [
"ERA001", # commented-out-code
"F401", # unused-import
"F841", # unused-variable
"T20", # print-found
]
task-tags = ["SPDX-License-Identifier"]
[tool.ruff.lint.per-file-ignores]
"tests/*.py" = [
"S101", # assert-used
]
"tests/test_client.py" = [
"SLF001", # private-member-access
]
[tool.ruff.lint.flake8-pytest-style] # https://github.com/charliermarsh/ruff#flake8-pytest-style-pt
fixture-parentheses = false
mark-parentheses = false
parametrize-names-type = "csv"
[tool.ruff.lint.pydocstyle] # https://github.com/charliermarsh/ruff#pydocstyle
convention = "google"
[tool.mypy] # https://mypy.readthedocs.io/en/latest/config_file.html
python_version = "3.8"
strict = true
show_column_numbers = true
show_error_codes = true
show_error_context = true
pretty = true
[tool.pytest.ini_options] # https://docs.pytest.org/en/latest/reference/reference.html#ini-options-ref
filterwarnings = [
"error",
"ignore:ssl.PROTOCOL_TLS is deprecated:DeprecationWarning",
]
markers = ["network: tests that requires network access"]
xfail_strict = true
[tool.coverage.run] # https://coverage.readthedocs.io/en/latest/config.html#run
branch = true
data_file = "reports/.coverage"
[tool.coverage.report] # https://coverage.readthedocs.io/en/latest/config.html#report
show_missing = true
# Regexes for lines to exclude from consideration
exclude_lines = [
# Have to re-enable the standard pragma
"pragma: no cover",
# Don't complain if tests do not hit defensive assertion code:
"raise AssertionError",
"raise NotImplementedError",
]
[tool.coverage.xml] # https://coverage.readthedocs.io/en/latest/config.html#xml
output = "reports/coverage.xml"
|