summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2017-03-14 12:36:50 +0000
committerRichard van der Hoff <richard@matrix.org>2017-03-14 14:15:37 +0000
commit7f237800e91c4640b79fceb645e07feb837ee4ef (patch)
treeed6e9bdc5a6a7af8927360616ee044bce7d66fd8
parentFix routing loop when fetching remote media (diff)
downloadsynapse-7f237800e91c4640b79fceb645e07feb837ee4ef.tar.xz
re-refactor exception heirarchy
Give CodeMessageException back its `msg` attribute, and use that to hold the
HTTP status message for HttpResponseException.
-rw-r--r--synapse/api/errors.py30
1 files changed, 14 insertions, 16 deletions
diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index 014bd60b9d..d5391a80cd 100644
--- a/synapse/api/errors.py
+++ b/synapse/api/errors.py
@@ -55,34 +55,35 @@ class CodeMessageException(RuntimeError):
 
     Attributes:
         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):
-        super(CodeMessageException, self).__init__("%d" % code)
+    def __init__(self, code, msg):
+        super(CodeMessageException, self).__init__("%d: %s" % (code, msg))
         self.code = code
-        self.response_code_message = None
+        self.msg = msg
 
     def error_dict(self):
         return cs_error(self.msg)
 
 
 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):
         """Constructs a synapse error.
 
         Args:
             code (int): The integer error code (an HTTP response code)
             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)
-        self.msg = msg
+        super(SynapseError, self).__init__(code, msg)
         self.errcode = errcode
 
-    def __str__(self):
-        return "%d: %s %s" % (self.code, self.errcode, self.msg)
-
     def error_dict(self):
         return cs_error(
             self.msg,
@@ -106,10 +107,9 @@ class SynapseError(CodeMessageException):
         except ValueError:
             j = {}
         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.response_code_message = err.response_code_message
         return res
 
 
@@ -204,7 +204,6 @@ class LimitExceededError(SynapseError):
                  errcode=Codes.LIMIT_EXCEEDED):
         super(LimitExceededError, self).__init__(code, msg, errcode)
         self.retry_after_ms = retry_after_ms
-        self.response_code_message = "Too Many Requests"
 
     def error_dict(self):
         return cs_error(
@@ -288,6 +287,5 @@ class HttpResponseException(CodeMessageException):
             msg (str): reason phrase from HTTP response status line
             response (str): body of response
         """
-        super(HttpResponseException, self).__init__(code)
-        self.response_code_message = msg
+        super(HttpResponseException, self).__init__(code, msg)
         self.response = response