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
|