diff --git a/src/backend/errors.py b/src/backend/errors.py index 4ebb0068..9ec6ea7d 100644 --- a/src/backend/errors.py +++ b/src/backend/errors.py @@ -17,25 +17,27 @@ class MatrixError(Exception): http_code: int = 400 m_code: Optional[str] = None message: Optional[str] = None + content: str = "" @classmethod - def from_nio(cls, response: nio.ErrorResponse) -> "MatrixError": + async def from_nio(cls, response: nio.ErrorResponse) -> "MatrixError": """Return a `MatrixError` subclass from a nio `ErrorResponse`.""" http_code = response.transport_response.status m_code = response.status_code message = response.message + content = await response.transport_response.text() for subcls in cls.__subclasses__(): if subcls.m_code and subcls.m_code == m_code: - return subcls(http_code, m_code, message) + return subcls(http_code, m_code, message, content) # If error doesn't have a M_CODE, look for a generic http error class for subcls in cls.__subclasses__(): if not subcls.m_code and subcls.http_code == http_code: - return subcls(http_code, m_code, message) + return subcls(http_code, m_code, message, content) - return cls(http_code, m_code, message) + return cls(http_code, m_code, message, content) @dataclass diff --git a/src/backend/matrix_client.py b/src/backend/matrix_client.py index 5dfb32ab..7fd1c3c9 100644 --- a/src/backend/matrix_client.py +++ b/src/backend/matrix_client.py @@ -266,7 +266,7 @@ class MatrixClient(nio.AsyncClient): if isinstance(response, nio.ErrorResponse): try: - raise MatrixError.from_nio(response) + raise await MatrixError.from_nio(response) except MatrixInvalidAccessToken: if not self.invalid_disconnecting: self.invalid_disconnecting = True @@ -1292,7 +1292,7 @@ class MatrixClient(nio.AsyncClient): for user_id, response in zip(user_ids, responses): if isinstance(response, nio.RoomInviteError): - errors.append((user_id, MatrixError.from_nio(response))) + errors.append((user_id, await MatrixError.from_nio(response))) elif isinstance(response, Exception): errors.append((user_id, response))