mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-28 23:20:09 +03:00
WIP
This commit is contained in:
parent
99c107920d
commit
3c3c0dd419
2 changed files with 131 additions and 53 deletions
101
pyproject.toml
101
pyproject.toml
|
@ -1,38 +1,38 @@
|
||||||
[tool.towncrier]
|
[tool.towncrier]
|
||||||
package = "synapse"
|
package = "synapse"
|
||||||
filename = "CHANGES.md"
|
filename = "CHANGES.md"
|
||||||
directory = "changelog.d"
|
directory = "changelog.d"
|
||||||
issue_format = "[\\#{issue}](https://github.com/element-hq/synapse/issues/{issue})"
|
issue_format = "[\\#{issue}](https://github.com/element-hq/synapse/issues/{issue})"
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "feature"
|
directory = "feature"
|
||||||
name = "Features"
|
name = "Features"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "bugfix"
|
directory = "bugfix"
|
||||||
name = "Bugfixes"
|
name = "Bugfixes"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "docker"
|
directory = "docker"
|
||||||
name = "Updates to the Docker image"
|
name = "Updates to the Docker image"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "doc"
|
directory = "doc"
|
||||||
name = "Improved Documentation"
|
name = "Improved Documentation"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "removal"
|
directory = "removal"
|
||||||
name = "Deprecations and Removals"
|
name = "Deprecations and Removals"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[[tool.towncrier.type]]
|
[[tool.towncrier.type]]
|
||||||
directory = "misc"
|
directory = "misc"
|
||||||
name = "Internal Changes"
|
name = "Internal Changes"
|
||||||
showcontent = true
|
showcontent = true
|
||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
target-version = ['py38', 'py39', 'py310', 'py311']
|
target-version = ['py38', 'py39', 'py310', 'py311']
|
||||||
|
@ -51,11 +51,7 @@ line-length = 88
|
||||||
# flake8-bugbear compatible checks. Its error codes are described at
|
# flake8-bugbear compatible checks. Its error codes are described at
|
||||||
# https://beta.ruff.rs/docs/rules/#flake8-bugbear-b
|
# https://beta.ruff.rs/docs/rules/#flake8-bugbear-b
|
||||||
# B023: Functions defined inside a loop must not use variables redefined in the loop
|
# B023: Functions defined inside a loop must not use variables redefined in the loop
|
||||||
ignore = [
|
ignore = ["B023", "E501", "E731"]
|
||||||
"B023",
|
|
||||||
"E501",
|
|
||||||
"E731",
|
|
||||||
]
|
|
||||||
select = [
|
select = [
|
||||||
# pycodestyle
|
# pycodestyle
|
||||||
"E",
|
"E",
|
||||||
|
@ -80,7 +76,15 @@ select = [
|
||||||
|
|
||||||
[tool.isort]
|
[tool.isort]
|
||||||
line_length = 88
|
line_length = 88
|
||||||
sections = ["FUTURE", "STDLIB", "THIRDPARTY", "TWISTED", "FIRSTPARTY", "TESTS", "LOCALFOLDER"]
|
sections = [
|
||||||
|
"FUTURE",
|
||||||
|
"STDLIB",
|
||||||
|
"THIRDPARTY",
|
||||||
|
"TWISTED",
|
||||||
|
"FIRSTPARTY",
|
||||||
|
"TESTS",
|
||||||
|
"LOCALFOLDER",
|
||||||
|
]
|
||||||
default_section = "THIRDPARTY"
|
default_section = "THIRDPARTY"
|
||||||
known_first_party = ["synapse"]
|
known_first_party = ["synapse"]
|
||||||
known_tests = ["tests"]
|
known_tests = ["tests"]
|
||||||
|
@ -102,9 +106,7 @@ authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
||||||
license = "AGPL-3.0-or-later"
|
license = "AGPL-3.0-or-later"
|
||||||
readme = "README.rst"
|
readme = "README.rst"
|
||||||
repository = "https://github.com/element-hq/synapse"
|
repository = "https://github.com/element-hq/synapse"
|
||||||
packages = [
|
packages = [{ include = "synapse" }]
|
||||||
{ include = "synapse" },
|
|
||||||
]
|
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 5 - Production/Stable",
|
"Development Status :: 5 - Production/Stable",
|
||||||
"Topic :: Communications :: Chat",
|
"Topic :: Communications :: Chat",
|
||||||
|
@ -120,7 +122,7 @@ include = [
|
||||||
{ path = "INSTALL.md", format = "sdist" },
|
{ path = "INSTALL.md", format = "sdist" },
|
||||||
{ path = "mypy.ini", format = "sdist" },
|
{ path = "mypy.ini", format = "sdist" },
|
||||||
{ path = "scripts-dev", format = "sdist" },
|
{ path = "scripts-dev", format = "sdist" },
|
||||||
{ path = "synmark", format="sdist" },
|
{ path = "synmark", format = "sdist" },
|
||||||
{ path = "sytest-blacklist", format = "sdist" },
|
{ path = "sytest-blacklist", format = "sdist" },
|
||||||
{ path = "tests", format = "sdist" },
|
{ path = "tests", format = "sdist" },
|
||||||
{ path = "UPGRADE.rst", format = "sdist" },
|
{ path = "UPGRADE.rst", format = "sdist" },
|
||||||
|
@ -130,9 +132,7 @@ include = [
|
||||||
{ path = "rust/build.rs", format = "sdist" },
|
{ path = "rust/build.rs", format = "sdist" },
|
||||||
{ path = "rust/src/**", format = "sdist" },
|
{ path = "rust/src/**", format = "sdist" },
|
||||||
]
|
]
|
||||||
exclude = [
|
exclude = [{ path = "synapse/*.so", format = "sdist" }]
|
||||||
{ path = "synapse/*.so", format = "sdist"}
|
|
||||||
]
|
|
||||||
|
|
||||||
[tool.poetry.build]
|
[tool.poetry.build]
|
||||||
script = "build_rust.py"
|
script = "build_rust.py"
|
||||||
|
@ -171,9 +171,8 @@ canonicaljson = "^2.0.0"
|
||||||
signedjson = "^1.1.0"
|
signedjson = "^1.1.0"
|
||||||
# validating SSL certs for IP addresses requires service_identity 18.1.
|
# validating SSL certs for IP addresses requires service_identity 18.1.
|
||||||
service-identity = ">=18.1.0"
|
service-identity = ">=18.1.0"
|
||||||
# Twisted 18.9 introduces some logger improvements that the structured
|
# Twisted 21.2 introduces contextvar support
|
||||||
# logger utilises
|
Twisted = { extras = ["tls", "contextvars"], version = ">=21.2.0" }
|
||||||
Twisted = {extras = ["tls"], version = ">=18.9.0"}
|
|
||||||
treq = ">=15.1"
|
treq = ">=15.1"
|
||||||
# Twisted has required pyopenssl 16.0 since about Twisted 16.6.
|
# Twisted has required pyopenssl 16.0 since about Twisted 16.6.
|
||||||
pyOpenSSL = ">=16.0.0"
|
pyOpenSSL = ">=16.0.0"
|
||||||
|
@ -292,7 +291,9 @@ all = [
|
||||||
# matrix-synapse-ldap3
|
# matrix-synapse-ldap3
|
||||||
"matrix-synapse-ldap3",
|
"matrix-synapse-ldap3",
|
||||||
# postgres
|
# postgres
|
||||||
"psycopg2", "psycopg2cffi", "psycopg2cffi-compat",
|
"psycopg2",
|
||||||
|
"psycopg2cffi",
|
||||||
|
"psycopg2cffi-compat",
|
||||||
# saml2
|
# saml2
|
||||||
"pysaml2",
|
"pysaml2",
|
||||||
# oidc and jwt
|
# oidc and jwt
|
||||||
|
@ -302,9 +303,11 @@ all = [
|
||||||
# sentry
|
# sentry
|
||||||
"sentry-sdk",
|
"sentry-sdk",
|
||||||
# opentracing
|
# opentracing
|
||||||
"jaeger-client", "opentracing",
|
"jaeger-client",
|
||||||
|
"opentracing",
|
||||||
# redis
|
# redis
|
||||||
"txredisapi", "hiredis",
|
"txredisapi",
|
||||||
|
"hiredis",
|
||||||
# cache-memory
|
# cache-memory
|
||||||
"pympler",
|
"pympler",
|
||||||
# improved user search
|
# improved user search
|
||||||
|
@ -388,8 +391,8 @@ build-backend = "poetry.core.masonry.api"
|
||||||
skip = "cp36* cp37* pp37* *-musllinux_i686 pp*aarch64 *-musllinux_aarch64"
|
skip = "cp36* cp37* pp37* *-musllinux_i686 pp*aarch64 *-musllinux_aarch64"
|
||||||
|
|
||||||
# We need a rust compiler
|
# We need a rust compiler
|
||||||
before-all = "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y --profile minimal"
|
before-all = "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y --profile minimal"
|
||||||
environment= { PATH = "$PATH:$HOME/.cargo/bin" }
|
environment = { PATH = "$PATH:$HOME/.cargo/bin" }
|
||||||
|
|
||||||
# For some reason if we don't manually clean the build directory we
|
# 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
|
# can end up polluting the next build with a .so that is for the wrong
|
||||||
|
|
|
@ -33,9 +33,12 @@ import logging
|
||||||
import threading
|
import threading
|
||||||
import typing
|
import typing
|
||||||
import warnings
|
import warnings
|
||||||
|
from collections.abc import Coroutine, Generator
|
||||||
|
from contextvars import ContextVar
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import (
|
from typing import (
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
|
Any,
|
||||||
Awaitable,
|
Awaitable,
|
||||||
Callable,
|
Callable,
|
||||||
Optional,
|
Optional,
|
||||||
|
@ -657,13 +660,14 @@ class PreserveLoggingContext:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_thread_local = threading.local()
|
_CURRENT_CONTEXT_VAR: ContextVar[LoggingContextOrSentinel] = ContextVar(
|
||||||
_thread_local.current_context = SENTINEL_CONTEXT
|
"current_context", default=SENTINEL_CONTEXT
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def current_context() -> LoggingContextOrSentinel:
|
def current_context() -> LoggingContextOrSentinel:
|
||||||
"""Get the current logging context from thread local storage"""
|
"""Get the current logging context from thread local storage"""
|
||||||
return getattr(_thread_local, "current_context", SENTINEL_CONTEXT)
|
return _CURRENT_CONTEXT_VAR.get()
|
||||||
|
|
||||||
|
|
||||||
def set_current_context(context: LoggingContextOrSentinel) -> LoggingContextOrSentinel:
|
def set_current_context(context: LoggingContextOrSentinel) -> LoggingContextOrSentinel:
|
||||||
|
@ -684,7 +688,7 @@ def set_current_context(context: LoggingContextOrSentinel) -> LoggingContextOrSe
|
||||||
if current is not context:
|
if current is not context:
|
||||||
rusage = get_thread_resource_usage()
|
rusage = get_thread_resource_usage()
|
||||||
current.stop(rusage)
|
current.stop(rusage)
|
||||||
_thread_local.current_context = context
|
_CURRENT_CONTEXT_VAR.set(context)
|
||||||
context.start(rusage)
|
context.start(rusage)
|
||||||
|
|
||||||
return current
|
return current
|
||||||
|
@ -971,3 +975,74 @@ def defer_to_threadpool(
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
|
|
||||||
return make_deferred_yieldable(threads.deferToThreadPool(reactor, threadpool, g))
|
return make_deferred_yieldable(threads.deferToThreadPool(reactor, threadpool, g))
|
||||||
|
|
||||||
|
|
||||||
|
_T = TypeVar("_T")
|
||||||
|
|
||||||
|
|
||||||
|
@attr.s(frozen=True, slots=True, auto_attribs=True)
|
||||||
|
class _ResourceTracker(Generator[defer.Deferred[Any], Any, _T]):
|
||||||
|
gen: Generator[defer.Deferred[Any], Any, _T]
|
||||||
|
|
||||||
|
def send(self, val: Any) -> defer.Deferred[_T]:
|
||||||
|
try:
|
||||||
|
return self.gen.send(val)
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def throw(
|
||||||
|
self,
|
||||||
|
a: Type[BaseException],
|
||||||
|
b: object = ...,
|
||||||
|
c: Optional[TracebackType] = ...,
|
||||||
|
/,
|
||||||
|
) -> defer.Deferred[Any]: ...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def throw(
|
||||||
|
self, a: BaseException, v: None = ..., c: Optional[TracebackType] = ..., /
|
||||||
|
) -> defer.Deferred[Any]: ...
|
||||||
|
|
||||||
|
def throw(self, a: Any, b: Any = None, c: Any = None) -> defer.Deferred[Any]:
|
||||||
|
try:
|
||||||
|
return self.throw(a, b, c)
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@attr.s(frozen=True, slots=True, auto_attribs=True)
|
||||||
|
class _ResourceTracker2(Coroutine[defer.Deferred[Any], Any, _T]):
|
||||||
|
gen: Coroutine[defer.Deferred[Any], Any, _T]
|
||||||
|
|
||||||
|
def send(self, val: Any) -> defer.Deferred[_T]:
|
||||||
|
try:
|
||||||
|
return self.gen.send(val)
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def throw(
|
||||||
|
self,
|
||||||
|
a: Type[BaseException],
|
||||||
|
b: object = ...,
|
||||||
|
c: Optional[TracebackType] = ...,
|
||||||
|
/,
|
||||||
|
) -> defer.Deferred[Any]: ...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def throw(
|
||||||
|
self, a: BaseException, v: None = ..., c: Optional[TracebackType] = ..., /
|
||||||
|
) -> defer.Deferred[Any]: ...
|
||||||
|
|
||||||
|
def throw(self, a: Any, b: Any = None, c: Any = None) -> defer.Deferred[Any]:
|
||||||
|
try:
|
||||||
|
return self.throw(a, b, c)
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __await__(self) -> Generator[defer.Deferred[Any], Any, _T]:
|
||||||
|
return _ResourceTracker(self.gen.__await__())
|
||||||
|
|
||||||
|
def close(self) -> None:
|
||||||
|
return self.gen.close()
|
||||||
|
|
Loading…
Reference in a new issue