|
11 | 11 | "database", 'DB', |
12 | 12 | ] |
13 | 13 |
|
14 | | -import time |
| 14 | +import time, os |
15 | 15 | try: |
16 | 16 | import datetime |
17 | 17 | except ImportError: |
@@ -1131,13 +1131,33 @@ def _process_insert_query(self, query, tablename, seqname): |
1131 | 1131 | else: |
1132 | 1132 | return query + "; SELECT %s.currval FROM dual" % seqname |
1133 | 1133 |
|
| 1134 | +def dburl2dict(url): |
| 1135 | + """ |
| 1136 | + Takes a URL to a database and parses it into an equivalent dictionary. |
| 1137 | + |
| 1138 | + >>> dburl2dict('postgres://james:day@serverfarm.example.net:5432/mygreatdb') |
| 1139 | + {'user': 'james', 'host': 'serverfarm.example.net', 'db': 'mygreatdb', 'pw': 'day', 'dbn': 'postgres'} |
| 1140 | + |
| 1141 | + """ |
| 1142 | + dbn, rest = url.split('://', 1) |
| 1143 | + user, rest = rest.split(':', 1) |
| 1144 | + pw, rest = rest.split('@', 1) |
| 1145 | + host, rest = rest.split(':', 1) |
| 1146 | + port, rest = rest.split('/', 1) |
| 1147 | + db = rest |
| 1148 | + return dict(dbn=dbn, user=user, pw=pw, db=db, host=host) |
| 1149 | + |
1134 | 1150 | _databases = {} |
1135 | 1151 | def database(dburl=None, **params): |
1136 | 1152 | """Creates appropriate database using params. |
1137 | 1153 | |
1138 | 1154 | Pooling will be enabled if DBUtils module is available. |
1139 | 1155 | Pooling can be disabled by passing pooling=False in params. |
1140 | 1156 | """ |
| 1157 | + if not dburl and not params: |
| 1158 | + dburl = os.environ['DATABASE_URL'] |
| 1159 | + if dburl: |
| 1160 | + params = dburl2dict(dburl) |
1141 | 1161 | dbn = params.pop('dbn') |
1142 | 1162 | if dbn in _databases: |
1143 | 1163 | return _databases[dbn](**params) |
|
0 commit comments