(cls, utcnow, limit=None, skip=0)
Get errors according the following rules:

            date_next_attempt <= utcnow
            AND
            (
                total_attempts <= multi_attempt_cutoff & current_attempt <= max_attempts
                OR
                total_attempts > multi_attempt_cutoff & current_attempt 0
            )

        where:
        * multi_attempt_cutoff = const.PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS * 3
        * max_attempts = const.PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS

        :param utcnow:      The current date and time in UTC.
        :param limit:       Paging limit param.
        :param skip:        Paging skip param.
Get errors according the following rules:
Get errors according the following rules :
def get_errors_to_process(cls, utcnow, limit=None, skip=0):
        """
        Get errors according the following rules:

            date_next_attempt <= utcnow
            AND
            (
                total_attempts <= multi_attempt_cutoff & current_attempt <= max_attempts
                OR
                total_attempts > multi_attempt_cutoff & current_attempt 0
            )

        where:
        * multi_attempt_cutoff = const.PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS * 3
        * max_attempts = const.PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS

        :param utcnow:      The current date and time in UTC.
        :param limit:       Paging limit param.
        :param skip:        Paging skip param.
        """
        max_attempts = const.PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS
        multi_attempts_cutoff = const.PILLOW_RETRY_MULTI_ATTEMPTS_CUTOFF
        query = PillowError.objects \
            .filter(date_next_attempt__lte=utcnow) \
            .filter(
                models.Q(current_attempt=0) |
                (models.Q(total_attempts__lte=multi_attempts_cutoff) & models.Q(current_attempt__lte=max_attempts))
            )

        # temporarily disable queuing of ConfigurableReportKafkaPillow errors
        query = query.filter(~models.Q(pillow='corehq.apps.userreports.pillow.ConfigurableReportKafkaPillow'))

        if limit is not None:
            return query[skip:skip+limit]
        else:
            return query
def get_errors_to_process ( cls , utcnow , limit = None , skip = 0 ) : max_attempts = const . PILLOW_RETRY_QUEUE_MAX_PROCESSING_ATTEMPTS multi_attempts_cutoff = const . PILLOW_RETRY_MULTI_ATTEMPTS_CUTOFF query = PillowError . objects . filter ( date_next_attempt__lte = utcnow ) . filter ( models . Q ( current_attempt = 0 ) | ( models . Q ( total_attempts__lte = multi_attempts_cutoff ) & models . Q ( current_attempt__lte = max_attempts ) ) ) # temporarily disable queuing of ConfigurableReportKafkaPillow errors query = query . filter ( ~ models . Q ( pillow = 'corehq.apps.userreports.pillow.ConfigurableReportKafkaPillow' ) ) if limit is not None : return query [ skip : skip + limit ] else : return query