summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/postgresql/provision.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2020-08-14 12:07:14 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2020-08-14 17:19:40 -0400
commit3231e281efb2f36dd0dbd628efcd684175064386 (patch)
treee4a961d163c6d594e29fc09d1bd7240123d13548 /lib/sqlalchemy/dialects/postgresql/provision.py
parent743d22f3607d24243f55521a5de286f4651faca7 (diff)
downloadsqlalchemy-3231e281efb2f36dd0dbd628efcd684175064386.tar.gz
Provision on different drivers dynamically
We want TOX_POSTGRESQL and similar to be the fixed variable that is configured from CI environment. These variables should refer to database servers but individual drivers like asyncpg mysqlconnector etc. should come from local tox.ini. add a new system to generate per-driver URLs from a simple list of hostname-based URLs delivered from CI environment. Change-Id: I4267b4a70742765388c7e7c4432c1da9d9adece2
Diffstat (limited to 'lib/sqlalchemy/dialects/postgresql/provision.py')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/provision.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/provision.py b/lib/sqlalchemy/dialects/postgresql/provision.py
index 6c6dc4be6..eb82a411e 100644
--- a/lib/sqlalchemy/dialects/postgresql/provision.py
+++ b/lib/sqlalchemy/dialects/postgresql/provision.py
@@ -1,13 +1,30 @@
+import copy
import time
from ... import exc
from ... import text
from ...testing.provision import create_db
from ...testing.provision import drop_db
+from ...testing.provision import generate_driver_url
from ...testing.provision import log
from ...testing.provision import temp_table_keyword_args
+@generate_driver_url.for_db("postgresql")
+def generate_driver_url(url, driver):
+ new_url = copy.copy(url)
+ new_url.drivername = "postgresql+%s" % driver
+ if new_url.get_driver_name() == "asyncpg":
+ new_url.query = dict(new_url.query)
+ new_url.query["async_fallback"] = "true"
+ try:
+ new_url.get_dialect()
+ except exc.NoSuchModuleError:
+ return None
+ else:
+ return new_url
+
+
@create_db.for_db("postgresql")
def _pg_create_db(cfg, eng, ident):
template_db = cfg.options.postgresql_templatedb