summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/http/client.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/synapse/http/client.py b/synapse/http/client.py
index 483f37fe03..4458855cec 100644
--- a/synapse/http/client.py
+++ b/synapse/http/client.py
@@ -323,18 +323,31 @@ class MatrixProxyClient(object):
             result = yield self.simpleHttpClient.post_json_get_json(uri, post_json)
             defer.returnValue(result)
         except CodeMessageException as cme:
-            ex = None
-            try:
-                errbody = json.loads(cme.msg)
-                errcode = errbody['errcode']
-                errtext = errbody['error']
-                ex = SynapseError(cme.code, errtext, errcode)
-            except:
-                pass
+            ex = self._tryGetMatrixError(cme.msg)
             if ex is not None:
                 raise ex
             raise cme
 
+    @defer.inlineCallbacks
+    def get_json(self, uri, args={}):
+        try:
+            result = yield self.simpleHttpClient.get_json(uri, args)
+            defer.returnValue(result)
+        except CodeMessageException as cme:
+            ex = self._tryGetMatrixError(cme.msg)
+            if ex is not None:
+                raise ex
+            raise cme
+
+    def _tryGetMatrixError(self, body):
+        try:
+            errbody = json.loads(body)
+            errcode = errbody['errcode']
+            errtext = errbody['error']
+            return SynapseError(cme.code, errtext, errcode)
+        except:
+            return None
+
 
 # XXX: FIXME: This is horribly copy-pasted from matrixfederationclient.
 # The two should be factored out.