当前位置:Gxlcms > 数据库问题 > 兼容python3的SSDB客户端

兼容python3的SSDB客户端

时间:2021-07-01 10:21:17 帮助过:7人阅读

class SSDB_Response(object): def __init__(self, code=‘‘, data_or_message=None): self.type = none self.code = code self.data = None self.message = None self.set(code, data_or_message) def set(self, code, data_or_message=None): self.code = code if code == ok: self.data = data_or_message else: if isinstance(data_or_message, list): if len(data_or_message) > 0: self.message = data_or_message[0] else: self.message = data_or_message def __repr__(self): return ((((str(self.code) + ) + str(self.message)) + ) + str(self.data)) def ok(self): return self.code == ok def not_found(self): return self.code == not_found def str_resp(self, resp): self.type = val if resp[0] == ok: if len(resp) == 2: self.set(ok, resp[1]) else: self.set(server_error, Invalid response) else: self.set(resp[0], resp[1:]) return self def str_resp(self, resp): self.type = val if resp[0] == ok: if len(resp) == 2: self.set(ok, resp[1]) else: self.set(server_error, Invalid response) else: self.set(resp[0], resp[1:]) return self def int_resp(self, resp): self.type = val if resp[0] == ok: if len(resp) == 2: try: val = int(resp[1]) self.set(ok, val) except Exception as e: self.set(server_error, Invalid response) else: self.set(server_error, Invalid response) else: pass self.set(resp[0], resp[1:]) return self def float_resp(self, resp): self.type = val if resp[0] == ok: if len(resp) == 2: try: val = float(resp[1]) self.set(ok, val) except Exception as e: self.set(server_error, Invalid response) else: self.set(server_error, Invalid response) else: self.set(resp[0], resp[1:]) return self def list_resp(self, resp): self.type = list self.set(resp[0], resp[1:]) return self def int_map_resp(self, resp): self.type = map if resp[0] == ok: if len(resp) % 2 == 1: data = {index: [], items: {}, } i = 1 while i < len(resp): k = resp[i] v = resp[(i + 1)] try: v = int(v) except Exception as e: v = - (1) data[index].append(k) data[items][k] = v i += 2 self.set(ok, data) else: self.set(server_error, Invalid response) else: self.set(resp[0], resp[1:]) return self def str_map_resp(self, resp): self.type = map if resp[0] == ok: if len(resp) % 2 == 1: data = {index: [], items: {}, } i = 1 while i < len(resp): k = resp[i] v = resp[(i + 1)] data[index].append(k) data[items][k] = v i += 2 self.set(ok, data) else: self.set(server_error, Invalid response) else: self.set(resp[0], resp[1:]) return self class SSDB(object): def __init__(self, host, port): self.recv_buf = ‘‘ self._closed = False self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect(tuple([host, port])) self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) def close(self): if not (self._closed): self.sock.close() self._closed = True def closed(self): pass return self._closed def request(self, cmd, params=None): pass if params is None: params = [] params = ([cmd] + params) self.send(params) resp = self.recv() if resp is None: return SSDB_Response(error, Unknown error) if len(resp) == 0: return SSDB_Response(disconnected, Connection closed) ret = SSDB_Response() # {{{ switch: cmd _continue_1 = False while True: if False or ((cmd) == ping) or ((cmd) == set) or ((cmd) == del) or ((cmd) == qset) or ( (cmd) == zset) or ((cmd) == hset) or ((cmd) == qpush) or ((cmd) == qpush_front) or ( (cmd) == qpush_back) or ((cmd) == zdel) or ((cmd) == hdel) or ((cmd) == multi_set) or ( (cmd) == multi_del) or ((cmd) == multi_hset) or ((cmd) == multi_hdel) or ( (cmd) == multi_zset) or ((cmd) == multi_zdel): if len(resp) > 1: return ret.int_resp(resp) else: return SSDB_Response(resp[0], None) break if False or ((cmd) == version) or ((cmd) == substr) or ((cmd) == get) or ((cmd) == getset) or ( (cmd) == hget) or ((cmd) == qfront) or ((cmd) == qback) or ((cmd) == qget): pass return ret.str_resp(resp) break if False or ((cmd) == qpop) or ((cmd) == qpop_front) or ((cmd) == qpop_back): size = 1 try: size = int(params[2]) except Exception as e: pass if size == 1: return ret.str_resp(resp) else: return ret.list_resp(resp) break if False or ((cmd) == dbsize) or ((cmd) == getbit) or ((cmd) == setbit) or ((cmd) == countbit) or ( (cmd) == bitcount) or ((cmd) == strlen) or ((cmd) == ttl) or ((cmd) == expire) or ( (cmd) == setnx) or ((cmd) == incr) or ((cmd) == decr) or ((cmd) == zincr) or ( (cmd) == zdecr) or ((cmd) == hincr) or ((cmd) == hdecr) or ((cmd) == hsize) or ( (cmd) == zsize) or ((cmd) == qsize) or ((cmd) == zget) or ((cmd) == zrank) or ( (cmd) == zrrank) or ((cmd) == zsum) or ((cmd) == zcount) or ((cmd) == zremrangebyrank) or ( (cmd) == zremrangebyscore) or ((cmd) == hclear) or ((cmd) == zclear) or ((cmd) == qclear) or ( (cmd) == qpush) or ((cmd) == qpush_front) or ((cmd) == qpush_back) or ( (cmd) == qtrim_front) or ((cmd) == qtrim_back): pass return ret.int_resp(resp) break if False or ((cmd) == zavg): pass return ret.float_resp(resp) break if False or ((cmd) == keys) or ((cmd) == rkeys) or ((cmd) == zkeys) or ((cmd) == zrkeys) or ( (cmd) == hkeys) or ((cmd) == hrkeys) or ((cmd) == list) or ((cmd) == hlist) or ( (cmd) == hrlist) or ((cmd) == zlist) or ((cmd) == zrlist): pass return ret.list_resp(resp) break if False or ((cmd) == scan) or ((cmd) == rscan) or ((cmd) == hgetall) or ((cmd) == hscan) or ( (cmd) == hrscan): pass return ret.str_map_resp(resp) break if False or ((cmd) == zscan) or ((cmd) == zrscan) or ((cmd) == zrange) or ((cmd) == zrrange) or ( (cmd) == zpop_front) or ((cmd) == zpop_back): pass return ret.int_map_resp(resp) break if False or ((cmd) == auth) or ((cmd) == exists) or ((cmd) == hexists) or ((cmd) == zexists): pass return ret.int_resp(resp) break if False or ((cmd) == multi_exists) or ((cmd) == multi_hexists) or ((cmd) == multi_zexists): pass return ret.int_map_resp(resp) break if False or ((cmd) == multi_get) or ((cmd) == multi_hget): pass return ret.str_map_resp(resp) break if False or ((cmd) == multi_hsize) or ((cmd) == multi_zsize) or ((cmd) == multi_zget): pass return ret.int_map_resp(resp) break ### default return ret.list_resp(resp) break break if _continue_1: continue # }}} switch return SSDB_Response(error, Unknown error) def send(self, data): pass ps = [] _cpy_r_0 = _cpy_l_1 = data if type(_cpy_r_0).__name__ == dict: _cpy_b_3 = True; _cpy_l_1 = _cpy_r_0.iterkeys() else: _cpy_b_3 = False; for _cpy_k_2 in _cpy_l_1: if _cpy_b_3: p = _cpy_r_0[_cpy_k_2] else: p = _cpy_k_2 pass p = str(p) ps.append(str(len(p))) ps.append(p) nl = \n s = (nl.join(ps) + \n\n) try: while True: ret = self.sock.send(s.encode()) if ret == 0: return - (1) s = s[ret:] if len(s) == 0: break except socket.error as e: return -(1) return ret def net_read(self): try: data = self.sock.recv(1024 * 8) except Exception as e: data = ‘‘ if data == ‘‘: self.close() return 0 self.recv_buf += str(data,encoding = "ascii") return len(data) def recv(self): while True: ret = self.parse() if ret is None: if self.net_read() == 0: return [] else: return ret def parse(self): pass ret = [] spos = 0 epos = 0 while True: spos = epos epos = self.recv_buf.find(\n, spos) if epos == - (1): break epos += 1 line = self.recv_buf[spos: epos] spos = epos if line.strip() == ‘‘: if len(ret) == 0: continue else: self.recv_buf = self.recv_buf[spos:] return ret try: num = int(line) except Exception as e: return [] epos = (spos + num) if epos > len(self.recv_buf): break data = self.recv_buf[spos: epos] ret.append(data) spos = epos epos = self.recv_buf.find(\n, spos) if epos == - (1): break epos += 1 return None

