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)
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]
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']]
def value_with_metadata(item): item['key'] = _decode(item['key']) value = _decode(item.pop('value')) return value, item
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}