Exemple #1
0
    def tearDown(self):
        for rule in AutomaticUpdateRule.objects.filter(domain=self.domain):
            rule.hard_delete()

        for instance in run_query_across_partitioned_databases(
                CaseAlertScheduleInstance, Q(domain=self.domain)):
            delete_case_schedule_instance(instance)

        for instance in run_query_across_partitioned_databases(
                CaseTimedScheduleInstance, Q(domain=self.domain)):
            delete_case_schedule_instance(instance)

        for schedule in AlertSchedule.objects.filter(domain=self.domain):
            for event in schedule.memoized_events:
                event.content.delete()
                event.delete()

            schedule.delete()

        for schedule in TimedSchedule.objects.filter(domain=self.domain):
            for event in schedule.memoized_events:
                event.content.delete()
                event.delete()

            schedule.delete()
 def get_case_schedule_instances_for_domain(self, domain):
     instances = list(
         run_query_across_partitioned_databases(CaseAlertScheduleInstance,
                                                Q(domain=domain)))
     instances.extend(
         run_query_across_partitioned_databases(CaseTimedScheduleInstance,
                                                Q(domain=domain)))
     return instances
    def tearDown(self):
        for rule in AutomaticUpdateRule.objects.filter(domain=self.domain):
            rule.hard_delete()

        for instance in run_query_across_partitioned_databases(CaseAlertScheduleInstance, Q(domain=self.domain)):
            delete_case_schedule_instance(instance)

        for instance in run_query_across_partitioned_databases(CaseTimedScheduleInstance, Q(domain=self.domain)):
            delete_case_schedule_instance(instance)

        delete_alert_schedules(self.domain)
        delete_timed_schedules(self.domain)
Exemple #4
0
 def get_target_instances(self):
     if isinstance(self.schedule, AlertSchedule):
         return list(run_query_across_partitioned_databases(
             self.get_alert_schedule_instance_class(),
             Q(alert_schedule_id=self.schedule.schedule_id),
         ))
     elif isinstance(self.schedule, TimedSchedule):
         return list(run_query_across_partitioned_databases(
             self.get_timed_schedule_instance_class(),
             Q(timed_schedule_id=self.schedule.schedule_id),
         ))
     else:
         raise TypeError("Expected AlertSchedule or TimedSchedule")
def get_timed_schedule_instances_for_schedule(schedule):
    from corehq.messaging.scheduling.models import TimedSchedule
    from corehq.messaging.scheduling.scheduling_partitioned.models import TimedScheduleInstance

    _validate_class(schedule, TimedSchedule)
    return run_query_across_partitioned_databases(
        TimedScheduleInstance, Q(timed_schedule_id=schedule.schedule_id))
def get_active_case_schedule_instance_ids(cls, due_before, due_after=None):
    from corehq.messaging.scheduling.scheduling_partitioned.models import (
        CaseAlertScheduleInstance,
        CaseTimedScheduleInstance,
    )

    if cls not in (CaseAlertScheduleInstance, CaseTimedScheduleInstance):
        raise TypeError(
            "Expected CaseAlertScheduleInstance or CaseTimedScheduleInstance")

    active_filter = Q(
        active=True,
        next_event_due__lte=due_before,
    )

    if due_after:
        if due_before <= due_after:
            raise ValueError("Expected due_before > due_after")
        active_filter = active_filter & Q(next_event_due__gt=due_after)

    for domain, case_id, schedule_instance_id, next_event_due in run_query_across_partitioned_databases(
            cls,
            active_filter,
            values=[
                'domain', 'case_id', 'schedule_instance_id', 'next_event_due'
            ]):
        yield (domain, case_id, schedule_instance_id, next_event_due)
Exemple #7
0
def get_active_schedule_instance_ids(cls, due_before, due_after=None):
    from corehq.messaging.scheduling.scheduling_partitioned.models import (
        AlertScheduleInstance,
        TimedScheduleInstance,
    )

    if cls not in (AlertScheduleInstance, TimedScheduleInstance):
        raise TypeError("Expected AlertScheduleInstance or TimedScheduleInstance")

    active_filter = Q(
        active=True,
        next_event_due__lte=due_before,
    )

    if due_after:
        if due_before <= due_after:
            raise ValueError("Expected due_before > due_after")
        active_filter = active_filter & Q(next_event_due__gt=due_after)

    for domain, schedule_instance_id, next_event_due in run_query_across_partitioned_databases(
        cls,
        active_filter,
        values=['domain', 'schedule_instance_id', 'next_event_due']
    ):
        yield domain, schedule_instance_id, next_event_due
Exemple #8
0
def _get_active_schedule_instance_ids(cls, start_timestamp, end_timestamp):
    active_filter = Q(
        active=True,
        next_event_due__gt=start_timestamp,
        next_event_due__lte=end_timestamp,
    )
    for schedule_instance_id in run_query_across_partitioned_databases(
            cls, active_filter, values=['schedule_instance_id']):
        yield schedule_instance_id
