def remove_bulk(self, keys, atomic, db): if not hasattr(keys, '__iter__'): self.err.set_error(self.err.LOGIC) return 0 request_header = '' if atomic: request_header = 'atomic\t\n' request_body = '' for key in keys: request_body += '_' + quote(key) + '\t\n' if len(request_body) < 1: self.err.set_error(self.err.LOGIC) return 0 path = '/rpc/remove_bulk' if db: db = quote(db) path += '?DB=' + db self.conn.request('POST', path, body=request_header + request_body, headers=KT_HTTP_HEADER) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return int(_tsv_to_dict(body, res.getheader('Content-Type', ''))['num'])
def set_bulk(self, kv_dict, expire, atomic, db): if not isinstance(kv_dict, dict): return False if len(kv_dict) < 1: self.err.set_error(self.err.LOGIC) return False path = '/rpc/set_bulk' if db: db = quote(db) path += '?DB=' + db request_body = '' if atomic: request_body = 'atomic\t\n' for k, v in kv_dict.items(): k = quote(k) v = quote(self.pack(v)) request_body += '_' + k + '\t' + v + '\n' self.conn.request('POST', path, body=request_body, headers=KT_HTTP_HEADER) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return int(_tsv_to_dict(body, res.getheader('Content-Type', ''))['num'])
def remove_bulk(self, keys, atomic, db): if not hasattr(keys, '__iter__'): self.err.set_error(self.err.LOGIC) return 0 request_header = '' if atomic: request_header = 'atomic\t\n' request_body = '' for key in keys: request_body += '_' + quote(key) + '\t\n' if len(request_body) < 1: self.err.set_error(self.err.LOGIC) return 0 path = '/rpc/remove_bulk' if db: db = quote(db) path += '?DB=' + db self.conn.request('POST', path, body=request_header + request_body, headers=KT_HTTP_HEADER) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return int( _tsv_to_dict(body, res.getheader('Content-Type', ''))['num'])
def remove(self, key, db): if key is None: self.err.set_error(self.err.LOGIC) return False if db: key = '/%s/%s' % (quote(db.encode('UTF-8')), quote(key).encode('UTF-8')) self.conn.request('DELETE', key) res, body = self.getresponse() if res.status != 204: self.err.set_error(self.err.NOTFOUND) return False self.err.set_success() return True
def add(self, key, value, expire, db): if key is None: self.err.set_error(self.err.LOGIC) return False if db: key = '/%s/%s' % (quote(db.encode('UTF-8')), quote(key).encode('UTF-8')) value = self.pack(value) status = self._rest_put('add', key, value, expire) if status != 201: self.err.set_error(self.err.EMISC) return False self.err.set_success() return True
def get_bulk(self, keys, atomic, db): if not hasattr(keys, '__iter__'): self.err.set_error(self.err.LOGIC) return None request_header = '' if atomic: request_header = 'atomic\t\n' request_body = '' for key in keys: request_body += '_' + quote(key) + '\t\n' if len(request_body) < 1: self.err.set_error(self.err.LOGIC) return {} path = '/rpc/get_bulk' if db: db = quote(db) path += '?DB=' + db self.conn.request('POST', path, body=request_header + request_body, headers=KT_HTTP_HEADER) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return None rv = {} res_dict = _tsv_to_dict(body, res.getheader('Content-Type', '')) n = res_dict.pop('num') if n == '0': self.err.set_error(self.err.NOTFOUND) return {} for k, v in res_dict.items(): if v is not None: rv[k[1:]] = self.unpack(v) self.err.set_success() return rv
def replace(self, key, value, expire, db): if key is None: self.err.set_error(self.err.LOGIC) return False key = quote(key.encode('UTF-8')) if db: key = '/%s/%s' % (quote(db), key) value = self.pack(value) status = self._rest_put('replace', key, value, expire) if status != 201: self.err.set_error(self.err.NOTFOUND) return False self.err.set_success() return True
def get_int(self, key, db=None): if key is None: self.err.set_error(self.err.LOGIC) return False key = quote(key.encode('UTF-8')) if db: key = '/%s/%s' % (quote(db), key) self.conn.request('GET', key) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.NOTFOUND) return None self.err.set_success() return struct.unpack('>q', body)[0]
def get(self, key, db=None): if key is None: return False path = key if db: path = '/%s/%s' % (quote(db.encode('UTF-8')), quote(key).encode('UTF-8')) self.conn.request('GET', path) res, body = self.getresponse() if res.status == 404: self.err.set_error(self.err.NOTFOUND) return None if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return self.unpack(body)
def status(self, db=None): url = '/rpc/status' if db: db = quote(db) url += '?DB=' + db self.conn.request('GET', url) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return None self.err.set_success() return _tsv_to_dict(body, res.getheader('Content-Type', ''))
def clear(self, db=None): url = '/rpc/clear' if db: db = quote(db) url += '?DB=' + db self.conn.request('GET', url) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return True
def set_bulk(self, kv_dict, expire, atomic, db): if not isinstance(kv_dict, dict): return False if len(kv_dict) < 1: self.err.set_error(self.err.LOGIC) return False path = '/rpc/set_bulk' if db: db = quote(db) path += '?DB=' + db request_body = '' if atomic: request_body = 'atomic\t\n' for k, v in kv_dict.items(): k = quote(k) v = quote(self.pack(v)) request_body += '_' + k + '\t' + v + '\n' self.conn.request('POST', path, body=request_body, headers=KT_HTTP_HEADER) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return int( _tsv_to_dict(body, res.getheader('Content-Type', ''))['num'])
def vacuum(self, db): path = '/rpc/vacuum' if db: db = quote(db) path += '?DB=' + db self.conn.request('GET', path) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) self.err.set_success() return res.status == 200
def remove(self, key, db): if key is None: self.err.set_error(self.err.LOGIC) return False if db: key = '/%s/%s' % (db, key) key = quote(key.encode('UTF-8')) self.conn.request('DELETE', key) res, body = self.getresponse() if res.status != 204: self.err.set_error(self.err.NOTFOUND) return False self.err.set_success() return True
def replace(self, key, value, expire, db): if key is None: self.err.set_error(self.err.LOGIC) return False if db: key = '/%s/%s' % (db, key) key = quote(key.encode('UTF-8')) value = self.pack(value) status = self._rest_put('replace', key, value, expire) if status != 201: self.err.set_error(self.err.NOTFOUND) return False self.err.set_success() return True
def get_int(self, key, db=None): if key is None: self.err.set_error(self.err.LOGIC) return False path = key if db: path = '/%s/%s' % (db, key) path = quote(path.encode('UTF-8')) self.conn.request('GET', path) res, body = self.getresponse() if res.status != 200: self.err.set_error(self.err.NOTFOUND) return None self.err.set_success() return struct.unpack('>q', body)[0]
def jump(self, key=None, db=None): path = '/rpc/cur_jump' if db: db = quote(db) path += '?DB=' + db request_dict = {} request_dict['CUR'] = self.cursor_id if key: request_dict['key'] = key request_body = _dict_to_tsv(request_dict) self.protocol_handler.conn.request('POST', path, body=request_body, headers=KT_HTTP_HEADER) res, body = self.protocol_handler.getresponse() if res.status != 200: self.err.set_error(self.err.EMISC) return False self.err.set_success() return True
#!/usr/bin/env python import sys, os sys.path.append( os.path.dirname(sys.argv[0])+"/.." ) from percentcoding import quote, unquote s = "This is a test." escaped = quote(s) print escaped assert(s == unquote(escaped))
def _dict_to_tsv(dict): return '\n'.join( quote(k) + '\t' + quote(str(v)) for (k, v) in dict.items())
def _dict_to_tsv(dict): return '\n'.join(quote(k) + '\t' + quote(str(v)) for (k, v) in dict.items())