Example #1
0
    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
Example #5
0
    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
Example #6
0
    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]
Example #9
0
 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