Exemple #9
0
def get_timed_schedule_instances_for_schedule(schedule):
    from corehq.messaging.scheduling.models import TimedSchedule
    from corehq.messaging.scheduling.scheduling_partitioned.models import TimedScheduleInstance

    _validate_class(schedule, TimedSchedule)
    return run_query_across_partitioned_databases(
        TimedScheduleInstance,
        Q(timed_schedule_id=schedule.schedule_id)
    )
Exemple #10
0
def get_case_ids_for_messaging_rule(domain, case_type):
    if not should_use_sql_backend(domain):
        return CaseAccessors(domain).get_case_ids_in_domain(case_type)
    else:
        return run_query_across_partitioned_databases(
            CommCareCaseSQL,
            Q(domain=domain, type=case_type, deleted=False),
            values=['case_id']
        )
Exemple #11
0
def get_case_ids_for_messaging_rule(domain, case_type):
    if not should_use_sql_backend(domain):
        return CaseAccessors(domain).get_case_ids_in_domain(case_type)
    else:
        return run_query_across_partitioned_databases(
            CommCareCaseSQL,
            Q(domain=domain, type=case_type, deleted=False),
            values=['case_id']
        )
Exemple #12
0
    def _get_case_ids_from_postgres(cls,
                                    domain,
                                    case_type,
                                    boundary_date=None):
        q_expression = Q(
            domain=domain,
            type=case_type,
            closed=False,
            deleted=False,
        )

        if boundary_date:
            q_expression = q_expression & Q(
                server_modified_on__lte=boundary_date)

        return run_query_across_partitioned_databases(CommCareCaseSQL,
                                                      q_expression,
                                                      values=['case_id'])
def iter_form_ids_by_last_modified(start_datetime, end_datetime):
    from corehq.sql_db.util import run_query_across_partitioned_databases

    annotate = {
        'last_modified': Greatest('received_on', 'edited_on', 'deleted_on'),
    }

    return run_query_across_partitioned_databases(
        XFormInstanceSQL,
        (Q(last_modified__gt=start_datetime, last_modified__lt=end_datetime) &
         Q(state=F('state').bitand(XFormInstanceSQL.DELETED) +
            F('state').bitand(XFormInstanceSQL.DEPRECATED) +
            F('state').bitand(XFormInstanceSQL.DUPLICATE) +
            F('state').bitand(XFormInstanceSQL.ERROR) +
            F('state').bitand(XFormInstanceSQL.SUBMISSION_ERROR_LOG) +
            F('state'))),
        annotate=annotate,
        values=['form_id'],
    )
def iter_form_ids_by_last_modified(start_datetime, end_datetime):
    from corehq.sql_db.util import run_query_across_partitioned_databases

    annotate = {
        'last_modified': Greatest('received_on', 'edited_on', 'deleted_on'),
    }

    return run_query_across_partitioned_databases(
        XFormInstanceSQL,
        (Q(last_modified__gt=start_datetime, last_modified__lt=end_datetime)
         & Q(state=F('state').bitand(XFormInstanceSQL.DELETED) +
             F('state').bitand(XFormInstanceSQL.DEPRECATED) +
             F('state').bitand(XFormInstanceSQL.DUPLICATE) +
             F('state').bitand(XFormInstanceSQL.ERROR) +
             F('state').bitand(XFormInstanceSQL.SUBMISSION_ERROR_LOG) +
             F('state'))),
        annotate=annotate,
        values=['form_id'],
    )
Exemple #15
0
    def iter_forms_by_last_modified(start_datetime, end_datetime):
        '''
        Returns all forms that have been modified within a time range. The start date is
        exclusive while the end date is inclusive (start_datetime, end_datetime].

        NOTE: This does not include archived forms

        :param start_datetime: The start date of which modified forms must be greater than
        :param end_datetime: The end date of which modified forms must be less than or equal to

        :returns: An iterator of XFormInstanceSQL objects
        '''
        from corehq.sql_db.util import run_query_across_partitioned_databases

        annotate = {
            'last_modified': Greatest('received_on', 'edited_on', 'deleted_on'),
        }

        return run_query_across_partitioned_databases(
            XFormInstanceSQL,
            Q(last_modified__gt=start_datetime),
            annotate=annotate,
        )
Exemple #16
0
 def _get_all_ledger_transactions(self, q_):
     return list(run_query_across_partitioned_databases(LedgerTransaction, q_))
Exemple #17
0
 def _get_all_ledger_transactions(self, q_):
     return list(
         run_query_across_partitioned_databases(LedgerTransaction, q_))
 def get_case_schedule_instances_for_domain(self, domain):
     instances = list(run_query_across_partitioned_databases(CaseAlertScheduleInstance, Q(domain=domain)))
     instances.extend(run_query_across_partitioned_databases(CaseTimedScheduleInstance, Q(domain=domain)))
     return instances