From: mike bayer Date: Sat, 8 Jun 2013 19:11:25 +0000 (-0700) Subject: Merge pull request #3 from bslatkin/master X-Git-Tag: rel_0_8_2~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06a2ce55a104328573cbc641b174cb1d78ef3c83;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Merge pull request #3 from bslatkin/master Makes gaerdbms for App Engine use local MySQL server when running in dev_appserver2 --- 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