parent
a821ec1147
commit
f80e53aa2d
|
@ -44,7 +44,8 @@ disable=wrong-import-position,
|
||||||
redefined-builtin,
|
redefined-builtin,
|
||||||
useless-suppression,
|
useless-suppression,
|
||||||
duplicate-code,
|
duplicate-code,
|
||||||
inconsistent-return-statements
|
inconsistent-return-statements,
|
||||||
|
useless-object-inheritance
|
||||||
# undefined-all-variable
|
# undefined-all-variable
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
2.1.1 (unreleased)
|
2.1.1 (unreleased)
|
||||||
==================
|
==================
|
||||||
|
|
||||||
- Nothing changed yet.
|
- Avoid deleting attributes of DB driver modules we import. Fixes
|
||||||
|
:issue:`206` reported by Josh Zuech.
|
||||||
|
|
||||||
|
|
||||||
2.1.0 (2018-02-07)
|
2.1.0 (2018-02-07)
|
||||||
|
|
|
@ -78,7 +78,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
import pymysql.err
|
from pymysql import err as pymysql_err
|
||||||
|
|
||||||
@implementer(IDBDriver)
|
@implementer(IDBDriver)
|
||||||
class PyMySQLDriver(AbstractDriver):
|
class PyMySQLDriver(AbstractDriver):
|
||||||
|
@ -91,9 +91,9 @@ else: # pragma: no cover
|
||||||
# It can also raise a DatabaseError, and sometimes
|
# It can also raise a DatabaseError, and sometimes
|
||||||
# an IOError doesn't get mapped to a type
|
# an IOError doesn't get mapped to a type
|
||||||
close_exceptions += (
|
close_exceptions += (
|
||||||
pymysql.err.Error,
|
pymysql_err.Error,
|
||||||
IOError,
|
IOError,
|
||||||
pymysql.err.DatabaseError
|
pymysql_err.DatabaseError
|
||||||
)
|
)
|
||||||
|
|
||||||
disconnected_exceptions += (
|
disconnected_exceptions += (
|
||||||
|
@ -101,32 +101,32 @@ else: # pragma: no cover
|
||||||
# This one has only been seen as its subclass,
|
# This one has only been seen as its subclass,
|
||||||
# InternalError, as (0, 'Socket receive buffer full'),
|
# InternalError, as (0, 'Socket receive buffer full'),
|
||||||
# which should probably be taken as disconnect
|
# which should probably be taken as disconnect
|
||||||
pymysql.err.DatabaseError,
|
pymysql_err.DatabaseError,
|
||||||
)
|
)
|
||||||
|
|
||||||
connect = staticmethod(pymysql.connect)
|
connect = staticmethod(pymysql.connect)
|
||||||
Binary = staticmethod(pymysql.Binary)
|
Binary = staticmethod(pymysql.Binary)
|
||||||
|
|
||||||
if getattr(sys, 'pypy_version_info', (9, 9, 9)) < (5, 3, 1):
|
if getattr(sys, 'pypy_version_info', (9, 9, 9)) < (5, 3, 1):
|
||||||
import pymysql.converters
|
from pymysql import converters
|
||||||
# PyPy up through 5.3.0 has a bug that raises spurious
|
# PyPy up through 5.3.0 has a bug that raises spurious
|
||||||
# MemoryErrors when run under PyMySQL >= 0.7.
|
# MemoryErrors when run under PyMySQL >= 0.7.
|
||||||
# (https://bitbucket.org/pypy/pypy/issues/2324/bytearray-replace-a-bc-raises-memoryerror)
|
# (https://bitbucket.org/pypy/pypy/issues/2324/bytearray-replace-a-bc-raises-memoryerror)
|
||||||
# (This is fixed in 5.3.1)
|
# (This is fixed in 5.3.1)
|
||||||
# Patch around it.
|
# Patch around it.
|
||||||
|
|
||||||
if hasattr(pymysql.converters, 'escape_string'):
|
if hasattr(converters, 'escape_string'):
|
||||||
orig_escape_string = pymysql.converters.escape_string
|
orig_escape_string = converters.escape_string
|
||||||
|
|
||||||
def escape_string(value, mapping=None):
|
def escape_string(value, mapping=None):
|
||||||
if isinstance(value, bytearray) and not value:
|
if isinstance(value, bytearray) and not value:
|
||||||
return value
|
return value
|
||||||
return orig_escape_string(value, mapping)
|
return orig_escape_string(value, mapping)
|
||||||
pymysql.converters.escape_string = escape_string
|
converters.escape_string = escape_string
|
||||||
|
|
||||||
del pymysql.converters
|
del converters
|
||||||
|
|
||||||
del pymysql.err
|
del pymysql_err
|
||||||
del pymysql
|
del pymysql
|
||||||
|
|
||||||
driver = PyMySQLDriver()
|
driver = PyMySQLDriver()
|
||||||
|
@ -138,7 +138,7 @@ else: # pragma: no cover
|
||||||
del driver
|
del driver
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import mysql.connector
|
import mysql.connector as mysql_connector
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -149,12 +149,12 @@ else:
|
||||||
__name__ = "MySQL Connector/Python"
|
__name__ = "MySQL Connector/Python"
|
||||||
|
|
||||||
disconnected_exceptions, close_exceptions, lock_exceptions = _standard_exceptions(
|
disconnected_exceptions, close_exceptions, lock_exceptions = _standard_exceptions(
|
||||||
mysql.connector)
|
mysql_connector)
|
||||||
use_replica_exceptions = (mysql.connector.OperationalError,)
|
use_replica_exceptions = (mysql_connector.OperationalError,)
|
||||||
Binary = staticmethod(mysql.connector.Binary)
|
Binary = staticmethod(mysql_connector.Binary)
|
||||||
|
|
||||||
have_cext = mysql.connector.HAVE_CEXT
|
have_cext = mysql_connector.HAVE_CEXT
|
||||||
_connect = staticmethod(mysql.connector.connect)
|
_connect = staticmethod(mysql_connector.connect)
|
||||||
|
|
||||||
def connect(self, *args, **kwargs):
|
def connect(self, *args, **kwargs):
|
||||||
# It defaults to the (slower) pure-python version
|
# It defaults to the (slower) pure-python version
|
||||||
|
@ -189,7 +189,7 @@ else:
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
return cursor
|
return cursor
|
||||||
|
|
||||||
del mysql.connector
|
del mysql_connector
|
||||||
|
|
||||||
driver = MySQLConnectorDriver()
|
driver = MySQLConnectorDriver()
|
||||||
driver_map[driver.__name__] = driver
|
driver_map[driver.__name__] = driver
|
||||||
|
|
Loading…
Reference in New Issue