def unpush(self, num=None): if num is not None and num <= 0: return [] if num: return [ decode(s) for s in retry_call(self.t, args=[self.name, num]) ] else: ret_val = retry_call(self.t, args=[self.name, 1]) if ret_val: return decode(ret_val[0]) return None
def pop(self, num=None): if num is not None and num <= 0: return [] if num: return [ decode(s[0][SORTING_KEY_LEN:]) for s in retry_call(self.c.zpopmin, self.name, num) ] else: ret_val = retry_call(self.c.zpopmin, self.name, 1) if ret_val: return decode(ret_val[0][0][SORTING_KEY_LEN:]) return None
def unpush(self, num=None): if num is not None and num <= 0: return [] if num: return [ decode(s[0]) for s in retry_call(self.c.zpopmax, self.name, num) ] else: ret_val = retry_call(self.c.zpopmax, self.name, 1) if ret_val: return decode(ret_val[0][0]) return None
def unpush(self, num=None) -> Union[list[T], Optional[T]]: if num is not None and num <= 0: return [] if num: return [ decode(s[0][SORTING_KEY_LEN:]) for s in retry_call(self.c.zpopmax, self.name, num) ] else: ret_val = retry_call(self.c.zpopmax, self.name, 1) if ret_val: return decode(ret_val[0][0][SORTING_KEY_LEN:]) return None
def pop(self, num=None): if num is not None and num <= 0: return [] if num: return [ decode(s[21:]) for s in retry_call(self.r, args=[self.name, num - 1]) ] else: ret_val = retry_call(self.r, args=[self.name, 0]) if ret_val: return decode(ret_val[0][21:]) return None
def listen(self, blocking=True): retried = False while True: self._connect() try: if blocking: i = self.p.listen() v = next(i) else: v = self.p.get_message() if v is None: yield None continue if isinstance(v, dict) and v.get('type', None) == 'message': data = decode(v.get('data', 'null')) yield data except redis.ConnectionError: log.warning('No connection to Redis, reconnecting...') self._connected = False retried = True finally: if self._connected and retried: log.info('Reconnected to Redis!') retried = False
def blocking_pop(self, timeout=0, low_priority=False): """When only one item is requested, blocking is is possible.""" if low_priority: result = retry_call(self.c.bzpopmax, self.name, timeout) else: result = retry_call(self.c.bzpopmin, self.name, timeout) if result: return decode(result[1][SORTING_KEY_LEN:]) return None
def dequeue_range(self, lower_limit='', upper_limit='', skip=0, num=1): """Dequeue a number of elements, within a specified range of scores. Limits given are inclusive, can be made exclusive, see redis docs on how to format limits for that. NOTE: lower/upper limit is negated+swapped in the lua script, no need to do it here :param lower_limit: The score of all dequeued elements must be higher or equal to this. :param upper_limit: The score of all dequeued elements must be lower or equal to this. :param skip: In the range of available items to dequeue skip over this many. :param num: Maximum number of elements to dequeue. :return: list """ results = retry_call(self._deque_range, keys=[self.name], args=[lower_limit, upper_limit, skip, num]) return [decode(res) for res in results]
def blocking_pop(self, timeout=0): """When only one item is requested, blocking is is possible.""" result = retry_call(self.c.bzpopmin, self.name, timeout) if result: return decode(result[1][21:]) return None