From 3187d2fa394962972e5fea0b80f53254db4e4619 Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Mon, 21 Sep 2020 17:19:48 +0200 Subject: [PATCH 1/2] Fix dependency resolving --- synapse/python_dependencies.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py index 67f019fd2237..b44f0a0ff357 100644 --- a/synapse/python_dependencies.py +++ b/synapse/python_dependencies.py @@ -16,7 +16,7 @@ # limitations under the License. import logging -from typing import List, Set +from typing import Set from pkg_resources import ( DistributionNotFound, @@ -25,8 +25,6 @@ get_provider, ) -logger = logging.getLogger(__name__) - # REQUIREMENTS is a simple list of requirement specifiers[1], and must be # installed. It is passed to setup() as install_requires in setup.py. @@ -116,6 +114,12 @@ if name not in ["systemd", "lint"]: ALL_OPTIONAL_REQUIREMENTS = set(optional_deps) | ALL_OPTIONAL_REQUIREMENTS +# We exclude lint and test as those are developer requirements +ALL_RUNTIME_REQUIREMENT_COMPONENTS = set(CONDITIONAL_REQUIREMENTS.keys()) - { + "lint", + "test", +} + def list_requirements(): return list(set(REQUIREMENTS) | ALL_OPTIONAL_REQUIREMENTS) @@ -139,12 +143,12 @@ def dependencies(self): yield "'" + i + "'" -def check_requirements(for_feature=None): +def check_requirements(for_feature=None, dev=False): deps_needed = [] errors = [] if for_feature: - reqs = CONDITIONAL_REQUIREMENTS[for_feature] + reqs = CONDITIONAL_REQUIREMENTS.get(for_feature, []) else: reqs = REQUIREMENTS @@ -171,10 +175,16 @@ def check_requirements(for_feature=None): else: errors.append("Needed %s but it was not installed" % (dependency,)) - if not for_feature: - # Check the optional dependencies are up to date. We allow them to not be + if for_feature is None: + # Check if the optional runtime dependencies are up to date. We allow them to not be # installed. - OPTS = sum(CONDITIONAL_REQUIREMENTS.values(), []) # type: List[str] + OPTS = set().union( + *( + set(reqs) + for key, reqs in CONDITIONAL_REQUIREMENTS.items() + if key in ALL_RUNTIME_REQUIREMENT_COMPONENTS or dev + ) + ) # type: Set[str] for dependency in OPTS: try: @@ -221,3 +231,5 @@ def _check_requirement(dependency_string): import sys sys.stdout.writelines(req + "\n" for req in list_requirements()) + + check_requirements(dev=True) From 4c9b5436838c2deed3a63b8a0152c64f28390050 Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Mon, 21 Sep 2020 17:23:44 +0200 Subject: [PATCH 2/2] Add new snippet, make linter happy --- changelog.d/8367.misc | 1 + synapse/python_dependencies.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 changelog.d/8367.misc diff --git a/changelog.d/8367.misc b/changelog.d/8367.misc new file mode 100644 index 000000000000..1f9de290b58d --- /dev/null +++ b/changelog.d/8367.misc @@ -0,0 +1 @@ +Fixes the way synapse distinguishes between runtime and developer dependencies. \ No newline at end of file diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py index b44f0a0ff357..7f99911e9841 100644 --- a/synapse/python_dependencies.py +++ b/synapse/python_dependencies.py @@ -25,7 +25,6 @@ get_provider, ) - # REQUIREMENTS is a simple list of requirement specifiers[1], and must be # installed. It is passed to setup() as install_requires in setup.py. #