Remote dependency on distutils (#9125)

`distutils` is pretty much deprecated these days, and replaced with
`setuptools`. It's also annoying because it's you can't `pip install` it, and
it's hard to figure out which debian package we should depend on to make sure
it's there.

Since we only use it for a tiny function anyway, let's just vendor said
function into our codebase.
This commit is contained in:
Richard van der Hoff 2021-01-15 15:59:20 +00:00 committed by GitHub
parent d34c6e1279
commit 9ffac2bef1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 33 additions and 8 deletions

1
changelog.d/9125.misc Normal file
View file

@ -0,0 +1 @@
Remove dependency on `distutils`.

6
debian/changelog vendored
View file

@ -1,3 +1,9 @@
matrix-synapse-py3 (1.25.0ubuntu1) UNRELEASED; urgency=medium
* Remove dependency on `python3-distutils`.
-- Richard van der Hoff <richard@matrix.org> Fri, 15 Jan 2021 12:44:19 +0000
matrix-synapse-py3 (1.25.0) stable; urgency=medium matrix-synapse-py3 (1.25.0) stable; urgency=medium
[ Dan Callahan ] [ Dan Callahan ]

1
debian/control vendored
View file

@ -31,7 +31,6 @@ Pre-Depends: dpkg (>= 1.16.1)
Depends: Depends:
adduser, adduser,
debconf, debconf,
python3-distutils|libpython3-stdlib (<< 3.6),
${misc:Depends}, ${misc:Depends},
${shlibs:Depends}, ${shlibs:Depends},
${synapse:pydepends}, ${synapse:pydepends},

View file

@ -14,14 +14,13 @@
# limitations under the License. # limitations under the License.
import os import os
from distutils.util import strtobool
import pkg_resources import pkg_resources
from synapse.api.constants import RoomCreationPreset from synapse.api.constants import RoomCreationPreset
from synapse.config._base import Config, ConfigError from synapse.config._base import Config, ConfigError
from synapse.types import RoomAlias, UserID from synapse.types import RoomAlias, UserID
from synapse.util.stringutils import random_string_with_symbols from synapse.util.stringutils import random_string_with_symbols, strtobool
class AccountValidityConfig(Config): class AccountValidityConfig(Config):
@ -86,12 +85,12 @@ class RegistrationConfig(Config):
section = "registration" section = "registration"
def read_config(self, config, **kwargs): def read_config(self, config, **kwargs):
self.enable_registration = bool( self.enable_registration = strtobool(
strtobool(str(config.get("enable_registration", False))) str(config.get("enable_registration", False))
) )
if "disable_registration" in config: if "disable_registration" in config:
self.enable_registration = not bool( self.enable_registration = not strtobool(
strtobool(str(config["disable_registration"])) str(config["disable_registration"])
) )
self.account_validity = AccountValidityConfig( self.account_validity = AccountValidityConfig(

View file

@ -17,7 +17,6 @@
import abc import abc
import os import os
from distutils.util import strtobool
from typing import Dict, Optional, Tuple, Type from typing import Dict, Optional, Tuple, Type
from unpaddedbase64 import encode_base64 from unpaddedbase64 import encode_base64
@ -26,6 +25,7 @@ from synapse.api.room_versions import EventFormatVersions, RoomVersion, RoomVers
from synapse.types import JsonDict, RoomStreamToken from synapse.types import JsonDict, RoomStreamToken
from synapse.util.caches import intern_dict from synapse.util.caches import intern_dict
from synapse.util.frozenutils import freeze from synapse.util.frozenutils import freeze
from synapse.util.stringutils import strtobool
# Whether we should use frozen_dict in FrozenEvent. Using frozen_dicts prevents # Whether we should use frozen_dict in FrozenEvent. Using frozen_dicts prevents
# bugs where we accidentally share e.g. signature dicts. However, converting a # bugs where we accidentally share e.g. signature dicts. However, converting a
@ -34,6 +34,7 @@ from synapse.util.frozenutils import freeze
# NOTE: This is overridden by the configuration by the Synapse worker apps, but # NOTE: This is overridden by the configuration by the Synapse worker apps, but
# for the sake of tests, it is set here while it cannot be configured on the # for the sake of tests, it is set here while it cannot be configured on the
# homeserver object itself. # homeserver object itself.
USE_FROZEN_DICTS = strtobool(os.environ.get("SYNAPSE_USE_FROZEN_DICTS", "0")) USE_FROZEN_DICTS = strtobool(os.environ.get("SYNAPSE_USE_FROZEN_DICTS", "0"))

View file

@ -75,3 +75,22 @@ def shortstr(iterable: Iterable, maxitems: int = 5) -> str:
if len(items) <= maxitems: if len(items) <= maxitems:
return str(items) return str(items)
return "[" + ", ".join(repr(r) for r in items[:maxitems]) + ", ...]" return "[" + ", ".join(repr(r) for r in items[:maxitems]) + ", ...]"
def strtobool(val: str) -> bool:
"""Convert a string representation of truth to True or False
True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if
'val' is anything else.
This is lifted from distutils.util.strtobool, with the exception that it actually
returns a bool, rather than an int.
"""
val = val.lower()
if val in ("y", "yes", "t", "true", "on", "1"):
return True
elif val in ("n", "no", "f", "false", "off", "0"):
return False
else:
raise ValueError("invalid truth value %r" % (val,))