kopia lustrzana https://github.com/Yakifo/amqtt
				
				
				
			
		
			
				
	
	
		
			283 wiersze
		
	
	
		
			8.4 KiB
		
	
	
	
		
			TOML
		
	
	
			
		
		
	
	
			283 wiersze
		
	
	
		
			8.4 KiB
		
	
	
	
		
			TOML
		
	
	
| [build-system]
 | |
| requires = ["hatchling", "hatch-vcs", "uv-dynamic-versioning"]
 | |
| 
 | |
| build-backend = "hatchling.build"
 | |
| 
 | |
| [project]
 | |
| name = "amqtt"
 | |
| description = "Python's asyncio-native MQTT broker and client."
 | |
| classifiers = [
 | |
|   "Development Status :: 5 - Production/Stable",
 | |
|   "Intended Audience :: Developers",
 | |
|   "Operating System :: POSIX",
 | |
|   "Operating System :: MacOS",
 | |
|   "Operating System :: Microsoft :: Windows",
 | |
|   "Topic :: Communications",
 | |
|   "Topic :: Internet",
 | |
|   "Programming Language :: Python :: 3.10",
 | |
|   "Programming Language :: Python :: 3.11",
 | |
|   "Programming Language :: Python :: 3.12",
 | |
|   "Programming Language :: Python :: 3.13"
 | |
| ]
 | |
| 
 | |
| version = "0.11.0rc1"
 | |
| requires-python = ">=3.10.0"
 | |
| readme = "README.md"
 | |
| license = { text = "MIT" }
 | |
| 
 | |
| authors = [{ name = "aMQTT Contributors" }]
 | |
| 
 | |
| dependencies = [
 | |
|   "transitions==0.9.2", # https://pypi.org/project/transitions
 | |
|   "websockets==15.0.1", # https://pypi.org/project/websockets
 | |
|   "passlib==1.7.4", # https://pypi.org/project/passlib
 | |
|   "PyYAML==6.0.2", # https://pypi.org/project/PyYAML
 | |
|   "typer==0.15.4",
 | |
|   "dacite>=1.9.2",
 | |
| ]
 | |
| 
 | |
| [dependency-groups]
 | |
| dev = [
 | |
|   "hatch>=1.14.1",
 | |
|   "hypothesis>=6.130.8",
 | |
|   "mypy>=1.15.0",
 | |
|   "paho-mqtt>=2.1.0",
 | |
|   "poethepoet>=0.34.0",
 | |
|   "pre-commit>=4.2.0", # https://pypi.org/project/pre-commit
 | |
|   "psutil>=7.0.0", # https://pypi.org/project/psutil
 | |
|   "pylint>=3.3.6", # https://pypi.org/project/pylint
 | |
|   "pytest-asyncio>=0.26.0", # https://pypi.org/project/pytest-asyncio
 | |
|   "pytest-cov>=6.1.0", # https://pypi.org/project/pytest-cov
 | |
|   "pytest-logdog>=0.1.0", # https://pypi.org/project/pytest-logdog
 | |
|   "pytest-timeout>=2.3.1", # https://pypi.org/project/pytest-timeout
 | |
|   "pytest>=8.3.5", # https://pypi.org/project/pytest
 | |
|   "ruff>=0.11.3", # https://pypi.org/project/ruff
 | |
|   "setuptools>=78.1.0",
 | |
|   "types-mock>=5.2.0.20250306", # https://pypi.org/project/types-mock
 | |
|   "types-PyYAML>=6.0.12.20250402", # https://pypi.org/project/types-PyYAML
 | |
|   "types-setuptools>=78.1.0.20250329", # https://pypi.org/project/types-setuptools
 | |
| ]
 | |
| 
 | |
| docs = [
 | |
|     "markdown-callouts>=0.4",
 | |
|     "markdown-exec>=1.8",
 | |
|     "mkdocs>=1.6",
 | |
|     "mkdocs-coverage>=1.0",
 | |
|     "mkdocs-git-revision-date-localized-plugin>=1.2",
 | |
|     "mkdocs-llmstxt>=0.1",
 | |
|     "mkdocs-material>=9.5",
 | |
|     "mkdocs-minify-plugin>=0.8",
 | |
|     "mkdocs-redirects>=1.2.1",
 | |
|     "mkdocs-section-index>=0.3",
 | |
|     "mkdocstrings-python>=1.16.2",
 | |
|     # YORE: EOL 3.10: Remove line.
 | |
|     "tomli>=2.0; python_version < '3.11'",
 | |
|     "mkdocs-typer2>=0.1.4",
 | |
|     "mkdocs-open-in-new-tab>=1.0.8",
 | |
|     "mkdocs-exclude>=1.0.2",
 | |
| ]
 | |
| 
 | |
| [project.optional-dependencies]
 | |
