Skip to content
Snippets Groups Projects
Commit 7f237800 authored by Richard van der Hoff's avatar Richard van der Hoff
Browse files

re-refactor exception heirarchy

Give CodeMessageException back its `msg` attribute, and use that to hold the
HTTP status message for HttpResponseException.
parent 170ccc9d
No related branches found
No related tags found
No related merge requests found
...@@ -55,34 +55,35 @@ class CodeMessageException(RuntimeError): ...@@ -55,34 +55,35 @@ class CodeMessageException(RuntimeError):
Attributes: Attributes:
code (int): HTTP error code code (int): HTTP error code
response_code_message (str): HTTP reason phrase. None for the default. msg (str): string describing the error
""" """
def __init__(self, code): def __init__(self, code, msg):
super(CodeMessageException, self).__init__("%d" % code) super(CodeMessageException, self).__init__("%d: %s" % (code, msg))
self.code = code self.code = code
self.response_code_message = None self.msg = msg
def error_dict(self): def error_dict(self):
return cs_error(self.msg) return cs_error(self.msg)
class SynapseError(CodeMessageException): class SynapseError(CodeMessageException):
"""A base error which can be caught for all synapse events.""" """A base exception type for matrix errors which have an errcode and error
message (as well as an HTTP status code).
Attributes:
errcode (str): Matrix error code e.g 'M_FORBIDDEN'
"""
def __init__(self, code, msg, errcode=Codes.UNKNOWN): def __init__(self, code, msg, errcode=Codes.UNKNOWN):
"""Constructs a synapse error. """Constructs a synapse error.
Args: Args:
code (int): The integer error code (an HTTP response code) code (int): The integer error code (an HTTP response code)
msg (str): The human-readable error message. msg (str): The human-readable error message.
errcode (str): The synapse error code e.g 'M_FORBIDDEN' errcode (str): The matrix error code e.g 'M_FORBIDDEN'
""" """
super(SynapseError, self).__init__(code) super(SynapseError, self).__init__(code, msg)
self.msg = msg
self.errcode = errcode self.errcode = errcode
def __str__(self):
return "%d: %s %s" % (self.code, self.errcode, self.msg)
def error_dict(self): def error_dict(self):
return cs_error( return cs_error(
self.msg, self.msg,
...@@ -106,10 +107,9 @@ class SynapseError(CodeMessageException): ...@@ -106,10 +107,9 @@ class SynapseError(CodeMessageException):
except ValueError: except ValueError:
j = {} j = {}
errcode = j.get('errcode', Codes.UNKNOWN) errcode = j.get('errcode', Codes.UNKNOWN)
errmsg = j.get('error', err.response_code_message) errmsg = j.get('error', err.msg)
res = SynapseError(err.code, errmsg, errcode) res = SynapseError(err.code, errmsg, errcode)
res.response_code_message = err.response_code_message
return res return res
...@@ -204,7 +204,6 @@ class LimitExceededError(SynapseError): ...@@ -204,7 +204,6 @@ class LimitExceededError(SynapseError):
errcode=Codes.LIMIT_EXCEEDED): errcode=Codes.LIMIT_EXCEEDED):
super(LimitExceededError, self).__init__(code, msg, errcode) super(LimitExceededError, self).__init__(code, msg, errcode)
self.retry_after_ms = retry_after_ms self.retry_after_ms = retry_after_ms
self.response_code_message = "Too Many Requests"
def error_dict(self): def error_dict(self):
return cs_error( return cs_error(
...@@ -288,6 +287,5 @@ class HttpResponseException(CodeMessageException): ...@@ -288,6 +287,5 @@ class HttpResponseException(CodeMessageException):
msg (str): reason phrase from HTTP response status line msg (str): reason phrase from HTTP response status line
response (str): body of response response (str): body of response
""" """
super(HttpResponseException, self).__init__(code) super(HttpResponseException, self).__init__(code, msg)
self.response_code_message = msg
self.response = response self.response = response
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment