solar/solar/dblayer/__init__.py

46 lines
1.6 KiB
Python

from solar.dblayer.model import ModelMeta
from solar.config import C
from solar.utils import parse_database_conn
_connection, _connection_details = parse_database_conn(C.solar_db)
if _connection.mode == 'sqlite':
from solar.dblayer.sql_client import SqlClient
if _connection.database == ':memory:' or _connection.database is None:
opts = {'threadlocals': True,
'autocommit': False}
_connection.database = ":memory:"
else:
opts = {'threadlocals': True,
'autocommit': False,
'pragmas': (('journal_mode', 'WAL'),
('synchronous', 'NORMAL'))}
opts.update(_connection_details.toDict())
client = SqlClient(
_connection.database,
**opts)
elif _connection.mode == 'riak':
from solar.dblayer.riak_client import RiakClient
proto = _connection_details.get('protocol', 'pbc')
opts = _connection_details.toDict()
if proto == 'pbc':
client = RiakClient(protocol=proto,
host=_connection.host,
pb_port=_connection.port,
**opts)
elif proto == 'http':
client = RiakClient(protocol=proto,
host=C.solar_db.host,
http_port=_connection.port,
**opts)
else:
raise Exception('Unknown riak protocol %s', proto)
else:
raise Exception('Unknown dblayer backend %s', C.solar_db)
ModelMeta.setup(client)
from solar.dblayer import standalone_session_wrapper
standalone_session_wrapper.create_all()