Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Allow dependency errors to pass through #13113

Merged
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/13113.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Raise a `DependencyError` on missing dependencies instead of a `ConfigError`.
9 changes: 2 additions & 7 deletions synapse/config/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import attr

from synapse.types import JsonDict
from synapse.util.check_dependencies import DependencyException, check_requirements
from synapse.util.check_dependencies import check_requirements

from ._base import Config, ConfigError

Expand Down Expand Up @@ -159,12 +159,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:

self.track_memory_usage = cache_config.get("track_memory_usage", False)
if self.track_memory_usage:
try:
check_requirements("cache_memory")
except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
)
check_requirements("cache_memory")

expire_caches = cache_config.get("expire_caches", True)
cache_entry_ttl = cache_config.get("cache_entry_ttl", "30m")
Expand Down
17 changes: 3 additions & 14 deletions synapse/config/jwt.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,8 @@

from synapse.types import JsonDict

from ._base import Config, ConfigError

MISSING_AUTHLIB = """Missing authlib library. This is required for jwt login.

Install by running:
pip install synapse[jwt]
"""
from ..util.check_dependencies import check_requirements
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
from ..util.check_dependencies import check_requirements
from synapse.util.check_dependencies import check_requirements

When modules aren't in the current directory we usually prefer if the import path is absolute :)

This will need linting (because github's suggestions apparently don't allow me to move the import statement a line above 🙁 )

from ._base import Config


class JWTConfig(Config):
Expand All @@ -41,13 +36,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
# that the claims exist on the JWT.
self.jwt_issuer = jwt_config.get("issuer")
self.jwt_audiences = jwt_config.get("audiences")

try:
from authlib.jose import JsonWebToken

JsonWebToken # To stop unused lint.
except ImportError:
raise ConfigError(MISSING_AUTHLIB)
check_requirements("jwt")
else:
self.jwt_enabled = False
self.jwt_secret = None
Expand Down
9 changes: 2 additions & 7 deletions synapse/config/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import attr

from synapse.types import JsonDict
from synapse.util.check_dependencies import DependencyException, check_requirements
from synapse.util.check_dependencies import check_requirements

from ._base import Config, ConfigError

Expand Down Expand Up @@ -57,12 +57,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:

self.sentry_enabled = "sentry" in config
if self.sentry_enabled:
try:
check_requirements("sentry")
except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
)
check_requirements("sentry")

self.sentry_dsn = config["sentry"].get("dsn")
if not self.sentry_dsn:
Expand Down
10 changes: 2 additions & 8 deletions synapse/config/oidc.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from synapse.util.module_loader import load_module
from synapse.util.stringutils import parse_and_validate_mxc_uri

from ..util.check_dependencies import DependencyException, check_requirements
from ..util.check_dependencies import check_requirements
from ._base import Config, ConfigError, read_file

DEFAULT_USER_MAPPING_PROVIDER = "synapse.handlers.oidc.JinjaOidcMappingProvider"
Expand All @@ -41,12 +41,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
if not self.oidc_providers:
return

try:
check_requirements("oidc")
except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
) from e
check_requirements("oidc")

# check we don't have any duplicate idp_ids now. (The SSO handler will also
# check for duplicates when the REST listeners get registered, but that happens
Expand Down Expand Up @@ -146,7 +141,6 @@ def oidc_enabled(self) -> bool:
"allOf": [OIDC_PROVIDER_CONFIG_SCHEMA, {"required": ["idp_id", "idp_name"]}]
}


# the `oidc_providers` list can either be None (as it is in the default config), or
# a list of provider configs, each of which requires an explicit ID and name.
OIDC_PROVIDER_LIST_SCHEMA = {
Expand Down
10 changes: 2 additions & 8 deletions synapse/config/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

from synapse.config.server import generate_ip_set
from synapse.types import JsonDict
from synapse.util.check_dependencies import DependencyException, check_requirements
from synapse.util.check_dependencies import check_requirements
from synapse.util.module_loader import load_module

from ._base import Config, ConfigError
Expand Down Expand Up @@ -184,13 +184,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
)
self.url_preview_enabled = config.get("url_preview_enabled", False)
if self.url_preview_enabled:
try:
check_requirements("url_preview")

except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
)
check_requirements("url_preview")

proxy_env = getproxies_environment()
if "url_preview_ip_range_blacklist" not in config:
Expand Down
9 changes: 2 additions & 7 deletions synapse/config/saml2.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

from synapse.config.sso import SsoAttributeRequirement
from synapse.types import JsonDict
from synapse.util.check_dependencies import DependencyException, check_requirements
from synapse.util.check_dependencies import check_requirements
from synapse.util.module_loader import load_module, load_python_module

from ._base import Config, ConfigError
Expand Down Expand Up @@ -76,12 +76,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
if not saml2_config.get("sp_config") and not saml2_config.get("config_path"):
return

try:
check_requirements("saml2")
except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
)
check_requirements("saml2")

self.saml2_enabled = True

Expand Down
9 changes: 2 additions & 7 deletions synapse/config/tracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from typing import Any, List, Set

from synapse.types import JsonDict
from synapse.util.check_dependencies import DependencyException, check_requirements
from synapse.util.check_dependencies import check_requirements

from ._base import Config, ConfigError

Expand All @@ -40,12 +40,7 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
if not self.opentracer_enabled:
return

try:
check_requirements("opentracing")
except DependencyException as e:
raise ConfigError(
e.message # noqa: B306, DependencyException.message is a property
)
check_requirements("opentracing")

# The tracer is enabled so sanitize the config

Expand Down