|
11 | 11 | from cryptoadvance.specter.helpers import is_ip_private |
12 | 12 | from cryptoadvance.specter.specter_error import SpecterError, handle_exception |
13 | 13 | from cryptoadvance.specter.rpc import BitcoinRPC |
| 14 | +from cryptoadvance.specter.rpc import RpcError as SpecterRpcError |
| 15 | +from cryptoadvance.spectrum.spectrum import RPCError as SpectrumRpcError |
14 | 16 | from cryptoadvance.specter.specter_error import BrokenCoreConnectionException |
15 | 17 |
|
16 | | -from cryptoadvance.spectrum.spectrum import RPCError, Spectrum |
| 18 | +from cryptoadvance.spectrum.spectrum import Spectrum |
17 | 19 |
|
18 | 20 | from flask import has_app_context |
19 | 21 |
|
@@ -76,11 +78,27 @@ def multi(self, calls: list, **kwargs): |
76 | 78 |
|
77 | 79 | # Spectrum uses a DB and access to it needs an app-context. In order to keep that implementation |
78 | 80 | # detail within spectrum, we're establishing a context as needed. |
79 | | - if not has_app_context() and self._app is not None: |
80 | | - with self._app.app_context(): |
81 | | - return [self.spectrum.jsonrpc(item,wallet_name=self.wallet_name) for item in payload] |
82 | | - else: |
83 | | - return [self.spectrum.jsonrpc(item,wallet_name=self.wallet_name) for item in payload] |
| 81 | + try: |
| 82 | + if not has_app_context() and self._app is not None: |
| 83 | + with self._app.app_context(): |
| 84 | + result = [self.spectrum.jsonrpc(item,wallet_name=self.wallet_name, catch_exceptions=False) for item in payload] |
| 85 | + else: |
| 86 | + result = [self.spectrum.jsonrpc(item,wallet_name=self.wallet_name, catch_exceptions=False) for item in payload] |
| 87 | + return result |
| 88 | + |
| 89 | + except ValueError as ve: |
| 90 | + mock_response = object() |
| 91 | + mock_response.status_code = 500 |
| 92 | + mock_response.text =ve |
| 93 | + raise SpecterRpcError( |
| 94 | + f"Request error: {ve}", mock_response |
| 95 | + ) |
| 96 | + except SpectrumRpcError as se: |
| 97 | + mock_response = object() |
| 98 | + mock_response.status_code = se.code |
| 99 | + mock_response.text =se.message |
| 100 | + raise SpecterRpcError(se.message, mock_response) |
| 101 | + |
84 | 102 |
|
85 | 103 | def __repr__(self) -> str: |
86 | 104 | return f"<BridgeRPC {self.spectrum}>" |
0 commit comments