Fixing more python 3 unicode errors

This commit is contained in:
freemansw1 2016-04-18 22:43:57 -06:00
parent 91f230b45a
commit aae0d15bc0
6 changed files with 40 additions and 27 deletions

View file

@ -69,14 +69,13 @@ class ThriftClient:
def sendRequest(self, request, uri="/thrift"): def sendRequest(self, request, uri="/thrift"):
message = self.__dsm.serializeObject(request) message = self.__dsm.serializeObject(request)
#message = message.decode('cp437')
self.__httpConn.connect() self.__httpConn.connect()
self.__httpConn.request("POST", self.__uri + uri, message) self.__httpConn.request("POST", self.__uri + uri, message)
response = self.__httpConn.getresponse() response = self.__httpConn.getresponse()
if (response.status != 200): if (response.status != 200):
raise ThriftRequestException("Unable to post request to server") raise ThriftRequestException("Unable to post request to server")
rval = self.__dsm.deserializeBytes(response.read()) rval = self.__dsm.deserializeBytes(response.read())
self.__httpConn.close() self.__httpConn.close()

View file

@ -75,6 +75,7 @@ pythonToThriftMap = {
#types.FloatType: TType.DOUBLE, #types.FloatType: TType.DOUBLE,
bool: TType.BOOL, bool: TType.BOOL,
object: TType.STRUCT, object: TType.STRUCT,
str: TType.STRING,
type(None): TType.VOID, type(None): TType.VOID,
numpy.float32: SelfDescribingBinaryProtocol.FLOAT, numpy.float32: SelfDescribingBinaryProtocol.FLOAT,
numpy.int32: TType.I32, numpy.int32: TType.I32,
@ -151,13 +152,15 @@ class ThriftSerializationContext(object):
def deserializeMessage(self): def deserializeMessage(self):
name = self.protocol.readStructBegin() name = self.protocol.readStructBegin()
name = name.replace('_', '.') #print(name)
name = name.replace(b'_', b'.')
bytes(name)
if name.isdigit(): if name.isdigit():
obj = self._deserializeType(int(name)) obj = self._deserializeType(int(name))
return obj return obj
elif name in adapters.classAdapterRegistry: elif name in adapters.classAdapterRegistry:
return adapters.classAdapterRegistry[name].deserialize(self) return adapters.classAdapterRegistry[name].deserialize(self)
elif name.find('$') > -1: elif name.find(b'$') > -1:
# it's an inner class, we're going to hope it's an enum, treat it special # it's an inner class, we're going to hope it's an enum, treat it special
fieldName, fieldType, fieldId = self.protocol.readFieldBegin() fieldName, fieldType, fieldId = self.protocol.readFieldBegin()
if fieldName != '__enumValue__': if fieldName != '__enumValue__':
@ -166,7 +169,7 @@ class ThriftSerializationContext(object):
self.protocol.readFieldEnd() self.protocol.readFieldEnd()
return obj return obj
else: else:
clz = dsObjTypes[name] clz = dsObjTypes[bytes.decode(name)]
obj = clz() obj = clz()
while self._deserializeField(name, obj): while self._deserializeField(name, obj):
@ -191,7 +194,8 @@ class ThriftSerializationContext(object):
# result = adapters.fieldAdapterRegistry[structname][fieldName].deserialize(self) # result = adapters.fieldAdapterRegistry[structname][fieldName].deserialize(self)
# else: # else:
result = self._deserializeType(fieldType) result = self._deserializeType(fieldType)
lookingFor = "set" + fieldName[0].upper() + fieldName[1:] fn_str = bytes.decode(fieldName)
lookingFor = "set" + fn_str[0].upper() + fn_str[1:]
try: try:
setMethod = getattr(obj, lookingFor) setMethod = getattr(obj, lookingFor)
@ -244,13 +248,13 @@ class ThriftSerializationContext(object):
if pyt in pythonToThriftMap: if pyt in pythonToThriftMap:
return pythonToThriftMap[pyt] return pythonToThriftMap[pyt]
elif pyt.__module__.startswith('dynamicserialize.dstypes'): elif pyt.__module__.startswith('dynamicserialize.dstypes'):
return pythonToThriftMap[types.InstanceType] return pythonToThriftMap[object]
else: else:
raise dynamicserialize.SerializationException("Don't know how to serialize object of type: " + str(pyt)) raise dynamicserialize.SerializationException("Don't know how to serialize object of type: " + str(pyt))
def serializeMessage(self, obj): def serializeMessage(self, obj):
tt = self._lookupType(obj) tt = self._lookupType(obj)
if tt == TType.STRUCT: if tt == TType.STRUCT:
fqn = obj.__module__.replace('dynamicserialize.dstypes.', '') fqn = obj.__module__.replace('dynamicserialize.dstypes.', '')
if fqn in adapters.classAdapterRegistry: if fqn in adapters.classAdapterRegistry:
@ -288,9 +292,11 @@ class ThriftSerializationContext(object):
self.protocol.writeStructEnd() self.protocol.writeStructEnd()
def _serializeField(self, fieldName, fieldType, fieldId, fieldValue): def _serializeField(self, fieldName, fieldType, fieldId, fieldValue):
#print("SERFIELD", fieldName, fieldType, fieldId, fieldValue)
self.protocol.writeFieldBegin(fieldName, fieldType, fieldId) self.protocol.writeFieldBegin(fieldName, fieldType, fieldId)
self._serializeType(fieldValue, fieldType) self._serializeType(fieldValue, fieldType)
self.protocol.writeFieldEnd() self.protocol.writeFieldEnd()
#print(self.protocol)
def _serializeType(self, fieldValue, fieldType): def _serializeType(self, fieldValue, fieldType):
if fieldType in self.typeSerializationMethod: if fieldType in self.typeSerializationMethod:

View file

@ -55,7 +55,7 @@ class Level(object):
matcher = LEVEL_NAMING_REGEX.match(str(levelString)) matcher = LEVEL_NAMING_REGEX.match(str(levelString))
if matcher is not None: if matcher is not None:
self.levelonevalue = numpy.float64(matcher.group(1)) self.levelonevalue = numpy.float64(matcher.group(1))
self.masterLevel = MasterLevel.MasterLevel(matcher.group(3)) self.masterLevel = MasterLevel(matcher.group(3))
levelTwo = matcher.group(2) levelTwo = matcher.group(2)
if levelTwo: if levelTwo:
self.leveltwovalue = numpy.float64(levelTwo) self.leveltwovalue = numpy.float64(levelTwo)

View file

@ -40,7 +40,7 @@ import calendar
import datetime import datetime
import numpy import numpy
import time import time
import io from six.moves import cStringIO as StringIO
from dynamicserialize.dstypes.java.util import Date from dynamicserialize.dstypes.java.util import Date
from dynamicserialize.dstypes.java.util import EnumSet from dynamicserialize.dstypes.java.util import EnumSet
@ -114,7 +114,7 @@ class DataTime(object):
self.levelValue = numpy.float64(levelValue) self.levelValue = numpy.float64(levelValue)
def __str__(self): def __str__(self):
buffer = io.StringIO() buffer = StringIO()
if self.refTime is not None: if self.refTime is not None:
refTimeInSecs = self.refTime.getTime() / 1000 refTimeInSecs = self.refTime.getTime() / 1000

View file

@ -204,7 +204,11 @@ class TBinaryProtocol(TProtocolBase):
def readI32(self): def readI32(self):
buff = self.trans.readAll(4) buff = self.trans.readAll(4)
val, = unpack('!i', buff) try:
val, = unpack('!i', buff)
except TypeError:
#str does not support the buffer interface
val, = unpack('!i', buff)
return val return val
def readI64(self): def readI64(self):

View file

@ -17,7 +17,7 @@
# under the License. # under the License.
# #
from io import StringIO from six import BytesIO
from struct import pack, unpack from struct import pack, unpack
from thrift.Thrift import TException from thrift.Thrift import TException
@ -52,9 +52,10 @@ class TTransportBase:
pass pass
def readAll(self, sz): def readAll(self, sz):
buff = '' buff = b''
have = 0 have = 0
while (have < sz): while (have < sz):
#print(self)
chunk = self.read(sz - have) chunk = self.read(sz - have)
have += len(chunk) have += len(chunk)
buff += chunk buff += chunk
@ -138,8 +139,8 @@ class TBufferedTransport(TTransportBase, CReadableTransport):
def __init__(self, trans, rbuf_size=DEFAULT_BUFFER): def __init__(self, trans, rbuf_size=DEFAULT_BUFFER):
self.__trans = trans self.__trans = trans
self.__wbuf = StringIO() self.__wbuf = BytesIO()
self.__rbuf = StringIO("") self.__rbuf = BytesIO("")
self.__rbuf_size = rbuf_size self.__rbuf_size = rbuf_size
def isOpen(self): def isOpen(self):
@ -156,7 +157,7 @@ class TBufferedTransport(TTransportBase, CReadableTransport):
if len(ret) != 0: if len(ret) != 0:
return ret return ret
self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size))) self.__rbuf = BytesIO(self.__trans.read(max(sz, self.__rbuf_size)))
return self.__rbuf.read(sz) return self.__rbuf.read(sz)
def write(self, buf): def write(self, buf):
@ -165,7 +166,7 @@ class TBufferedTransport(TTransportBase, CReadableTransport):
def flush(self): def flush(self):
out = self.__wbuf.getvalue() out = self.__wbuf.getvalue()
# reset wbuf before write/flush to preserve state on underlying failure # reset wbuf before write/flush to preserve state on underlying failure
self.__wbuf = StringIO() self.__wbuf = BytesIO()
self.__trans.write(out) self.__trans.write(out)
self.__trans.flush() self.__trans.flush()
@ -184,7 +185,7 @@ class TBufferedTransport(TTransportBase, CReadableTransport):
if len(retstring) < reqlen: if len(retstring) < reqlen:
retstring += self.__trans.readAll(reqlen - len(retstring)) retstring += self.__trans.readAll(reqlen - len(retstring))
self.__rbuf = StringIO(retstring) self.__rbuf = BytesIO(retstring)
return self.__rbuf return self.__rbuf
@ -203,9 +204,9 @@ class TMemoryBuffer(TTransportBase, CReadableTransport):
If value is set, this will be a transport for reading, If value is set, this will be a transport for reading,
otherwise, it is for writing""" otherwise, it is for writing"""
if value is not None: if value is not None:
self._buffer = StringIO(value) self._buffer = BytesIO(value)
else: else:
self._buffer = StringIO() self._buffer = BytesIO()
def isOpen(self): def isOpen(self):
return not self._buffer.closed return not self._buffer.closed
@ -220,7 +221,10 @@ class TMemoryBuffer(TTransportBase, CReadableTransport):
return self._buffer.read(sz) return self._buffer.read(sz)
def write(self, buf): def write(self, buf):
self._buffer.write(buf) try:
self._buffer.write(buf)
except TypeError:
self._buffer.write(buf.encode('cp437'))
def flush(self): def flush(self):
pass pass
@ -251,8 +255,8 @@ class TFramedTransport(TTransportBase, CReadableTransport):
def __init__(self, trans,): def __init__(self, trans,):
self.__trans = trans self.__trans = trans
self.__rbuf = StringIO() self.__rbuf = BytesIO()
self.__wbuf = StringIO() self.__wbuf = BytesIO()
def isOpen(self): def isOpen(self):
return self.__trans.isOpen() return self.__trans.isOpen()
@ -274,7 +278,7 @@ class TFramedTransport(TTransportBase, CReadableTransport):
def readFrame(self): def readFrame(self):
buff = self.__trans.readAll(4) buff = self.__trans.readAll(4)
sz, = unpack('!i', buff) sz, = unpack('!i', buff)
self.__rbuf = StringIO(self.__trans.readAll(sz)) self.__rbuf = BytesIO(self.__trans.readAll(sz))
def write(self, buf): def write(self, buf):
self.__wbuf.write(buf) self.__wbuf.write(buf)
@ -283,7 +287,7 @@ class TFramedTransport(TTransportBase, CReadableTransport):
wout = self.__wbuf.getvalue() wout = self.__wbuf.getvalue()
wsz = len(wout) wsz = len(wout)
# reset wbuf before write/flush to preserve state on underlying failure # reset wbuf before write/flush to preserve state on underlying failure
self.__wbuf = StringIO() self.__wbuf = BytesIO()
# N.B.: Doing this string concatenation is WAY cheaper than making # N.B.: Doing this string concatenation is WAY cheaper than making
# two separate calls to the underlying socket object. Socket writes in # two separate calls to the underlying socket object. Socket writes in
# Python turn out to be REALLY expensive, but it seems to do a pretty # Python turn out to be REALLY expensive, but it seems to do a pretty
@ -304,7 +308,7 @@ class TFramedTransport(TTransportBase, CReadableTransport):
while len(prefix) < reqlen: while len(prefix) < reqlen:
self.readFrame() self.readFrame()
prefix += self.__rbuf.getvalue() prefix += self.__rbuf.getvalue()
self.__rbuf = StringIO(prefix) self.__rbuf = BytesIO(prefix)
return self.__rbuf return self.__rbuf