mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Add error handling
This commit is contained in:
parent
c9a3d01112
commit
2fd0aeca9f
@ -1,11 +1,24 @@
|
|||||||
class ConnectionError(Exception):
|
from bigchaindb.common.exceptions import ConfigurationError
|
||||||
"""Raised when there is a connection error when running a query."""
|
from importlib import import_module
|
||||||
|
|
||||||
|
|
||||||
|
BACKENDS = {
|
||||||
|
'rethinkdb': 'bigchaindb.backend.rethinkdb.connection.RethinkDBConnection'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def connect(backend, host, port, dbname):
|
||||||
|
try:
|
||||||
|
module_name, _, class_name = BACKENDS[backend].rpartition('.')
|
||||||
|
Class = getattr(import_module(module_name), class_name)
|
||||||
|
except KeyError:
|
||||||
|
raise ConfigurationError('Backend `{}` is not supported. '
|
||||||
|
'BigchainDB currently supports {}'.format(backend, BACKENDS.keys()))
|
||||||
|
except (ImportError, AttributeError) as exc:
|
||||||
|
raise ConfigurationError('Error loading backend `{}`'.format(backend)) from exc
|
||||||
|
|
||||||
|
return Class(host, port, dbname)
|
||||||
|
|
||||||
|
|
||||||
class Connection:
|
class Connection:
|
||||||
|
pass
|
||||||
def run(self):
|
|
||||||
raise NotImplementedError()
|
|
||||||
|
|
||||||
def connect(self):
|
|
||||||
raise NotImplementedError()
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_get_connection_returns_the_correct_instance():
|
def test_get_connection_returns_the_correct_instance():
|
||||||
from bigchaindb.backend import connect
|
from bigchaindb.backend import connect
|
||||||
from bigchaindb.backend.connection import Connection
|
from bigchaindb.backend.connection import Connection
|
||||||
@ -13,3 +16,18 @@ def test_get_connection_returns_the_correct_instance():
|
|||||||
conn = connect(**config)
|
conn = connect(**config)
|
||||||
assert isinstance(conn, Connection)
|
assert isinstance(conn, Connection)
|
||||||
assert isinstance(conn, RethinkDBConnection)
|
assert isinstance(conn, RethinkDBConnection)
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_connection_raises_a_configuration_error(monkeypatch):
|
||||||
|
from bigchaindb.common.exceptions import ConfigurationError
|
||||||
|
from bigchaindb.backend import connect
|
||||||
|
|
||||||
|
with pytest.raises(ConfigurationError):
|
||||||
|
connect('msaccess', 'localhost', '1337', 'mydb')
|
||||||
|
|
||||||
|
with pytest.raises(ConfigurationError):
|
||||||
|
# We need to force a misconfiguration here
|
||||||
|
monkeypatch.setattr('bigchaindb.backend.connection.BACKENDS',
|
||||||
|
{'catsandra': 'bigchaindb.backend.meowmeow.Catsandra'})
|
||||||
|
|
||||||
|
connect('catsandra', 'localhost', '1337', 'mydb')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user