-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathutil.py
More file actions
47 lines (37 loc) · 1.23 KB
/
util.py
File metadata and controls
47 lines (37 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from collections import defaultdict
from os import environ
from sqlalchemy import create_engine
from bonobo_sqlalchemy.logging import get_logger
logger = get_logger()
# mysql default config
# DATABASE_CONFIG_DEFAULTS = {
# 'driver': 'mysql',
# 'host': 'localhost',
# 'port': '3306',
# 'name': 'mysql',
# 'user': 'root',
# 'pass': '',
# }
DATABASE_CONFIG_DEFAULTS = {
'driver': 'postgres',
'host': 'localhost',
'port': '5432',
'name': 'postgres',
'user': 'postgres',
'pass': '',
}
DSN_TEMPLATE = '{driver}://{user}:{pass}@{host}:{port}/{name}'
def create_postgresql_engine(*, env='POSTGRES', **kwargs):
config = defaultdict(**DATABASE_CONFIG_DEFAULTS)
for var in ('driver', 'user', 'pass', 'host', 'port', 'name'):
if var in kwargs:
config[var] = kwargs.pop(var)
elif env:
env_var = '{}_{}'.format(env, var).upper()
if env_var in environ:
config[var] = environ[env_var]
dsn = DSN_TEMPLATE.format(**config)
if DATABASE_CONFIG_DEFAULTS['driver'].upper() == 'POSTGRES': # or env == 'POSTGRES'
dsn += '?client_encoding=utf8'
logger.info('Creating database engine: ' + dsn)
return create_engine(dsn, **kwargs)