From 06a2ce55a104328573cbc641b174cb1d78ef3c83 Mon Sep 17 00:00:00 2001 From: mike bayer Date: Sat, 8 Jun 2013 12:11:25 -0700 Subject: [PATCH] Merge pull request #3 from bslatkin/master Makes gaerdbms for App Engine use local MySQL server when running in dev_appserver2 --- lib/sqlalchemy/dialects/mysql/gaerdbms.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/sqlalchemy/dialects/mysql/gaerdbms.py b/lib/sqlalchemy/dialects/mysql/gaerdbms.py index ad0ce76385..c479e25e02 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 -- 2.47.2