| ci = ["coveralls==4.0.1"]
 | |
| 
 | |
| 
 | |
| 
 | |
| [project.scripts]
 | |
| amqtt = "amqtt.scripts.broker_script:main"
 | |
| amqtt_pub = "amqtt.scripts.pub_script:main"
 | |
| amqtt_sub = "amqtt.scripts.sub_script:main"
 | |
| 
 | |
| [tool.hatch.build.targets.sdist]
 | |
| include = ["/amqtt"]
 | |
| 
 | |
| [tool.hatch.version]
 | |
| source = "vcs"
 | |
| 
 | |
| [tool.poe.tasks]
 | |
| rtd = "mkdocs serve -f mkdocs.rtd.yml"
 | |
| test = "pytest"
 | |
| docs = "mkdocs build"
 | |
| 
 | |
| # ___________________________________ PLUGINS __________________________________
 | |
| [project.entry-points."amqtt.test.plugins"]
 | |
| test_plugin = "tests.plugins.test_manager:EmptyTestPlugin"
 | |
| event_plugin = "tests.plugins.test_manager:EventTestPlugin"
 | |
| packet_logger_plugin = "amqtt.plugins.logging_amqtt:PacketLoggerPlugin"
 | |
| 
 | |
| # --8<-- [start:included]
 | |
| [project.entry-points."amqtt.broker.plugins"]
 | |
| event_logger_plugin = "amqtt.plugins.logging_amqtt:EventLoggerPlugin"
 | |
| packet_logger_plugin = "amqtt.plugins.logging_amqtt:PacketLoggerPlugin"
 | |
| auth_anonymous = "amqtt.plugins.authentication:AnonymousAuthPlugin"
 | |
| auth_file = "amqtt.plugins.authentication:FileAuthPlugin"
 | |
| topic_taboo = "amqtt.plugins.topic_checking:TopicTabooPlugin"
 | |
| topic_acl = "amqtt.plugins.topic_checking:TopicAccessControlListPlugin"
 | |
| broker_sys = "amqtt.plugins.sys.broker:BrokerSysPlugin"
 | |
| # --8<-- [end:included]
 | |
| 
 | |
| 
 | |
| [project.entry-points."amqtt.client.plugins"]
 | |
| packet_logger_plugin = "amqtt.plugins.logging_amqtt:PacketLoggerPlugin"
 | |
| 
 | |
| # ____________________________________ RUFF ____________________________________
 | |
| # https://docs.astral.sh/ruff/settings/
 | |
| [tool.ruff]
 | |
| line-length = 130
 | |
| fix = true
 | |
| extend-exclude = ["docs/", "samples/"]
 | |
| 
 | |
| 
 | |
| [tool.ruff.format]
 | |
| indent-style = "space"
 | |
| docstring-code-format = true
 | |
| 
 | |
| [tool.ruff.lint]
 | |
| select = ["ALL"]
 | |
| 
 | |
| extend-select = [
 | |
|   "UP", # pyupgrade
 | |
|   "D",  # pydocstyle
 | |
| ]
 | |
| 
 | |
| ignore = [
 | |
|   "FBT001", # Checks for the use of boolean positional arguments in function definitions.
 | |
|   "FBT002", # Checks for the use of boolean positional arguments in function definitions.
 | |
|   "G004",   # Logging statement uses f-string
 | |
|   "D100",   # Missing docstring in public module
 | |
|   "D101",   # Missing docstring in public class
 | |
|   "D102",   # Missing docstring in public method
 | |
|   "D107",   # Missing docstring in `__init__`
 | |
|   "D203",   # Incorrect blank line before class (mutually exclusive D211)
 | |
|   "D213",   # Multi-line summary second line (mutually exclusive D212)
 | |
|   "FIX002", # Checks for "TODO" comments.
 | |
|   "TD002",  # TODO Missing author.
 | |
|   "TD003",  # TODO Missing issue link for this TODO.
 | |
|   "ANN401", # Dynamically typed expressions (typing.Any) are disallowed
 | |
|   "ARG002", # Unused method argument
 | |
|   "PERF203",# try-except penalty within loops (3.10 only),
 | |
|   "COM812"  # rule causes conflicts when used with the formatter
 | |
| ]
 | |
| 
 | |
| [tool.ruff.lint.per-file-ignores]
 | |
| "tests/**" = ["ALL"]
 | |
| "amqtt/scripts/*_script.py" = ["FBT003", "E501"]
 | |
| 
 | |
| [tool.ruff.lint.flake8-pytest-style]
 | |
| fixture-parentheses = false
 | |
| 
 | |
| [tool.ruff.lint.flake8-quotes]
 | |
| docstring-quotes = "double"
 | |
| 
 | |
| [tool.ruff.lint.isort]
 | |
| combine-as-imports = true
 | |
| force-sort-within-sections = true
 | |
