Exemplo n.º 1
0
    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'])
Exemplo n.º 2
0
    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'])
Exemplo n.º 3
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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]
Exemplo n.º 9
0
    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
Exemplo n.º 10
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)
Exemplo n.º 11
0
    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', ''))
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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'])
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
    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', ''))
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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]
Exemplo n.º 21
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
Exemplo n.º 22
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
Exemplo n.º 23
0
#!/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))

Exemplo n.º 24
0
def _dict_to_tsv(dict):
    return '\n'.join(
        quote(k) + '\t' + quote(str(v)) for (k, v) in dict.items())
Exemplo n.º 25
0
def _dict_to_tsv(dict):
    return '\n'.join(quote(k) + '\t' + quote(str(v)) for (k, v) in dict.items())