mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-25 11:05:49 +03:00
Pin eliot to <1.8 on python 3.5.2 (#5218)
* Pin eliot to <1.8 on python 3.5.2 Fixes https://github.com/matrix-org/synapse/issues/5199 * Add support for 'markers' to python_dependencies * tell xargs not to strip quotes
This commit is contained in:
parent
6a5a70edf0
commit
bab3eddac4
3 changed files with 36 additions and 7 deletions
1
changelog.d/5218.bugfix
Normal file
1
changelog.d/5218.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix incompatibility between ACME support and Python 3.5.2.
|
|
@ -16,7 +16,12 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from pkg_resources import DistributionNotFound, VersionConflict, get_distribution
|
from pkg_resources import (
|
||||||
|
DistributionNotFound,
|
||||||
|
Requirement,
|
||||||
|
VersionConflict,
|
||||||
|
get_provider,
|
||||||
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -91,7 +96,13 @@ CONDITIONAL_REQUIREMENTS = {
|
||||||
|
|
||||||
# ACME support is required to provision TLS certificates from authorities
|
# ACME support is required to provision TLS certificates from authorities
|
||||||
# that use the protocol, such as Let's Encrypt.
|
# that use the protocol, such as Let's Encrypt.
|
||||||
"acme": ["txacme>=0.9.2"],
|
"acme": [
|
||||||
|
"txacme>=0.9.2",
|
||||||
|
|
||||||
|
# txacme depends on eliot. Eliot 1.8.0 is incompatible with
|
||||||
|
# python 3.5.2, as per https://github.com/itamarst/eliot/issues/418
|
||||||
|
'eliot<1.8.0;python_version<"3.5.3"',
|
||||||
|
],
|
||||||
|
|
||||||
"saml2": ["pysaml2>=4.5.0"],
|
"saml2": ["pysaml2>=4.5.0"],
|
||||||
"systemd": ["systemd-python>=231"],
|
"systemd": ["systemd-python>=231"],
|
||||||
|
@ -125,10 +136,10 @@ class DependencyException(Exception):
|
||||||
@property
|
@property
|
||||||
def dependencies(self):
|
def dependencies(self):
|
||||||
for i in self.args[0]:
|
for i in self.args[0]:
|
||||||
yield '"' + i + '"'
|
yield "'" + i + "'"
|
||||||
|
|
||||||
|
|
||||||
def check_requirements(for_feature=None, _get_distribution=get_distribution):
|
def check_requirements(for_feature=None):
|
||||||
deps_needed = []
|
deps_needed = []
|
||||||
errors = []
|
errors = []
|
||||||
|
|
||||||
|
@ -139,7 +150,7 @@ def check_requirements(for_feature=None, _get_distribution=get_distribution):
|
||||||
|
|
||||||
for dependency in reqs:
|
for dependency in reqs:
|
||||||
try:
|
try:
|
||||||
_get_distribution(dependency)
|
_check_requirement(dependency)
|
||||||
except VersionConflict as e:
|
except VersionConflict as e:
|
||||||
deps_needed.append(dependency)
|
deps_needed.append(dependency)
|
||||||
errors.append(
|
errors.append(
|
||||||
|
@ -157,7 +168,7 @@ def check_requirements(for_feature=None, _get_distribution=get_distribution):
|
||||||
|
|
||||||
for dependency in OPTS:
|
for dependency in OPTS:
|
||||||
try:
|
try:
|
||||||
_get_distribution(dependency)
|
_check_requirement(dependency)
|
||||||
except VersionConflict as e:
|
except VersionConflict as e:
|
||||||
deps_needed.append(dependency)
|
deps_needed.append(dependency)
|
||||||
errors.append(
|
errors.append(
|
||||||
|
@ -175,6 +186,23 @@ def check_requirements(for_feature=None, _get_distribution=get_distribution):
|
||||||
raise DependencyException(deps_needed)
|
raise DependencyException(deps_needed)
|
||||||
|
|
||||||
|
|
||||||
|
def _check_requirement(dependency_string):
|
||||||
|
"""Parses a dependency string, and checks if the specified requirement is installed
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
VersionConflict if the requirement is installed, but with the the wrong version
|
||||||
|
DistributionNotFound if nothing is found to provide the requirement
|
||||||
|
"""
|
||||||
|
req = Requirement.parse(dependency_string)
|
||||||
|
|
||||||
|
# first check if the markers specify that this requirement needs installing
|
||||||
|
if req.marker is not None and not req.marker.evaluate():
|
||||||
|
# not required for this environment
|
||||||
|
return
|
||||||
|
|
||||||
|
get_provider(req)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
2
tox.ini
2
tox.ini
|
@ -94,7 +94,7 @@ commands =
|
||||||
# Make all greater-thans equals so we test the oldest version of our direct
|
# Make all greater-thans equals so we test the oldest version of our direct
|
||||||
# dependencies, but make the pyopenssl 17.0, which can work against an
|
# dependencies, but make the pyopenssl 17.0, which can work against an
|
||||||
# OpenSSL 1.1 compiled cryptography (as older ones don't compile on Travis).
|
# OpenSSL 1.1 compiled cryptography (as older ones don't compile on Travis).
|
||||||
/bin/sh -c 'python -m synapse.python_dependencies | sed -e "s/>=/==/g" -e "s/psycopg2==2.6//" -e "s/pyopenssl==16.0.0/pyopenssl==17.0.0/" | xargs pip install'
|
/bin/sh -c 'python -m synapse.python_dependencies | sed -e "s/>=/==/g" -e "s/psycopg2==2.6//" -e "s/pyopenssl==16.0.0/pyopenssl==17.0.0/" | xargs -d"\n" pip install'
|
||||||
|
|
||||||
# Add this so that coverage will run on subprocesses
|
# Add this so that coverage will run on subprocesses
|
||||||
/bin/sh -c 'echo "import coverage; coverage.process_startup()" > {envsitepackagesdir}/../sitecustomize.py'
|
/bin/sh -c 'echo "import coverage; coverage.process_startup()" > {envsitepackagesdir}/../sitecustomize.py'
|
||||||
|
|
Loading…
Reference in a new issue