123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- [tool.towncrier]
- package = "synapse"
- filename = "CHANGES.md"
- directory = "changelog.d"
- issue_format = "[\\#{issue}](https://github.com/matrix-org/synapse/issues/{issue})"
- [[tool.towncrier.type]]
- directory = "feature"
- name = "Features"
- showcontent = true
- [[tool.towncrier.type]]
- directory = "bugfix"
- name = "Bugfixes"
- showcontent = true
- [[tool.towncrier.type]]
- directory = "docker"
- name = "Updates to the Docker image"
- showcontent = true
- [[tool.towncrier.type]]
- directory = "doc"
- name = "Improved Documentation"
- showcontent = true
- [[tool.towncrier.type]]
- directory = "removal"
- name = "Deprecations and Removals"
- showcontent = true
- [[tool.towncrier.type]]
- directory = "misc"
- name = "Internal Changes"
- showcontent = true
- [tool.black]
- target-version = ['py38', 'py39', 'py310', 'py311']
- # black ignores everything in .gitignore by default, see
- # https://black.readthedocs.io/en/stable/usage_and_configuration/file_collection_and_discovery.html#gitignore
- # Use `extend-exclude` if you want to exclude something in addition to this.
- [tool.ruff]
- line-length = 88
- # See https://beta.ruff.rs/docs/rules/#error-e
- # for error codes. The ones we ignore are:
- # E501: Line too long (black enforces this for us)
- # E731: do not assign a lambda expression, use a def
- #
- # flake8-bugbear compatible checks. Its error codes are described at
- # https://beta.ruff.rs/docs/rules/#flake8-bugbear-b
- # B023: Functions defined inside a loop must not use variables redefined in the loop
- ignore = [
- "B023",
- "E501",
- "E731",
- ]
- select = [
- # pycodestyle
- "E",
- "W",
- # pyflakes
- "F",
- # flake8-bugbear
- "B0",
- # flake8-comprehensions
- "C4",
- # flake8-2020
- "YTT",
- # flake8-slots
- "SLOT",
- # flake8-debugger
- "T10",
- # flake8-pie
- "PIE",
- # flake8-executable
- "EXE",
- ]
- [tool.isort]
- line_length = 88
- sections = ["FUTURE", "STDLIB", "THIRDPARTY", "TWISTED", "FIRSTPARTY", "TESTS", "LOCALFOLDER"]
- default_section = "THIRDPARTY"
- known_first_party = ["synapse"]
- known_tests = ["tests"]
- known_twisted = ["twisted", "OpenSSL"]
- multi_line_output = 3
- include_trailing_comma = true
- combine_as_imports = true
- skip_gitignore = true
- [tool.maturin]
- manifest-path = "rust/Cargo.toml"
- module-name = "synapse.synapse_rust"
- [tool.poetry]
- name = "matrix-synapse"
- version = "1.98.0"
- description = "Homeserver for the Matrix decentralised comms protocol"
- authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
- license = "Apache-2.0"
- readme = "README.rst"
- repository = "https://github.com/matrix-org/synapse"
- packages = [
- { include = "synapse" },
- ]
- classifiers = [
- "Development Status :: 5 - Production/Stable",
- "Topic :: Communications :: Chat",
- ]
- include = [
- { path = "AUTHORS.rst", format = "sdist" },
- { path = "book.toml", format = "sdist" },
- { path = "changelog.d", format = "sdist" },
- { path = "CHANGES.md", format = "sdist" },
- { path = "CONTRIBUTING.md", format = "sdist" },
- { path = "demo", format = "sdist" },
- { path = "docs", format = "sdist" },
- { path = "INSTALL.md", format = "sdist" },
- { path = "mypy.ini", format = "sdist" },
- { path = "scripts-dev", format = "sdist" },
- { path = "synmark", format="sdist" },
- { path = "sytest-blacklist", format = "sdist" },
- { path = "tests", format = "sdist" },
- { path = "UPGRADE.rst", format = "sdist" },
- { path = "Cargo.toml", format = "sdist" },
- { path = "Cargo.lock", format = "sdist" },
- { path = "rust/Cargo.toml", format = "sdist" },
- { path = "rust/build.rs", format = "sdist" },
- { path = "rust/src/**", format = "sdist" },
- ]
- exclude = [
- { path = "synapse/*.so", format = "sdist"}
- ]
- [tool.poetry.build]
- script = "build_rust.py"
- generate-setup-file = true
- [tool.poetry.scripts]
- synapse_homeserver = "synapse.app.homeserver:main"
- synapse_worker = "synapse.app.generic_worker:main"
- synctl = "synapse._scripts.synctl:main"
- export_signing_key = "synapse._scripts.export_signing_key:main"
- generate_config = "synapse._scripts.generate_config:main"
- generate_log_config = "synapse._scripts.generate_log_config:main"
- generate_signing_key = "synapse._scripts.generate_signing_key:main"
- hash_password = "synapse._scripts.hash_password:main"
- register_new_matrix_user = "synapse._scripts.register_new_matrix_user:main"
- synapse_port_db = "synapse._scripts.synapse_port_db:main"
- synapse_review_recent_signups = "synapse._scripts.review_recent_signups:main"
- update_synapse_database = "synapse._scripts.update_synapse_database:main"
- [tool.poetry.dependencies]
- python = "^3.8.0"
- # Mandatory Dependencies
- # ----------------------
- # we use the TYPE_CHECKER.redefine method added in jsonschema 3.0.0
- jsonschema = ">=3.0.0"
- # We choose 2.0 as a lower bound: the most recent backwards incompatible release.
- # It seems generally available, judging by https://pkgs.org/search/?q=immutabledict
- immutabledict = ">=2.0"
- # We require 2.1.0 or higher for type hints. Previous guard was >= 1.1.0
- unpaddedbase64 = ">=2.1.0"
- # We require 2.0.0 for immutabledict support.
- canonicaljson = "^2.0.0"
- # we use the type definitions added in signedjson 1.1.
- signedjson = "^1.1.0"
- # validating SSL certs for IP addresses requires service_identity 18.1.
- service-identity = ">=18.1.0"
- # Twisted 18.9 introduces some logger improvements that the structured
- # logger utilises
- Twisted = {extras = ["tls"], version = ">=18.9.0"}
- treq = ">=15.1"
- # Twisted has required pyopenssl 16.0 since about Twisted 16.6.
- pyOpenSSL = ">=16.0.0"
- PyYAML = ">=3.13"
- pyasn1 = ">=0.1.9"
- pyasn1-modules = ">=0.0.7"
- bcrypt = ">=3.1.7"
- # 10.0.1 minimum is mandatory here because of libwebp CVE-2023-4863.
- # Packagers that already took care of libwebp can lower that down to 5.4.0.
- Pillow = ">=10.0.1"
- # We use SortedDict.peekitem(), which was added in sortedcontainers 1.5.2.
- sortedcontainers = ">=1.5.2"
- pymacaroons = ">=0.13.0"
- msgpack = ">=0.5.2"
- phonenumbers = ">=8.2.0"
- # we use GaugeHistogramMetric, which was added in prom-client 0.4.0.
- prometheus-client = ">=0.4.0"
- # we use `order`, which arrived in attrs 19.2.0.
- # Note: 21.1.0 broke `/sync`, see https://github.com/matrix-org/synapse/issues/9936
- attrs = ">=19.2.0,!=21.1.0"
- netaddr = ">=0.7.18"
- # Jinja 2.x is incompatible with MarkupSafe>=2.1. To ensure that admins do not
- # end up with a broken installation, with recent MarkupSafe but old Jinja, we
- # add a lower bound to the Jinja2 dependency.
- Jinja2 = ">=3.0"
- bleach = ">=1.4.3"
- # We use `ParamSpec` and `Concatenate`, which were added in `typing-extensions` 3.10.0.0.
- # Additionally we need https://github.com/python/typing/pull/817 to allow types to be
- # generic over ParamSpecs.
- typing-extensions = ">=3.10.0.1"
- # We enforce that we have a `cryptography` version that bundles an `openssl`
- # with the latest security patches.
- cryptography = ">=3.4.7"
- # ijson 3.1.4 fixes a bug with "." in property names
- ijson = ">=3.1.4"
- matrix-common = "^1.3.0"
- # We need packaging.verison.Version(...).major added in 20.0.
- packaging = ">=20.0"
- # We support pydantic v1 and pydantic v2 via the pydantic.v1 compat module.
- # See https://github.com/matrix-org/synapse/issues/15858
- pydantic = ">=1.7.4, <3"
- # This is for building the rust components during "poetry install", which
- # currently ignores the `build-system.requires` directive (c.f.
- # https://github.com/python-poetry/poetry/issues/6154). Both `pip install` and
- # `poetry build` do the right thing without this explicit dependency.
- #
- # This isn't really a dev-dependency, as `poetry install --no-dev` will fail,
- # but the alternative is to add it to the main list of deps where it isn't
- # needed.
- setuptools_rust = ">=1.3"
- # Optional Dependencies
- # ---------------------
- matrix-synapse-ldap3 = { version = ">=0.1", optional = true }
- psycopg2 = { version = ">=2.8", markers = "platform_python_implementation != 'PyPy'", optional = true }
- psycopg2cffi = { version = ">=2.8", markers = "platform_python_implementation == 'PyPy'", optional = true }
- psycopg2cffi-compat = { version = "==1.1", markers = "platform_python_implementation == 'PyPy'", optional = true }
- pysaml2 = { version = ">=4.5.0", optional = true }
- authlib = { version = ">=0.15.1", optional = true }
- # systemd-python is necessary for logging to the systemd journal via
- # `systemd.journal.JournalHandler`, as is documented in
- # `contrib/systemd/log_config.yaml`.
- # Note: systemd-python 231 appears to have been yanked from pypi
- systemd-python = { version = ">=231", optional = true }
- lxml = { version = ">=4.2.0", optional = true }
- sentry-sdk = { version = ">=0.7.2", optional = true }
- opentracing = { version = ">=2.2.0", optional = true }
- jaeger-client = { version = ">=4.0.0", optional = true }
- txredisapi = { version = ">=1.4.7", optional = true }
- hiredis = { version = "*", optional = true }
- Pympler = { version = "*", optional = true }
- parameterized = { version = ">=0.7.4", optional = true }
- idna = { version = ">=2.5", optional = true }
- pyicu = { version = ">=2.10.2", optional = true }
- [tool.poetry.extras]
- # NB: Packages that should be part of `pip install matrix-synapse[all]` need to be specified
- # twice: once here, and once in the `all` extra.
- matrix-synapse-ldap3 = ["matrix-synapse-ldap3"]
- postgres = ["psycopg2", "psycopg2cffi", "psycopg2cffi-compat"]
- saml2 = ["pysaml2"]
- oidc = ["authlib"]
- # systemd-python is necessary for logging to the systemd journal via
- # `systemd.journal.JournalHandler`, as is documented in
- # `contrib/systemd/log_config.yaml`.
- systemd = ["systemd-python"]
- url-preview = ["lxml"]
- sentry = ["sentry-sdk"]
- opentracing = ["jaeger-client", "opentracing"]
- jwt = ["authlib"]
- # hiredis is not a *strict* dependency, but it makes things much faster.
- # (if it is not installed, we fall back to slow code.)
- redis = ["txredisapi", "hiredis"]
- # Required to use experimental `caches.track_memory_usage` config option.
- cache-memory = ["pympler"]
- test = ["parameterized", "idna"]
- # Allows for better search for international characters in the user directory. This
- # requires libicu's development headers installed on the system (e.g. libicu-dev on
- # Debian-based distributions).
- user-search = ["pyicu"]
- # The duplication here is awful. I hate hate hate hate hate it. However, for now I want
- # to ensure you can still `pip install matrix-synapse[all]` like today. Two motivations:
- # 1) for new installations, I want instructions in existing documentation and tutorials
- # out there to still work.
- # 2) I don't want to hard-code a list of extras into CI if I can help it. The ideal
- # solution here would be something like https://github.com/python-poetry/poetry/issues/3413
- # Poetry 1.2's dependency groups might make this easier. But I'm not trying that out
- # until there's a stable release of 1.2.
- #
- # NB: the strings in this list must be *package* names, not extra names.
- # Some of our extra names _are_ package names, which can lead to great confusion.
- all = [
- # matrix-synapse-ldap3
- "matrix-synapse-ldap3",
- # postgres
- "psycopg2", "psycopg2cffi", "psycopg2cffi-compat",
- # saml2
- "pysaml2",
- # oidc and jwt
- "authlib",
- # url-preview
- "lxml",
- # sentry
- "sentry-sdk",
- # opentracing
- "jaeger-client", "opentracing",
- # redis
- "txredisapi", "hiredis",
- # cache-memory
- "pympler",
- # improved user search
- "pyicu",
- # omitted:
- # - test: it's useful to have this separate from dev deps in the olddeps job
- # - systemd: this is a system-based requirement
- ]
- [tool.poetry.dev-dependencies]
- # We pin development dependencies in poetry.lock so that our tests don't start
- # failing on new releases. Keeping lower bounds loose here means that dependabot
- # can bump versions without having to update the content-hash in the lockfile.
- # This helps prevents merge conflicts when running a batch of dependabot updates.
- isort = ">=5.10.1"
- black = ">=22.7.0"
- ruff = "0.1.7"
- # Type checking only works with the pydantic.v1 compat module from pydantic v2
- pydantic = "^2"
- # Typechecking
- lxml-stubs = ">=0.4.0"
- mypy = "*"
- mypy-zope = "*"
- types-bleach = ">=4.1.0"
- types-commonmark = ">=0.9.2"
- types-jsonschema = ">=3.2.0"
- types-netaddr = ">=0.8.0.6"
- types-opentracing = ">=2.4.2"
- types-Pillow = ">=8.3.4"
- types-psycopg2 = ">=2.9.9"
- types-pyOpenSSL = ">=20.0.7"
- types-PyYAML = ">=5.4.10"
- types-requests = ">=2.26.0"
- types-setuptools = ">=57.4.0"
- # Dependencies which are exclusively required by unit test code. This is
- # NOT a list of all modules that are necessary to run the unit tests.
- # Tests assume that all optional dependencies are installed.
- # parameterized<0.7.4 can create classes with names that would normally be invalid
- # identifiers. trial really does not like this when running with multiple workers.
- parameterized = ">=0.7.4"
- idna = ">=2.5"
- # The following are used by the release script
- click = ">=8.1.3"
- # GitPython was == 3.1.14; bumped to 3.1.20, the first release with type hints.
- GitPython = ">=3.1.20"
- commonmark = ">=0.9.1"
- pygithub = ">=1.55"
- # The following are executed as commands by the release script.
- twine = "*"
- # Towncrier min version comes from https://github.com/matrix-org/synapse/pull/3425. Rationale unclear.
- towncrier = ">=18.6.0rc1"
- # Used for checking the Poetry lockfile
- tomli = ">=1.2.3"
- # Dependencies for building the development documentation
- [tool.poetry.group.dev-docs]
- optional = true
- [tool.poetry.group.dev-docs.dependencies]
- sphinx = {version = "^6.1", python = "^3.8"}
- sphinx-autodoc2 = {version = ">=0.4.2,<0.6.0", python = "^3.8"}
- myst-parser = {version = "^1.0.0", python = "^3.8"}
- furo = ">=2022.12.7,<2024.0.0"
- [build-system]
- # The upper bounds here are defensive, intended to prevent situations like
- # https://github.com/matrix-org/synapse/issues/13849 and
- # https://github.com/matrix-org/synapse/issues/14079 where we see buildtime or
- # runtime errors caused by build system changes.
- # We are happy to raise these upper bounds upon request,
- # provided we check that it's safe to do so (i.e. that CI passes).
- requires = ["poetry-core>=1.1.0,<=1.8.1", "setuptools_rust>=1.3,<=1.8.1"]
- build-backend = "poetry.core.masonry.api"
- [tool.cibuildwheel]
- # Skip unsupported platforms (by us or by Rust).
- # See https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip for the list of build targets.
- # We skip:
- # - CPython 3.6 and 3.7: EOLed
- # - PyPy 3.7: we only support Python 3.8+
- # - musllinux i686: excluded to reduce number of wheels we build.
- # c.f. https://github.com/matrix-org/synapse/pull/12595#discussion_r963107677
- # - PyPy on Aarch64 and musllinux on aarch64: too slow to build.
- # c.f. https://github.com/matrix-org/synapse/pull/14259
- skip = "cp36* cp37* pp37* *-musllinux_i686 pp*aarch64 *-musllinux_aarch64"
- # We need a rust compiler
- before-all = "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y --profile minimal"
- environment= { PATH = "$PATH:$HOME/.cargo/bin" }
- # For some reason if we don't manually clean the build directory we
- # can end up polluting the next build with a .so that is for the wrong
- # Python version.
- before-build = "rm -rf {project}/build"
- build-frontend = "build"
- test-command = "python -c 'from synapse.synapse_rust import sum_as_string; print(sum_as_string(1, 2))'"
- [tool.cibuildwheel.linux]
- # Wrap the repair command to correctly rename the built cpython wheels as ABI3.
- repair-wheel-command = "./.ci/scripts/auditwheel_wrapper.py -w {dest_dir} {wheel}"
- [tool.cibuildwheel.macos]
- # Wrap the repair command to correctly rename the built cpython wheels as ABI3.
- repair-wheel-command = "./.ci/scripts/auditwheel_wrapper.py --require-archs {delocate_archs} -w {dest_dir} {wheel}"
|