| case-sensitive = true
 | |
| extra-standard-library = ["typing_extensions"]
 | |
| 
 | |
| [tool.ruff.lint.mccabe]
 | |
| max-complexity = 42
 | |
| 
 | |
| [tool.ruff.lint.pylint]
 | |
| max-args = 12
 | |
| max-branches = 42
 | |
| max-statements = 143
 | |
| max-returns = 10
 | |
| 
 | |
| # ----------------------------------- PYTEST -----------------------------------
 | |
| [tool.pytest.ini_options]
 | |
| addopts = ["--cov=amqtt", "--cov-report=term-missing", "--cov-report=html"]
 | |
| testpaths = ["tests"]
 | |
| asyncio_mode = "auto"
 | |
| timeout = 10
 | |
| asyncio_default_fixture_loop_scope = "function"
 | |
| #addopts = ["--tb=short", "--capture=tee-sys"]
 | |
| #log_cli = true
 | |
| log_level = "DEBUG"
 | |
| 
 | |
| # ------------------------------------ MYPY ------------------------------------
 | |
| [tool.mypy]
 | |
| exclude = ["^tests/.*", "^docs/.*", "^samples/.*"]
 | |
| follow_imports = "silent"
 | |
| show_error_codes = true
 | |
| ignore_missing_imports = true
 | |
| strict_equality = true
 | |
| warn_incomplete_stub = true
 | |
| warn_redundant_casts = true
 | |
| warn_unused_configs = true
 | |
| warn_unused_ignores = true
 | |
| check_untyped_defs = true
 | |
| disallow_incomplete_defs = true
 | |
| disallow_subclassing_any = true
 | |
| disallow_untyped_calls = true
 | |
| disallow_untyped_decorators = true
 | |
| disallow_untyped_defs = true
 | |
| no_implicit_optional = true
 | |
| warn_return_any = true
 | |
| warn_unreachable = true
 | |
| strict = true
 | |
| 
 | |
| # ----------------------------------- PYLINT -----------------------------------
 | |
| [tool.pylint.MAIN]
 | |
| jobs = 2
 | |
| ignore = ["tests"]
 | |
| fail-on = ["I"]
 | |
| max-line-length = 130
 | |
| 
 | |
| [tool.pylint.BASIC]
 | |
| # Good variable names which should always be accepted, separated by a comma.
 | |
| good-names = ["i", "j", "k", "e", "ex", "f", "_", "T", "x", "y", "id", "tg"]
 | |
| 
 | |
| [tool.pylint."MESSAGES CONTROL"]
 | |
| # Reasons disabled:
 | |
| # duplicate-code - unavoidable
 | |
| # too-many-* - are not enforced for the sake of readability
 | |
| disable = [
 | |
|   "broad-exception-caught",        # TODO: improve later
 | |
|   "duplicate-code",
 | |
|   "fixme",
 | |
|   "invalid-name",
 | |
|   "line-too-long",
 | |
|   "logging-fstring-interpolation",
 | |
|   "missing-class-docstring",
 | |
|   "missing-function-docstring",
 | |
|   "missing-module-docstring",
 | |
|   "protected-access",
 | |
|   "redefined-slots-in-subclass",
 | |
|   "too-few-public-methods",
 | |
|   "too-many-arguments",
 | |
|   "too-many-instance-attributes",
 | |
|   "unused-argument",
 | |
| ]
 | |
| 
 | |
| [tool.pylint.REPORTS]
 | |
| score = false
 | |
| 
 | |
| [tool.pylint.FORMAT]
 | |
| expected-line-ending-format = "LF"
 | |
| 
 | |
| [tool.pylint.EXCEPTIONS]
 | |
| overgeneral-exceptions = ["builtins.BaseException", "builtins.Exception"]
 | |
| 
 | |
| [tool.pylint.REFACTORING]
 | |
| max-nested-blocks = 5
 | |
| never-returning-functions = ["sys.exit", "argparse.parse_error"]
 | |
| 
 | |
| [tool.pylint.DESIGN]
 | |
| max-branches = 32             # too-many-branches
 | |
| max-locals = 20               # too-many-locals
 | |
| max-module-lines = 1500       # too-many-lines
 | |
| max-parents = 10              # too-many-parents
 | |
| max-positional-arguments = 10 # too-many-positional-arguments
 | |
| max-public-methods = 25       # too-many-public-methods
 | |
| max-returns = 7               # too-many-returns
 | |
| max-statements = 90           # too-many-statements
 | |
| 
 | |
| # ---------------------------------- COVERAGE ----------------------------------
 | |
| [tool.coverage.run]
 | |
| branch = true
 | |
| source = ["amqtt"]
 | |
| 
 | |
| [tool.coverage.report]
 | |
| show_missing = true
 | |
| skip_covered = true
 |