]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Merge pull request #3 from bslatkin/master
authormike bayer <mike_mp@zzzcomputing.com>
Sat, 8 Jun 2013 19:11:25 +0000 (12:11 -0700)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 8 Jun 2013 19:20:04 +0000 (15:20 -0400)
Makes gaerdbms for App Engine use local MySQL server when running in dev_appserver2

lib/sqlalchemy/dialects/mysql/gaerdbms.py

index ad0ce763857b20daaf55e6dd9602b52c0511faeb..c479e25e026df01639545236727b5b1b4177d027 100644 (file)
@@ -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