Skip to content
Snippets Groups Projects
pyproject.toml 14 KiB
Newer Older
  • Learn to ignore specific revisions
  • [tool.towncrier]
        package = "synapse"
    
    Amber Brown's avatar
    Amber Brown committed
        filename = "CHANGES.md"
    
        directory = "changelog.d"
    
        issue_format = "[\\#{issue}](https://github.com/matrix-org/synapse/issues/{issue})"
    
    Amber Brown's avatar
    Amber Brown committed
    
        [[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
    
    
    Amber Brown's avatar
    Amber Brown committed
        [[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
    
    Amber Brown's avatar
    Amber Brown committed
    
    [tool.black]
    
    target-version = ['py37', 'py38', 'py39', 'py310']
    
    # 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://github.com/charliermarsh/ruff/#pycodestyle
    # for error codes. The ones we ignore are:
    #  E731: do not assign a lambda expression, use a def
    #  E501: Line too long (black enforces this for us)
    #
    # flake8-bugbear compatible checks. Its error codes are described at
    # https://github.com/charliermarsh/ruff/#flake8-bugbear
    #  B019: Use of functools.lru_cache or functools.cache on methods can lead to memory leaks
    #  B023: Functions defined inside a loop must not use variables redefined in the loop
    #  B024: Abstract base class with no abstract method.
    ignore = [
        "B019",
        "B023",
        "B024",
        "E501",
        "E731",
    ]
    select = [
        # pycodestyle checks.
        "E",
        "W",
        # pyflakes checks.
        "F",
        # flake8-bugbear checks.
        "B0",
        # flake8-comprehensions checks.
        "C4",
    ]
    
    
    [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
    
    [tool.maturin]
    manifest-path = "rust/Cargo.toml"
    
    
    [tool.poetry]
    name = "matrix-synapse"
    
    H. Shay's avatar
    H. Shay committed
    version = "1.76.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"}
    
    build = "build_rust.py"
    
    
    [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]
    
    
    # Mandatory Dependencies
    # ----------------------
    # we use the TYPE_CHECKER.redefine method added in jsonschema 3.0.0
    jsonschema = ">=3.0.0"
    # frozendict 2.1.2 is broken on Debian 10: https://github.com/Marco-Sulla/python-frozendict/issues/41
    frozendict = ">=1,!=2.1.2"
    # We require 2.1.0 or higher for type hints. Previous guard was >= 1.1.0
    unpaddedbase64 = ">=2.1.0"
    
    # We require 1.5.0 to work around an issue when running against the C implementation of
    # frozendict: https://github.com/matrix-org/python-canonicaljson/issues/36
    canonicaljson = "^1.5.0"
    
    # we use the type definitions added in signedjson 1.1.
    
    # 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"
    
    # 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 #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"
    
    # We need packaging.requirements.Requirement, added in 16.1.
    packaging = ">=16.1"
    
    # At the time of writing, we only use functions from the version `importlib.metadata`
    # which shipped in Python 3.8. This corresponds to version 1.4 of the backport.
    importlib_metadata = { version = ">=1.4", python = "<3.8" }
    
    # This is the most recent version of Pydantic with available on common distros.
    pydantic = ">=1.7.4"
    
    
    # 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"]
    
    sentry = ["sentry-sdk"]
    opentracing = ["jaeger-client", "opentracing"]
    
    # 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.
    
    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",
    
        "lxml",
        # sentry
        "sentry-sdk",
        # opentracing
        "jaeger-client", "opentracing",
    
        # redis
        "txredisapi", "hiredis",
    
        # 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 black so that our tests don't start failing on new releases.
    
    isort = ">=5.10.1"
    black = ">=22.3.0"
    
    mypy = "*"
    mypy-zope = "*"
    
    types-jsonschema = ">=3.2.0"
    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"
    
    
    # The following are used by the release script
    
    # 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 #3425. Rationale unclear.
    towncrier = ">=18.6.0rc1"
    
    [build-system]
    
    # The upper bounds here are defensive, intended to prevent situations like
    # #13849 and #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.0.0,<=1.3.2", "setuptools_rust>=1.3,<=1.5.2"]
    
    build-backend = "poetry.core.masonry.api"
    
    
    
    [tool.cibuildwheel]
    # Skip unsupported platforms (by us or by Rust).
    
    skip = "cp36* *-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}"