|
|
@@ -21,7 +21,7 @@ |
|
|
|
import abc |
|
|
|
import functools |
|
|
|
import logging |
|
|
|
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, TypeVar, cast |
|
|
|
from typing import TYPE_CHECKING, Callable, Dict, List, Optional, TypeVar, cast |
|
|
|
|
|
|
|
from twisted.internet.interfaces import IOpenSSLContextFactory |
|
|
|
from twisted.internet.tcp import Port |
|
|
@@ -144,10 +144,10 @@ if TYPE_CHECKING: |
|
|
|
from synapse.handlers.saml import SamlHandler |
|
|
|
|
|
|
|
|
|
|
|
T = TypeVar("T", bound=Callable[..., Any]) |
|
|
|
T = TypeVar("T") |
|
|
|
|
|
|
|
|
|
|
|
def cache_in_self(builder: T) -> T: |
|
|
|
def cache_in_self(builder: Callable[["HomeServer"], T]) -> Callable[["HomeServer"], T]: |
|
|
|
"""Wraps a function called e.g. `get_foo`, checking if `self.foo` exists and |
|
|
|
returning if so. If not, calls the given function and sets `self.foo` to it. |
|
|
|
|
|
|
@@ -166,7 +166,7 @@ def cache_in_self(builder: T) -> T: |
|
|
|
building = [False] |
|
|
|
|
|
|
|
@functools.wraps(builder) |
|
|
|
def _get(self): |
|
|
|
def _get(self: "HomeServer") -> T: |
|
|
|
try: |
|
|
|
return getattr(self, depname) |
|
|
|
except AttributeError: |
|
|
@@ -185,9 +185,7 @@ def cache_in_self(builder: T) -> T: |
|
|
|
|
|
|
|
return dep |
|
|
|
|
|
|
|
# We cast here as we need to tell mypy that `_get` has the same signature as |
|
|
|
# `builder`. |
|
|
|
return cast(T, _get) |
|
|
|
return _get |
|
|
|
|
|
|
|
|
|
|
|
class HomeServer(metaclass=abc.ABCMeta): |
|
|
|