From fcacaba9d07e403bc619888e22f3845431e3a366 Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Sat, 19 Mar 2016 12:59:16 +0100
Subject: [PATCH] Catch ucoin errors

---
 ucoinpy/api/bma/__init__.py |  2 +-
 ucoinpy/api/bma/api.py      | 15 ++++++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/ucoinpy/api/bma/__init__.py b/ucoinpy/api/bma/__init__.py
index 67f0e2d7..68763a4b 100644
--- a/ucoinpy/api/bma/__init__.py
+++ b/ucoinpy/api/bma/__init__.py
@@ -26,5 +26,5 @@ import logging
 logger = logging.getLogger("ucoin")
 
 
-from .api import API, ConnectionHandler
+from .api import API, ConnectionHandler, UcoinError
 from . import network, blockchain, tx, wot, node, ud, ws
\ No newline at end of file
diff --git a/ucoinpy/api/bma/api.py b/ucoinpy/api/bma/api.py
index ae0b8851..2afa98d6 100644
--- a/ucoinpy/api/bma/api.py
+++ b/ucoinpy/api/bma/api.py
@@ -23,6 +23,15 @@ import aiohttp, json, logging, jsonschema
 logger = logging.getLogger("ucoin")
 
 
+class UcoinError(Exception):
+    """
+    UCoin error
+    """
+    def __init__(self, data):
+        super().__init__("Error code {0} - {1}".format(data["ucode"], data["message"]))
+        self.error = data
+
+
 class ConnectionHandler(object):
     """Helper class used by other API classes to ease passing server connection information."""
 
@@ -162,7 +171,11 @@ class API(object):
         with aiohttp.Timeout(15):
             response = await session.get(self.reverse_url("http", path), params=kwargs,headers=self.headers)
             if response.status != 200:
-                raise ValueError('status code != 200 => %d (%s)' % (response.status, (await response.text())))
+                try:
+                    error_data = self.parse_error(await response.text())
+                    raise UcoinError(error_data)
+                except TypeError:
+                    raise ValueError('status code != 200 => %d (%s)' % (response.status, (await response.text())))
 
             return response
 
-- 
GitLab