diff --git a/changelog.d/12703.misc b/changelog.d/12703.misc
new file mode 100644
index 0000000000..9aaa1bbaa3
--- /dev/null
+++ b/changelog.d/12703.misc
@@ -0,0 +1 @@
+Convert namespace class `Codes` into a string enum.
\ No newline at end of file
diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index cb3b7323d5..9614be6b4e 100644
--- a/synapse/api/errors.py
+++ b/synapse/api/errors.py
@@ -17,6 +17,7 @@
import logging
import typing
+from enum import Enum
from http import HTTPStatus
from typing import Any, Dict, List, Optional, Union
@@ -30,7 +31,11 @@ if typing.TYPE_CHECKING:
logger = logging.getLogger(__name__)
-class Codes:
+class Codes(str, Enum):
+ """
+ All known error codes, as an enum of strings.
+ """
+
UNRECOGNIZED = "M_UNRECOGNIZED"
UNAUTHORIZED = "M_UNAUTHORIZED"
FORBIDDEN = "M_FORBIDDEN"
@@ -265,7 +270,9 @@ class UnrecognizedRequestError(SynapseError):
"""An error indicating we don't understand the request you're trying to make"""
def __init__(
- self, msg: str = "Unrecognized request", errcode: str = Codes.UNRECOGNIZED
+ self,
+ msg: str = "Unrecognized request",
+ errcode: str = Codes.UNRECOGNIZED,
):
super().__init__(400, msg, errcode)
|