summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2013-06-08 12:11:25 -0700
committermike bayer <mike_mp@zzzcomputing.com>2013-06-08 12:11:25 -0700
commit659baac85e6ca757dd6f26db5e4095a1a3d1ee5c (patch)
tree976cd3b16b4dbdd822ef54eea1967f10f4128553
parent5d4bb7c2133408ca976dc235be7f6abbfde11fd9 (diff)
parentc8f9831a66728787d8cedf0e1d9d24bfbcb8a559 (diff)
downloadsqlalchemy-659baac85e6ca757dd6f26db5e4095a1a3d1ee5c.tar.gz
Merge pull request #3 from bslatkin/master
Makes gaerdbms for App Engine use local MySQL server when running in dev_appserver2
-rw-r--r--lib/sqlalchemy/dialects/mysql/gaerdbms.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/gaerdbms.py b/lib/sqlalchemy/dialects/mysql/gaerdbms.py
index ad0ce7638..c479e25e0 100644
--- a/lib/sqlalchemy/dialects/mysql/gaerdbms.py
+++ b/lib/sqlalchemy/dialects/mysql/gaerdbms.py
@@ -26,11 +26,17 @@ default.
"""
+import os
+
from .mysqldb import MySQLDialect_mysqldb
from ...pool import NullPool
import re
+def _is_dev_environment():
+ return os.environ.get('SERVER_SOFTWARE', '').startswith('Development/')
+
+
class MySQLDialect_gaerdbms(MySQLDialect_mysqldb):
@classmethod
@@ -43,7 +49,10 @@ class MySQLDialect_gaerdbms(MySQLDialect_mysqldb):
# see also http://stackoverflow.com/q/14224679/34549
from google.appengine.api import apiproxy_stub_map
- if apiproxy_stub_map.apiproxy.GetStub('rdbms'):
+ if _is_dev_environment():
+ from google.appengine.api import rdbms_mysqldb
+ return rdbms_mysqldb
+ elif apiproxy_stub_map.apiproxy.GetStub('rdbms'):
from google.storage.speckle.python.api import rdbms_apiproxy
return rdbms_apiproxy
else:
@@ -57,15 +66,15 @@ class MySQLDialect_gaerdbms(MySQLDialect_mysqldb):
def create_connect_args(self, url):
opts = url.translate_connect_args()
- # 'dsn' and 'instance' are because we are skipping
- # the traditional google.api.rdbms wrapper
-
- opts['dsn'] = ''
- opts['instance'] = url.query['instance']
+ if not _is_dev_environment():
+ # 'dsn' and 'instance' are because we are skipping
+ # the traditional google.api.rdbms wrapper
+ opts['dsn'] = ''
+ opts['instance'] = url.query['instance']
return [], opts
def _extract_error_code(self, exception):
- match = re.compile(r"^(\d+):|^\((\d+),").match(str(exception))
+ match = re.compile(r"^(\d+)L?:|^\((\d+)L?,").match(str(exception))
# The rdbms api will wrap then re-raise some types of errors
# making this regex return no matches.
code = match.group(1) or match.group(2) if match else None