More Python 3 fixes. Py 3 blows up when testing BLOBs.

This commit is contained in:
adustman
2012-09-08 21:22:53 +00:00
parent 8041cc6df6
commit 7676693b8f
4 changed files with 31 additions and 20 deletions

View File

@ -151,7 +151,7 @@ class Connection(_mysql.connection):
kwargs2 = kwargs.copy()
if kwargs.has_key('conv'):
if 'conv' in kwargs:
conv = kwargs['conv']
else:
conv = conversions

View File

@ -35,7 +35,17 @@ MySQL.connect().
from _mysql import string_literal, escape_sequence, escape_dict, escape, NULL
from MySQLdb.constants import FIELD_TYPE, FLAG
from MySQLdb.times import *
import types
try:
from types import IntType, LongType, FloatType, NoneType, TupleType, ListType, DictType, InstanceType, \
StringType, UnicodeType, ObjectType, BooleanType, ClassType, TypeType
except ImportError:
# Python 3
long = int
IntType, LongType, FloatType, NoneType = int, long, float, type(None)
TupleType, ListType, DictType, InstanceType = tuple, list, dict, None
StringType, UnicodeType, ObjectType, BooleanType = bytes, str, object, bool
import array
try:
@ -92,14 +102,14 @@ def Instance2Str(o, d):
"""
if d.has_key(o.__class__):
if o.__class__ in d:
return d[o.__class__](o, d)
cl = filter(lambda x,o=o:
type(x) is types.ClassType
type(x) is ClassType
and isinstance(o, x), d.keys())
if not cl and hasattr(types, 'ObjectType'):
cl = filter(lambda x,o=o:
type(x) is types.TypeType
type(x) is TypeType
and isinstance(o, x)
and d[x] is not Instance2Str,
d.keys())
@ -115,19 +125,19 @@ def array2Str(o, d):
return Thing2Literal(o.tostring(), d)
conversions = {
types.IntType: Thing2Str,
types.LongType: Long2Int,
types.FloatType: Float2Str,
types.NoneType: None2NULL,
types.TupleType: escape_sequence,
types.ListType: escape_sequence,
types.DictType: escape_dict,
types.InstanceType: Instance2Str,
IntType: Thing2Str,
LongType: Long2Int,
FloatType: Float2Str,
NoneType: None2NULL,
TupleType: escape_sequence,
ListType: escape_sequence,
DictType: escape_dict,
InstanceType: Instance2Str,
array.ArrayType: array2Str,
types.StringType: Thing2Literal, # default
types.UnicodeType: Unicode2Str,
types.ObjectType: Instance2Str,
types.BooleanType: Bool2Str,
StringType: Thing2Literal, # default
UnicodeType: Unicode2Str,
ObjectType: Instance2Str,
BooleanType: Bool2Str,
DateTimeType: DateTime2literal,
DateTimeDeltaType: DateTimeDelta2literal,
set: Set2Str,

View File

@ -24,8 +24,9 @@ class DatabaseTest(unittest.TestCase):
db = self.db_module.connect(*self.connect_args, **self.connect_kwargs)
self.connection = db
self.cursor = db.cursor()
# TODO: this needs to be re-evaluated for Python 3
self.BLOBText = ''.join([chr(i) for i in range(256)] * 100);
self.BLOBUText = ''.join([unichr(i) for i in range(16384)])
self.BLOBUText = u''.join([unichr(i) for i in range(16384)])
self.BLOBBinary = self.db_module.Binary(''.join([chr(i) for i in range(256)] * 16))
leak_test = True

View File

@ -77,8 +77,8 @@ class test_MySQLdb(capabilities.DatabaseTest):
from MySQLdb.constants import ER
try:
self.cursor.execute("describe some_non_existent_table");
except self.connection.ProgrammingError as (msg,):
self.assertTrue(msg[0] == ER.NO_SUCH_TABLE)
except self.connection.ProgrammingError as msg:
self.assertTrue(msg.args[0].args[0] == ER.NO_SUCH_TABLE)
def test_bug_3514287(self):
c = self.cursor