diff options
author | mike bayer <mike_mp@zzzcomputing.com> | 2013-06-08 12:11:25 -0700 |
---|---|---|
committer | mike bayer <mike_mp@zzzcomputing.com> | 2013-06-08 12:11:25 -0700 |
commit | 659baac85e6ca757dd6f26db5e4095a1a3d1ee5c (patch) | |
tree | 976cd3b16b4dbdd822ef54eea1967f10f4128553 | |
parent | 5d4bb7c2133408ca976dc235be7f6abbfde11fd9 (diff) | |
parent | c8f9831a66728787d8cedf0e1d9d24bfbcb8a559 (diff) | |
download | sqlalchemy-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.py | 23 |
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 |