"""
+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
# 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:
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