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

Commit 6604b64

Browse files
Check dependencies on setup in the nicer way. (#5989)
1 parent 3505ffc commit 6604b64

File tree

4 files changed

+20
-28
lines changed

4 files changed

+20
-28
lines changed

changelog.d/5989.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Clean up dependency checking at setup.

synapse/config/metrics.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616

1717
import attr
1818

19-
from ._base import Config, ConfigError
19+
from synapse.python_dependencies import DependencyException, check_requirements
2020

21-
MISSING_SENTRY = """Missing sentry-sdk library. This is required to enable sentry
22-
integration.
23-
"""
21+
from ._base import Config, ConfigError
2422

2523

2624
@attr.s
@@ -51,9 +49,9 @@ def read_config(self, config, **kwargs):
5149
self.sentry_enabled = "sentry" in config
5250
if self.sentry_enabled:
5351
try:
54-
import sentry_sdk # noqa F401
55-
except ImportError:
56-
raise ConfigError(MISSING_SENTRY)
52+
check_requirements("sentry")
53+
except DependencyException as e:
54+
raise ConfigError(e.message)
5755

5856
self.sentry_dsn = config["sentry"].get("dsn")
5957
if not self.sentry_dsn:

synapse/config/repository.py

+7-20
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import os
1717
from collections import namedtuple
1818

19+
from synapse.python_dependencies import DependencyException, check_requirements
1920
from synapse.util.module_loader import load_module
2021

2122
from ._base import Config, ConfigError
@@ -34,17 +35,6 @@
3435
# method: %(method)s
3536
"""
3637

37-
MISSING_NETADDR = "Missing netaddr library. This is required for URL preview API."
38-
39-
MISSING_LXML = """Missing lxml library. This is required for URL preview API.
40-
41-
Install by running:
42-
pip install lxml
43-
44-
Requires libxslt1-dev system package.
45-
"""
46-
47-
4838
ThumbnailRequirement = namedtuple(
4939
"ThumbnailRequirement", ["width", "height", "method", "media_type"]
5040
)
@@ -171,16 +161,10 @@ def read_config(self, config, **kwargs):
171161
self.url_preview_enabled = config.get("url_preview_enabled", False)
172162
if self.url_preview_enabled:
173163
try:
174-
import lxml
175-
176-
lxml # To stop unused lint.
177-
except ImportError:
178-
raise ConfigError(MISSING_LXML)
164+
check_requirements("url_preview")
179165

180-
try:
181-
from netaddr import IPSet
182-
except ImportError:
183-
raise ConfigError(MISSING_NETADDR)
166+
except DependencyException as e:
167+
raise ConfigError(e.message)
184168

185169
if "url_preview_ip_range_blacklist" not in config:
186170
raise ConfigError(
@@ -189,6 +173,9 @@ def read_config(self, config, **kwargs):
189173
"to work"
190174
)
191175

176+
# netaddr is a dependency for url_preview
177+
from netaddr import IPSet
178+
192179
self.url_preview_ip_range_blacklist = IPSet(
193180
config["url_preview_ip_range_blacklist"]
194181
)

synapse/python_dependencies.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,13 @@ def check_requirements(for_feature=None):
147147
)
148148
except DistributionNotFound:
149149
deps_needed.append(dependency)
150-
errors.append("Needed %s but it was not installed" % (dependency,))
150+
if for_feature:
151+
errors.append(
152+
"Needed %s for the '%s' feature but it was not installed"
153+
% (dependency, for_feature)
154+
)
155+
else:
156+
errors.append("Needed %s but it was not installed" % (dependency,))
151157

152158
if not for_feature:
153159
# Check the optional dependencies are up to date. We allow them to not be

0 commit comments

Comments
 (0)