测试程序

from SSDB import SSDB

ssdb = SSDB(192.168.1.250, 8888)

l  =  []
l.append(person_1)
l.append(a)
l.append(1111)
l.append(b)
l.append(2222)

print(ssdb.request(multi_hset, l))

‘‘‘
print(ssdb.request(set, [test, 123]))
print(ssdb.request(get, [test]))
print(ssdb.request(incr, [test, 1]))
print(ssdb.request(decr, [test, 1]))
print(ssdb.request(scan, [a, z, 10]))
print(ssdb.request(rscan, [z, a, 10]))
print(ssdb.request(keys, [a, z, 10]))
print(ssdb.request(del, [test]))
print(ssdb.request(get, [test]))
print("\n")
print(ssdb.request(zset, [test, a, 20]))
print(ssdb.request(zget, [test, a]))
print(ssdb.request(zincr, [test, a, 20]))
print(ssdb.request(zdecr, [test, a, 20]))
print(ssdb.request(zscan, [test, a, 0, 100, 10]))
print(ssdb.request(zrscan, [test, a, 100, 0, 10]))
print(ssdb.request(zkeys, [test, a, 0, 100, 10]))
print(ssdb.request(zdel, [test, a]))
print(ssdb.request(zget, [test, a]))
print("\n")
print(ssdb.request(hset, [test, a, 20]))
print(ssdb.request(hget, [test, a]))
print(ssdb.request(hincr, [test, a, 20]))
print(ssdb.request(hdecr, [test, a, 20]))
print(ssdb.request(hscan, [test, 0, z, 10]))
print(ssdb.request(hrscan, [test, z, 0, 10]))
print(ssdb.request(hkeys, [test, 0, z, 10]))
print(ssdb.request(hdel, [test, a]))
print(ssdb.request(hget, [test, a]))
print("\n")
‘‘‘

 

兼容python3的SSDB客户端

标签:multi   message   hsi   erro   host   else   ==   enc   app   

人气教程排行