diff --git a/changelog.d/17967.misc b/changelog.d/17967.misc
new file mode 100644
index 0000000000..60e61a6f7d
--- /dev/null
+++ b/changelog.d/17967.misc
@@ -0,0 +1 @@
+Python 3.8 EOL: compile native extensions with the 3.9 ABI and use typing hints from the standard library.
\ No newline at end of file
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index 7eebeb3b55..a8a24ee1c7 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -34,7 +34,7 @@ pyo3 = { version = "0.23.2", features = [
"macros",
"anyhow",
"abi3",
- "abi3-py38",
+ "abi3-py39",
] }
pyo3-log = "0.12.0"
pythonize = "0.23.0"
diff --git a/synapse/_scripts/synapse_port_db.py b/synapse/_scripts/synapse_port_db.py
index d8f6f8ebdc..3f67a739a0 100755
--- a/synapse/_scripts/synapse_port_db.py
+++ b/synapse/_scripts/synapse_port_db.py
@@ -42,12 +42,12 @@ from typing import (
Set,
Tuple,
Type,
+ TypedDict,
TypeVar,
cast,
)
import yaml
-from typing_extensions import TypedDict
from twisted.internet import defer, reactor as reactor_
diff --git a/synapse/api/auth/__init__.py b/synapse/api/auth/__init__.py
index d5241afe73..1b801d3ad3 100644
--- a/synapse/api/auth/__init__.py
+++ b/synapse/api/auth/__init__.py
@@ -18,9 +18,7 @@
# [This file includes modifications made by New Vector Limited]
#
#
-from typing import TYPE_CHECKING, Optional, Tuple
-
-from typing_extensions import Protocol
+from typing import TYPE_CHECKING, Optional, Protocol, Tuple
from twisted.web.server import Request
diff --git a/synapse/event_auth.py b/synapse/event_auth.py
index 3fe344ac93..5ecf493f98 100644
--- a/synapse/event_auth.py
+++ b/synapse/event_auth.py
@@ -32,6 +32,7 @@ from typing import (
Mapping,
MutableMapping,
Optional,
+ Protocol,
Set,
Tuple,
Union,
@@ -41,7 +42,6 @@ from typing import (
from canonicaljson import encode_canonical_json
from signedjson.key import decode_verify_key_bytes
from signedjson.sign import SignatureVerifyException, verify_signed_json
-from typing_extensions import Protocol
from unpaddedbase64 import decode_base64
from synapse.api.constants import (
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index 8e9d27138c..13d41592b3 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -30,6 +30,7 @@ from typing import (
Generic,
Iterable,
List,
+ Literal,
Optional,
Tuple,
Type,
@@ -39,7 +40,6 @@ from typing import (
)
import attr
-from typing_extensions import Literal
from unpaddedbase64 import encode_base64
from synapse.api.constants import EventTypes, RelationTypes
diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py
index 17cddf18a3..b95b3c629d 100644
--- a/synapse/federation/sender/__init__.py
+++ b/synapse/federation/sender/__init__.py
@@ -139,13 +139,13 @@ from typing import (
Hashable,
Iterable,
List,
+ Literal,
Optional,
Tuple,
)
import attr
from prometheus_client import Counter
-from typing_extensions import Literal
from twisted.internet import defer
diff --git a/synapse/federation/transport/server/__init__.py b/synapse/federation/transport/server/__init__.py
index 43102567db..174d02ab6b 100644
--- a/synapse/federation/transport/server/__init__.py
+++ b/synapse/federation/transport/server/__init__.py
@@ -20,9 +20,7 @@
#
#
import logging
-from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Tuple, Type
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Dict, Iterable, List, Literal, Optional, Tuple, Type
from synapse.api.errors import FederationDeniedError, SynapseError
from synapse.federation.transport.server._base import (
diff --git a/synapse/federation/transport/server/federation.py b/synapse/federation/transport/server/federation.py
index 093ba30d31..eb96ff27f9 100644
--- a/synapse/federation/transport/server/federation.py
+++ b/synapse/federation/transport/server/federation.py
@@ -24,6 +24,7 @@ from typing import (
TYPE_CHECKING,
Dict,
List,
+ Literal,
Mapping,
Optional,
Sequence,
@@ -32,8 +33,6 @@ from typing import (
Union,
)
-from typing_extensions import Literal
-
from synapse.api.constants import Direction, EduTypes
from synapse.api.errors import Codes, SynapseError
from synapse.api.room_versions import RoomVersions
diff --git a/synapse/handlers/directory.py b/synapse/handlers/directory.py
index 62ce16794f..48c7d411d5 100644
--- a/synapse/handlers/directory.py
+++ b/synapse/handlers/directory.py
@@ -21,9 +21,7 @@
import logging
import string
-from typing import TYPE_CHECKING, Iterable, List, Optional, Sequence
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Iterable, List, Literal, Optional, Sequence
from synapse.api.constants import MAX_ALIAS_LENGTH, EventTypes
from synapse.api.errors import (
diff --git a/synapse/handlers/e2e_room_keys.py b/synapse/handlers/e2e_room_keys.py
index f397911f28..623fd33f13 100644
--- a/synapse/handlers/e2e_room_keys.py
+++ b/synapse/handlers/e2e_room_keys.py
@@ -20,9 +20,7 @@
#
import logging
-from typing import TYPE_CHECKING, Dict, Optional, cast
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, Dict, Literal, Optional, cast
from synapse.api.errors import (
Codes,
diff --git a/synapse/handlers/oidc.py b/synapse/handlers/oidc.py
index 701e828081..c9109c9e79 100644
--- a/synapse/handlers/oidc.py
+++ b/synapse/handlers/oidc.py
@@ -31,6 +31,7 @@ from typing import (
List,
Optional,
Type,
+ TypedDict,
TypeVar,
Union,
)
@@ -52,7 +53,6 @@ from pymacaroons.exceptions import (
MacaroonInitException,
MacaroonInvalidSignatureException,
)
-from typing_extensions import TypedDict
from twisted.web.client import readBody
from twisted.web.http_headers import Headers
diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py
index c49db83ce7..ecfea175c7 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -23,10 +23,9 @@
"""Contains functions for registering clients."""
import logging
-from typing import TYPE_CHECKING, Iterable, List, Optional, Tuple
+from typing import TYPE_CHECKING, Iterable, List, Optional, Tuple, TypedDict
from prometheus_client import Counter
-from typing_extensions import TypedDict
from synapse import types
from synapse.api.constants import (
diff --git a/synapse/handlers/sso.py b/synapse/handlers/sso.py
index 531ed57110..9c0d665461 100644
--- a/synapse/handlers/sso.py
+++ b/synapse/handlers/sso.py
@@ -33,12 +33,12 @@ from typing import (
Mapping,
NoReturn,
Optional,
+ Protocol,
Set,
)
from urllib.parse import urlencode
import attr
-from typing_extensions import Protocol
from twisted.web.iweb import IRequest
from twisted.web.server import Request
diff --git a/synapse/http/client.py b/synapse/http/client.py
index 559b1febf0..84a510fb42 100644
--- a/synapse/http/client.py
+++ b/synapse/http/client.py
@@ -31,6 +31,7 @@ from typing import (
List,
Mapping,
Optional,
+ Protocol,
Tuple,
Union,
)
@@ -40,7 +41,6 @@ import treq
from canonicaljson import encode_canonical_json
from netaddr import AddrFormatError, IPAddress, IPSet
from prometheus_client import Counter
-from typing_extensions import Protocol
from zope.interface import implementer
from OpenSSL import SSL
diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py
index e658c68e23..f6d2536957 100644
--- a/synapse/http/matrixfederationclient.py
+++ b/synapse/http/matrixfederationclient.py
@@ -34,6 +34,7 @@ from typing import (
Dict,
Generic,
List,
+ Literal,
Optional,
TextIO,
Tuple,
@@ -48,7 +49,6 @@ import treq
from canonicaljson import encode_canonical_json
from prometheus_client import Counter
from signedjson.sign import sign_json
-from typing_extensions import Literal
from twisted.internet import defer
from twisted.internet.error import DNSLookupError
diff --git a/synapse/http/server.py b/synapse/http/server.py
index 792961a147..8bebafc18e 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -39,6 +39,7 @@ from typing import (
List,
Optional,
Pattern,
+ Protocol,
Tuple,
Union,
)
@@ -46,7 +47,6 @@ from typing import (
import attr
import jinja2
from canonicaljson import encode_canonical_json
-from typing_extensions import Protocol
from zope.interface import implementer
from twisted.internet import defer, interfaces
diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py
index 0330f1c878..ed6ab08336 100644
--- a/synapse/http/servlet.py
+++ b/synapse/http/servlet.py
@@ -28,6 +28,7 @@ from http import HTTPStatus
from typing import (
TYPE_CHECKING,
List,
+ Literal,
Mapping,
Optional,
Sequence,
@@ -37,8 +38,6 @@ from typing import (
overload,
)
-from typing_extensions import Literal
-
from twisted.web.server import Request
from synapse._pydantic_compat import (
diff --git a/synapse/logging/context.py b/synapse/logging/context.py
index 8a2dfeba13..3ef97f23c9 100644
--- a/synapse/logging/context.py
+++ b/synapse/logging/context.py
@@ -40,6 +40,7 @@ from typing import (
Any,
Awaitable,
Callable,
+ Literal,
Optional,
Tuple,
Type,
@@ -49,7 +50,7 @@ from typing import (
)
import attr
-from typing_extensions import Literal, ParamSpec
+from typing_extensions import ParamSpec
from twisted.internet import defer, threads
from twisted.python.threadpool import ThreadPool
diff --git a/synapse/logging/filter.py b/synapse/logging/filter.py
index 11c27c63f2..16de488dbc 100644
--- a/synapse/logging/filter.py
+++ b/synapse/logging/filter.py
@@ -19,8 +19,7 @@
#
#
import logging
-
-from typing_extensions import Literal
+from typing import Literal
class MetadataFilter(logging.Filter):
diff --git a/synapse/metrics/jemalloc.py b/synapse/metrics/jemalloc.py
index bd25985686..321ff58083 100644
--- a/synapse/metrics/jemalloc.py
+++ b/synapse/metrics/jemalloc.py
@@ -23,11 +23,10 @@ import ctypes
import logging
import os
import re
-from typing import Iterable, Optional, overload
+from typing import Iterable, Literal, Optional, overload
import attr
from prometheus_client import REGISTRY, Metric
-from typing_extensions import Literal
from synapse.metrics import GaugeMetricFamily
from synapse.metrics._types import Collector
diff --git a/synapse/module_api/callbacks/spamchecker_callbacks.py b/synapse/module_api/callbacks/spamchecker_callbacks.py
index 9bc572422b..a86b46ba54 100644
--- a/synapse/module_api/callbacks/spamchecker_callbacks.py
+++ b/synapse/module_api/callbacks/spamchecker_callbacks.py
@@ -29,15 +29,13 @@ from typing import (
Callable,
Collection,
List,
+ Literal,
Optional,
Tuple,
Union,
cast,
)
-# `Literal` appears with Python 3.8.
-from typing_extensions import Literal
-
import synapse
from synapse.api.errors import Codes
from synapse.logging.opentracing import trace
diff --git a/synapse/push/push_types.py b/synapse/push/push_types.py
index 201ec97219..57fa926a46 100644
--- a/synapse/push/push_types.py
+++ b/synapse/push/push_types.py
@@ -18,9 +18,7 @@
# [This file includes modifications made by New Vector Limited]
#
#
-from typing import List, Optional
-
-from typing_extensions import TypedDict
+from typing import List, Optional, TypedDict
class EmailReason(TypedDict, total=False):
diff --git a/synapse/rest/client/account.py b/synapse/rest/client/account.py
index 32fa7b4ec4..59dbad3582 100644
--- a/synapse/rest/client/account.py
+++ b/synapse/rest/client/account.py
@@ -21,11 +21,10 @@
#
import logging
import random
-from typing import TYPE_CHECKING, List, Optional, Tuple
+from typing import TYPE_CHECKING, List, Literal, Optional, Tuple
from urllib.parse import urlparse
import attr
-from typing_extensions import Literal
from twisted.web.server import Request
diff --git a/synapse/rest/client/directory.py b/synapse/rest/client/directory.py
index 98ba5c4c2a..479f489623 100644
--- a/synapse/rest/client/directory.py
+++ b/synapse/rest/client/directory.py
@@ -20,9 +20,7 @@
#
import logging
-from typing import TYPE_CHECKING, List, Optional, Tuple
-
-from typing_extensions import Literal
+from typing import TYPE_CHECKING, List, Literal, Optional, Tuple
from twisted.web.server import Request
diff --git a/synapse/rest/client/login.py b/synapse/rest/client/login.py
index 3271b02d40..72b219447b 100644
--- a/synapse/rest/client/login.py
+++ b/synapse/rest/client/login.py
@@ -30,11 +30,10 @@ from typing import (
List,
Optional,
Tuple,
+ TypedDict,
Union,
)
-from typing_extensions import TypedDict
-
from synapse.api.constants import ApprovalNoticeMedium
from synapse.api.errors import (
Codes,
diff --git a/synapse/state/v2.py b/synapse/state/v2.py
index da926ad146..d0c0a9fc96 100644
--- a/synapse/state/v2.py
+++ b/synapse/state/v2.py
@@ -29,15 +29,15 @@ from typing import (
Generator,
Iterable,
List,
+ Literal,
Optional,
+ Protocol,
Sequence,
Set,
Tuple,
overload,
)
-from typing_extensions import Literal, Protocol
-
from synapse import event_auth
from synapse.api.constants import EventTypes
from synapse.api.errors import AuthError
diff --git a/synapse/storage/database.py b/synapse/storage/database.py
index 8272e39340..a4941e58f6 100644
--- a/synapse/storage/database.py
+++ b/synapse/storage/database.py
@@ -35,6 +35,7 @@ from typing import (
Iterable,
Iterator,
List,
+ Literal,
Mapping,
Optional,
Sequence,
@@ -47,7 +48,7 @@ from typing import (
import attr
from prometheus_client import Counter, Histogram
-from typing_extensions import Concatenate, Literal, ParamSpec
+from typing_extensions import Concatenate, ParamSpec
from twisted.enterprise import adbapi
from twisted.internet.interfaces import IReactorCore
diff --git a/synapse/storage/databases/main/client_ips.py b/synapse/storage/databases/main/client_ips.py
index bf6cfcbfd9..e8c322ab5c 100644
--- a/synapse/storage/databases/main/client_ips.py
+++ b/synapse/storage/databases/main/client_ips.py
@@ -20,10 +20,19 @@
#
import logging
-from typing import TYPE_CHECKING, Dict, List, Mapping, Optional, Tuple, Union, cast
+from typing import (
+ TYPE_CHECKING,
+ Dict,
+ List,
+ Mapping,
+ Optional,
+ Tuple,
+ TypedDict,
+ Union,
+ cast,
+)
import attr
-from typing_extensions import TypedDict
from synapse.metrics.background_process_metrics import wrap_as_background_process
from synapse.storage._base import SQLBaseStore
diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py
index 8088943253..0b6d1f2b05 100644
--- a/synapse/storage/databases/main/devices.py
+++ b/synapse/storage/databases/main/devices.py
@@ -27,6 +27,7 @@ from typing import (
Dict,
Iterable,
List,
+ Literal,
Mapping,
Optional,
Set,
@@ -35,7 +36,6 @@ from typing import (
)
from canonicaljson import encode_canonical_json
-from typing_extensions import Literal
from synapse.api.constants import EduTypes
from synapse.api.errors import Codes, StoreError
diff --git a/synapse/storage/databases/main/e2e_room_keys.py b/synapse/storage/databases/main/e2e_room_keys.py
index a618a2de69..904ae5cb58 100644
--- a/synapse/storage/databases/main/e2e_room_keys.py
+++ b/synapse/storage/databases/main/e2e_room_keys.py
@@ -19,9 +19,18 @@
#
#
-from typing import TYPE_CHECKING, Dict, Iterable, List, Mapping, Optional, Tuple, cast
-
-from typing_extensions import Literal, TypedDict
+from typing import (
+ TYPE_CHECKING,
+ Dict,
+ Iterable,
+ List,
+ Literal,
+ Mapping,
+ Optional,
+ Tuple,
+ TypedDict,
+ cast,
+)
from synapse.api.errors import StoreError
from synapse.logging.opentracing import log_kv, trace
diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py
index 3bb8fccb5e..b4c7069958 100644
--- a/synapse/storage/databases/main/end_to_end_keys.py
+++ b/synapse/storage/databases/main/end_to_end_keys.py
@@ -27,6 +27,7 @@ from typing import (
Dict,
Iterable,
List,
+ Literal,
Mapping,
Optional,
Sequence,
@@ -39,7 +40,6 @@ from typing import (
import attr
from canonicaljson import encode_canonical_json
-from typing_extensions import Literal
from synapse.api.constants import DeviceKeyAlgorithms
from synapse.appservice import (
diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py
index a23aaf5096..26fbc1a483 100644
--- a/synapse/storage/databases/main/events.py
+++ b/synapse/storage/databases/main/events.py
@@ -35,12 +35,12 @@ from typing import (
Sequence,
Set,
Tuple,
+ TypedDict,
cast,
)
import attr
from prometheus_client import Counter
-from typing_extensions import TypedDict
import synapse.metrics
from synapse.api.constants import (
diff --git a/synapse/storage/databases/main/events_worker.py b/synapse/storage/databases/main/events_worker.py
index 222df8757a..82b2ad4408 100644
--- a/synapse/storage/databases/main/events_worker.py
+++ b/synapse/storage/databases/main/events_worker.py
@@ -30,6 +30,7 @@ from typing import (
Dict,
Iterable,
List,
+ Literal,
Mapping,
MutableMapping,
Optional,
@@ -41,7 +42,6 @@ from typing import (
import attr
from prometheus_client import Gauge
-from typing_extensions import Literal
from twisted.internet import defer
diff --git a/synapse/storage/databases/main/stream.py b/synapse/storage/databases/main/stream.py
index 40b0bff164..00e5208674 100644
--- a/synapse/storage/databases/main/stream.py
+++ b/synapse/storage/databases/main/stream.py
@@ -50,6 +50,7 @@ from typing import (
Dict,
Iterable,
List,
+ Literal,
Mapping,
Optional,
Protocol,
@@ -61,7 +62,7 @@ from typing import (
import attr
from immutabledict import immutabledict
-from typing_extensions import Literal, assert_never
+from typing_extensions import assert_never
from twisted.internet import defer
diff --git a/synapse/storage/databases/main/user_directory.py b/synapse/storage/databases/main/user_directory.py
index 51cffb0986..a51182de55 100644
--- a/synapse/storage/databases/main/user_directory.py
+++ b/synapse/storage/databases/main/user_directory.py
@@ -31,6 +31,7 @@ from typing import (
Sequence,
Set,
Tuple,
+ TypedDict,
cast,
)
@@ -44,8 +45,6 @@ try:
except ModuleNotFoundError:
USE_ICU = False
-from typing_extensions import TypedDict
-
from synapse.api.errors import StoreError
from synapse.util.stringutils import non_null_str_or_none
diff --git a/synapse/storage/types.py b/synapse/storage/types.py
index 74f60cc590..4329d88c9a 100644
--- a/synapse/storage/types.py
+++ b/synapse/storage/types.py
@@ -26,14 +26,13 @@ from typing import (
List,
Mapping,
Optional,
+ Protocol,
Sequence,
Tuple,
Type,
Union,
)
-from typing_extensions import Protocol
-
"""
Some very basic protocol definitions for the DB-API2 classes specified in PEP-249
"""
diff --git a/synapse/types/__init__.py b/synapse/types/__init__.py
index 3d15c04faa..e9cdd19868 100644
--- a/synapse/types/__init__.py
+++ b/synapse/types/__init__.py
@@ -40,6 +40,7 @@ from typing import (
Set,
Tuple,
Type,
+ TypedDict,
TypeVar,
Union,
overload,
@@ -49,7 +50,7 @@ import attr
from immutabledict import immutabledict
from signedjson.key import decode_verify_key_bytes
from signedjson.types import VerifyKey
-from typing_extensions import Self, TypedDict
+from typing_extensions import Self
from unpaddedbase64 import decode_base64
from zope.interface import Interface
diff --git a/synapse/util/async_helpers.py b/synapse/util/async_helpers.py
index e1eb8a4863..e596e1ed20 100644
--- a/synapse/util/async_helpers.py
+++ b/synapse/util/async_helpers.py
@@ -41,6 +41,7 @@ from typing import (
Hashable,
Iterable,
List,
+ Literal,
Optional,
Set,
Tuple,
@@ -51,7 +52,7 @@ from typing import (
)
import attr
-from typing_extensions import Concatenate, Literal, ParamSpec, Unpack
+from typing_extensions import Concatenate, ParamSpec, Unpack
from twisted.internet import defer
from twisted.internet.defer import CancelledError
diff --git a/synapse/util/caches/dictionary_cache.py b/synapse/util/caches/dictionary_cache.py
index 1e6696332f..14bd3ba3b0 100644
--- a/synapse/util/caches/dictionary_cache.py
+++ b/synapse/util/caches/dictionary_cache.py
@@ -21,10 +21,19 @@
import enum
import logging
import threading
-from typing import Dict, Generic, Iterable, Optional, Set, Tuple, TypeVar, Union
+from typing import (
+ Dict,
+ Generic,
+ Iterable,
+ Literal,
+ Optional,
+ Set,
+ Tuple,
+ TypeVar,
+ Union,
+)
import attr
-from typing_extensions import Literal
from synapse.util.caches.lrucache import LruCache
from synapse.util.caches.treecache import TreeCache
diff --git a/synapse/util/caches/expiringcache.py b/synapse/util/caches/expiringcache.py
index 8017c031ee..3198fdd2ed 100644
--- a/synapse/util/caches/expiringcache.py
+++ b/synapse/util/caches/expiringcache.py
@@ -21,10 +21,9 @@
import logging
from collections import OrderedDict
-from typing import Any, Generic, Iterable, Optional, TypeVar, Union, overload
+from typing import Any, Generic, Iterable, Literal, Optional, TypeVar, Union, overload
import attr
-from typing_extensions import Literal
from twisted.internet import defer
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py
index 481a1a621e..2e5efa3a52 100644
--- a/synapse/util/caches/lrucache.py
+++ b/synapse/util/caches/lrucache.py
@@ -34,6 +34,7 @@ from typing import (
Generic,
Iterable,
List,
+ Literal,
Optional,
Set,
Tuple,
@@ -44,8 +45,6 @@ from typing import (
overload,
)
-from typing_extensions import Literal
-
from twisted.internet import reactor
from twisted.internet.interfaces import IReactorTime
diff --git a/synapse/util/iterutils.py b/synapse/util/iterutils.py
index b73f690b88..ff6adeb716 100644
--- a/synapse/util/iterutils.py
+++ b/synapse/util/iterutils.py
@@ -30,14 +30,13 @@ from typing import (
Iterator,
List,
Mapping,
+ Protocol,
Set,
Sized,
Tuple,
TypeVar,
)
-from typing_extensions import Protocol
-
T = TypeVar("T")
S = TypeVar("S", bound="_SelfSlice")
diff --git a/synapse/util/macaroons.py b/synapse/util/macaroons.py
index 84ae226207..6fa15543ec 100644
--- a/synapse/util/macaroons.py
+++ b/synapse/util/macaroons.py
@@ -22,12 +22,11 @@
"""Utilities for manipulating macaroons"""
-from typing import Callable, Optional
+from typing import Callable, Literal, Optional
import attr
import pymacaroons
from pymacaroons.exceptions import MacaroonVerificationFailedException
-from typing_extensions import Literal
from synapse.util import Clock, stringutils
diff --git a/synapse/util/metrics.py b/synapse/util/metrics.py
index 020618598c..6a389f7a7e 100644
--- a/synapse/util/metrics.py
+++ b/synapse/util/metrics.py
@@ -22,10 +22,19 @@
import logging
from functools import wraps
from types import TracebackType
-from typing import Awaitable, Callable, Dict, Generator, Optional, Type, TypeVar
+from typing import (
+ Awaitable,
+ Callable,
+ Dict,
+ Generator,
+ Optional,
+ Protocol,
+ Type,
+ TypeVar,
+)
from prometheus_client import CollectorRegistry, Counter, Metric
-from typing_extensions import Concatenate, ParamSpec, Protocol
+from typing_extensions import Concatenate, ParamSpec
from synapse.logging.context import (
ContextResourceUsage,
diff --git a/tests/media/test_media_storage.py b/tests/media/test_media_storage.py
index f4fbc0544a..c2e0e592d7 100644
--- a/tests/media/test_media_storage.py
+++ b/tests/media/test_media_storage.py
@@ -23,14 +23,13 @@ import shutil
import tempfile
from binascii import unhexlify
from io import BytesIO
-from typing import Any, BinaryIO, ClassVar, Dict, List, Optional, Tuple, Union
+from typing import Any, BinaryIO, ClassVar, Dict, List, Literal, Optional, Tuple, Union
from unittest.mock import MagicMock, Mock, patch
from urllib import parse
import attr
from parameterized import parameterized, parameterized_class
from PIL import Image as Image
-from typing_extensions import Literal
from twisted.internet import defer
from twisted.internet.defer import Deferred
diff --git a/tests/metrics/test_metrics.py b/tests/metrics/test_metrics.py
index 80f24814e8..2e7004df3a 100644
--- a/tests/metrics/test_metrics.py
+++ b/tests/metrics/test_metrics.py
@@ -19,12 +19,11 @@
#
#
from importlib import metadata
-from typing import Dict, Tuple
+from typing import Dict, Protocol, Tuple
from unittest.mock import patch
from pkg_resources import parse_version
from prometheus_client.core import Sample
-from typing_extensions import Protocol
from synapse.app._base import _set_prometheus_client_use_created_metrics
from synapse.metrics import REGISTRY, InFlightGauge, generate_latest
diff --git a/tests/rest/client/test_login.py b/tests/rest/client/test_login.py
index 1451fd7c29..d7148917d0 100644
--- a/tests/rest/client/test_login.py
+++ b/tests/rest/client/test_login.py
@@ -27,6 +27,7 @@ from typing import (
Collection,
Dict,
List,
+ Literal,
Optional,
Tuple,
Union,
@@ -35,7 +36,6 @@ from unittest.mock import Mock
from urllib.parse import urlencode
import pymacaroons
-from typing_extensions import Literal
from twisted.test.proto_helpers import MemoryReactor
from twisted.web.resource import Resource
diff --git a/tests/rest/client/test_media.py b/tests/rest/client/test_media.py
index 4060525efe..7d7dbd342b 100644
--- a/tests/rest/client/test_media.py
+++ b/tests/rest/client/test_media.py
@@ -24,14 +24,13 @@ import json
import os
import re
import shutil
-from typing import Any, BinaryIO, Dict, List, Optional, Sequence, Tuple, Type
+from typing import Any, BinaryIO, ClassVar, Dict, List, Optional, Sequence, Tuple, Type
from unittest.mock import MagicMock, Mock, patch
from urllib import parse
from urllib.parse import quote, urlencode
from parameterized import parameterized, parameterized_class
from PIL import Image as Image
-from typing_extensions import ClassVar
from twisted.internet import defer
from twisted.internet._resolver import HostResolution
diff --git a/tests/rest/client/test_models.py b/tests/rest/client/test_models.py
index f14585ccac..75479e6235 100644
--- a/tests/rest/client/test_models.py
+++ b/tests/rest/client/test_models.py
@@ -19,8 +19,7 @@
#
#
import unittest as stdlib_unittest
-
-from typing_extensions import Literal
+from typing import Literal
from synapse._pydantic_compat import BaseModel, ValidationError
from synapse.types.rest.client import EmailRequestTokenBody
diff --git a/tests/rest/client/test_rooms.py b/tests/rest/client/test_rooms.py
index 5473a8e769..604b585150 100644
--- a/tests/rest/client/test_rooms.py
+++ b/tests/rest/client/test_rooms.py
@@ -25,12 +25,11 @@
import json
from http import HTTPStatus
-from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
+from typing import Any, Dict, Iterable, List, Literal, Optional, Tuple, Union
from unittest.mock import AsyncMock, Mock, call, patch
from urllib import parse as urlparse
from parameterized import param, parameterized
-from typing_extensions import Literal
from twisted.test.proto_helpers import MemoryReactor
diff --git a/tests/rest/client/utils.py b/tests/rest/client/utils.py
index e766630afb..53f1782d59 100644
--- a/tests/rest/client/utils.py
+++ b/tests/rest/client/utils.py
@@ -31,6 +31,7 @@ from typing import (
AnyStr,
Dict,
Iterable,
+ Literal,
Mapping,
MutableMapping,
Optional,
@@ -40,7 +41,6 @@ from typing import (
from urllib.parse import urlencode
import attr
-from typing_extensions import Literal
from twisted.test.proto_helpers import MemoryReactorClock
from twisted.web.server import Site
diff --git a/tests/unittest.py b/tests/unittest.py
index 6a32861a3e..24077d79d6 100644
--- a/tests/unittest.py
+++ b/tests/unittest.py
@@ -40,6 +40,7 @@ from typing import (
Mapping,
NoReturn,
Optional,
+ Protocol,
Tuple,
Type,
TypeVar,
@@ -50,7 +51,7 @@ from unittest.mock import Mock, patch
import canonicaljson
import signedjson.key
import unpaddedbase64
-from typing_extensions import Concatenate, ParamSpec, Protocol
+from typing_extensions import Concatenate, ParamSpec
from twisted.internet.defer import Deferred, ensureDeferred
from twisted.python.failure import Failure
diff --git a/tests/util/test_linearizer.py b/tests/util/test_linearizer.py
index 7cbb1007da..7510657b85 100644
--- a/tests/util/test_linearizer.py
+++ b/tests/util/test_linearizer.py
@@ -19,9 +19,7 @@
#
#
-from typing import Hashable, Tuple
-
-from typing_extensions import Protocol
+from typing import Hashable, Protocol, Tuple
from twisted.internet import defer, reactor
from twisted.internet.base import ReactorBase
diff --git a/tests/utils.py b/tests/utils.py
index d4aebc3069..0006bd7a8d 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -28,6 +28,7 @@ from typing import (
Callable,
Dict,
List,
+ Literal,
Optional,
Tuple,
Type,
@@ -37,7 +38,7 @@ from typing import (
)
import attr
-from typing_extensions import Literal, ParamSpec
+from typing_extensions import ParamSpec
from synapse.api.constants import EventTypes
from synapse.api.room_versions import RoomVersions
|