[build-system] requires = ["hatchling>=1.24"] build-backend = "hatchling.build" [project] name = "simplex-chat" description = "SimpleX Chat Python library for chat bots" readme = "README.md" license = "AGPL-3.0-only" authors = [{name = "SimpleX Chat"}] requires-python = ">=3.11" keywords = ["simplex", "messenger", "chat", "privacy", "security", "bots"] classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: GNU Affero General Public License v3", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Communications :: Chat", ] dynamic = ["version"] [project.urls] Homepage = "https://github.com/simplex-chat/simplex-chat/tree/stable/packages/simplex-chat-python" Issues = "https://github.com/simplex-chat/simplex-chat/issues" [project.optional-dependencies] test = ["pytest>=8", "pytest-asyncio>=0.23"] dev = ["pytest>=8", "pytest-asyncio>=0.23", "pyright>=1.1.380", "ruff>=0.6"] [tool.hatch.version] path = "src/simplex_chat/_version.py" [tool.hatch.build.targets.wheel] packages = ["src/simplex_chat"] [tool.pytest.ini_options] asyncio_mode = "auto" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.format] # `src/simplex_chat/types/*.py` are generated by the Haskell codegen # (bots/src/API/Docs/Generate/Python.hs). Re-formatting them locally # would diverge from the generator's output and break `cabal test # simplex-chat-test --match Python`. Lint still applies — only format # is suppressed. exclude = ["src/simplex_chat/types/_*.py"] [tool.pyright] # Same rationale: the generated cmd_string helpers use `self.get('x')` # call pairs that pyright cannot narrow across (`is not None` followed # by re-access). Hand-written code is still strictly checked. include = ["src/simplex_chat"] exclude = ["src/simplex_chat/types/_*.py", "**/__pycache__", "**/.venv*"]