37 lines
1017 B
Python
37 lines
1017 B
Python
|
# standard imports
|
||
|
import logging
|
||
|
|
||
|
# third party imports
|
||
|
from confini import Config
|
||
|
|
||
|
logg = logging.getLogger()
|
||
|
|
||
|
|
||
|
def dsn_from_config(config):
|
||
|
"""
|
||
|
This function builds a data source name mapping to a database from values defined in the config object.
|
||
|
:param config: A config object.
|
||
|
:type config: Config
|
||
|
:return: A database URI.
|
||
|
:rtype: str
|
||
|
"""
|
||
|
scheme = config.get('DATABASE_ENGINE')
|
||
|
if config.get('DATABASE_DRIVER') is not None:
|
||
|
scheme += '+{}'.format(config.get('DATABASE_DRIVER'))
|
||
|
|
||
|
dsn = ''
|
||
|
if config.get('DATABASE_ENGINE') == 'sqlite':
|
||
|
dsn = f'{scheme}:///{config.get("DATABASE_NAME")}'
|
||
|
|
||
|
else:
|
||
|
dsn = '{}://{}:{}@{}:{}/{}'.format(
|
||
|
scheme,
|
||
|
config.get('DATABASE_USER'),
|
||
|
config.get('DATABASE_PASSWORD'),
|
||
|
config.get('DATABASE_HOST'),
|
||
|
config.get('DATABASE_PORT'),
|
||
|
config.get('DATABASE_NAME'),
|
||
|
)
|
||
|
logg.debug('parsed dsn from config: {}'.format(dsn))
|
||
|
return dsn
|