Some fixes

This commit is contained in:
jar3b 2016-04-22 13:20:52 +03:00
parent 7f34b0ccc4
commit eed8eac532

View File

@ -238,7 +238,7 @@ class SphinxClient:
return return
v = unpack('>L', sock.recv(4)) v = unpack('>L', sock.recv(4))
if v < 1: if not v or v[0] < 1:
sock.close() sock.close()
self._error = 'expected searchd protocol version, got %s' % v self._error = 'expected searchd protocol version, got %s' % v
return return
@ -252,7 +252,7 @@ class SphinxClient:
INTERNAL METHOD, DO NOT CALL. Gets and checks response packet from searchd server. INTERNAL METHOD, DO NOT CALL. Gets and checks response packet from searchd server.
""" """
(status, ver, length) = unpack('>2HL', sock.recv(8)) (status, ver, length) = unpack('>2HL', sock.recv(8))
response = '' response = b''
left = length left = length
while left > 0: while left > 0:
chunk = sock.recv(left) chunk = sock.recv(left)
@ -580,7 +580,7 @@ class SphinxClient:
req.append(self._rankexpr) req.append(self._rankexpr)
req.append(pack('>L', self._sort)) req.append(pack('>L', self._sort))
req.append(pack('>L', len(self._sortby))) req.append(pack('>L', len(self._sortby)))
req.append(self._sortby) req.append(self._sortby.encode())
if isinstance(query, str): if isinstance(query, str):
query = query.encode() query = query.encode()
@ -594,7 +594,7 @@ class SphinxClient:
req.append(pack('>L', w)) req.append(pack('>L', w))
assert (isinstance(index, str)) assert (isinstance(index, str))
req.append(pack('>L', len(index))) req.append(pack('>L', len(index)))
req.append(index) req.append(index.encode())
req.append(pack('>L', 1)) # id64 range marker req.append(pack('>L', 1)) # id64 range marker
req.append(pack('>Q', self._min_id)) req.append(pack('>Q', self._min_id))
req.append(pack('>Q', self._max_id)) req.append(pack('>Q', self._max_id))
@ -620,12 +620,12 @@ class SphinxClient:
# group-by, max-matches, group-sort # group-by, max-matches, group-sort
req.append(pack('>2L', self._groupfunc, len(self._groupby))) req.append(pack('>2L', self._groupfunc, len(self._groupby)))
req.append(self._groupby) req.append(self._groupby.encode())
req.append(pack('>2L', self._maxmatches, len(self._groupsort))) req.append(pack('>2L', self._maxmatches, len(self._groupsort)))
req.append(self._groupsort) req.append(self._groupsort.encode())
req.append(pack('>LLL', self._cutoff, self._retrycount, self._retrydelay)) req.append(pack('>LLL', self._cutoff, self._retrycount, self._retrydelay))
req.append(pack('>L', len(self._groupdistinct))) req.append(pack('>L', len(self._groupdistinct)))
req.append(self._groupdistinct) req.append(self._groupdistinct.encode())
# anchor point # anchor point
if len(self._anchor) == 0: if len(self._anchor) == 0:
@ -671,7 +671,7 @@ class SphinxClient:
# select-list # select-list
req.append(pack('>L', len(self._select))) req.append(pack('>L', len(self._select)))
req.append(self._select) req.append(self._select.encode())
if self._predictedtime > 0: if self._predictedtime > 0:
req.append(pack('>L', self._predictedtime)) req.append(pack('>L', self._predictedtime))
@ -684,7 +684,7 @@ class SphinxClient:
req.append(pack('>L', 0)) req.append(pack('>L', 0))
# send query, get response # send query, get response
req = ''.join(req) req = b''.join(req)
self._reqs.append(req) self._reqs.append(req)
return return
@ -702,9 +702,9 @@ class SphinxClient:
if not sock: if not sock:
return None return None
req = ''.join(self._reqs) req = b''.join(self._reqs)
length = len(req) + 8 length = len(req) + 8
req = pack('>HHLLL', SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, length, 0, len(self._reqs)) + req.encode() req = pack('>HHLLL', SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, length, 0, len(self._reqs)) + req
self._Send(sock, req) self._Send(sock, req)
response = self._GetResponse(sock, VER_COMMAND_SEARCH) response = self._GetResponse(sock, VER_COMMAND_SEARCH)
@ -749,7 +749,7 @@ class SphinxClient:
nfields -= 1 nfields -= 1
length = unpack('>L', response[p:p + 4])[0] length = unpack('>L', response[p:p + 4])[0]
p += 4 p += 4
fields.append(response[p:p + length]) fields.append(response[p:p + length].decode())
p += length p += length
result['fields'] = fields result['fields'] = fields
@ -760,7 +760,7 @@ class SphinxClient:
nattrs -= 1 nattrs -= 1
length = unpack('>L', response[p:p + 4])[0] length = unpack('>L', response[p:p + 4])[0]
p += 4 p += 4
attr = response[p:p + length] attr = response[p:p + length].decode()
p += length p += length
type_ = unpack('>L', response[p:p + 4])[0] type_ = unpack('>L', response[p:p + 4])[0]
p += 4 p += 4
@ -797,7 +797,7 @@ class SphinxClient:
p += 4 p += 4
match['attrs'][attrs[i][0]] = '' match['attrs'][attrs[i][0]] = ''
if slen > 0: if slen > 0:
match['attrs'][attrs[i][0]] = response[p:p + slen] match['attrs'][attrs[i][0]] = response[p:p + slen].decode()
p += slen - 4 p += slen - 4
elif attrs[i][1] == SPH_ATTR_FACTORS: elif attrs[i][1] == SPH_ATTR_FACTORS:
slen = unpack('>L', response[p:p + 4])[0] slen = unpack('>L', response[p:p + 4])[0]
@ -1168,7 +1168,7 @@ class SphinxClient:
self._socket = None self._socket = None
def EscapeString(self, string): def EscapeString(self, string):
return re.sub(r"([=\(\)|\-!@~\"&/\\\^\$\=\<])", r"\\\1", string) return re.sub(r'([()|!@~"&/\\^$=<-])', r"\\\1", string)
def FlushAttributes(self): def FlushAttributes(self):
sock = self._Connect() sock = self._Connect()