Esempio n. 1
0
def _watch(resp, callback):
    for line in resp.iter_content(chunk_size=None, decode_unicode=True):
        decoded_line = line.decode('utf-8')
        payload = json.loads(decoded_line)
        if 'created' in payload['result']:
            if payload['result']['created']:
                continue
            else:
                raise Exception('Unable to create watch')
        if 'events' in payload['result']:
            for event in payload['result']['events']:
                event['kv']['key'] = _decode(event['kv']['key'])
                if 'value' in event['kv']:
                    event['kv']['value'] = _decode(event['kv']['value'])
                callback(event)
Esempio n. 2
0
    def keys(self):
        """Get the keys associated with this lease.

        :return:
        """
        result = self.client.post(self.client.get_url("/kv/lease/timetolive"),
                                  json={
                                      "ID": self.id,
                                      "keys": True
                                  })
        keys = result['keys'] if 'keys' in result else []
        return [_decode(key) for key in keys]
Esempio n. 3
0
    def get(self,
            key,
            metadata=False,
            sort_order=None,
            sort_target=None,
            **kwargs):
        """Range gets the keys in the range from the key-value store.

        :param key:
        :param metadata:
        :param sort_order: 'ascend' or 'descend' or None
        :param sort_target: 'key' or 'version' or 'create' or 'mod' or 'value'
        :param kwargs:
        :return:
        """
        try:
            order = 0
            if sort_order:
                order = _SORT_ORDER.index(sort_order) + 1
        except ValueError:
            raise ValueError('sort_order must be one of "ascend" or "descend"')

        try:
            target = 0
            if sort_target:
                target = _SORT_TARGET.index(sort_target) + 1
        except ValueError:
            raise ValueError('sort_target must be one of "key", '
                             '"version", "create", "mod" or "value"')

        payload = {
            "key": _encode(key),
            "sort_order": order,
            "sort_target": target,
        }
        payload.update(kwargs)
        result = self.post(self.get_url("/kv/range"), json=payload)
        if 'kvs' not in result:
            return []

        if metadata:

            def value_with_metadata(item):
                item['key'] = _decode(item['key'])
                value = _decode(item.pop('value'))
                return value, item

            return [value_with_metadata(item) for item in result['kvs']]
        else:
            return [_decode(item['value']) for item in result['kvs']]
Esempio n. 4
0
 def value_with_metadata(item):
     item['key'] = _decode(item['key'])
     value = _decode(item.pop('value'))
     return value, item
Esempio n. 5
0
 def transaction(self, txn):
     put_request = txn['success'][0]['request_put']
     succeeded = self.put(_decode(put_request['key']),
                          _decode(put_request['value']))
     return {'succeeded': succeeded}