Example #1
0
    def filter_queryset(self, queryset):
        params = self.request.query_params
        org = self.request.user.get_org()

        deleted_only = str_to_bool(params.get("deleted"))
        queryset = queryset.filter(is_active=(not deleted_only))

        # filter by group name/uuid (optional)
        group_ref = params.get("group")
        if group_ref:
            group = ContactGroup.user_groups.filter(
                org=org).filter(Q(uuid=group_ref) | Q(name=group_ref)).first()
            if group:
                queryset = queryset.filter(all_groups=group)
            else:
                queryset = queryset.filter(pk=-1)

        # use prefetch rather than select_related for foreign keys to avoid joins
        queryset = queryset.prefetch_related(
            Prefetch(
                "all_groups",
                queryset=ContactGroup.user_groups.only("uuid",
                                                       "name").order_by("pk"),
                to_attr="prefetched_user_groups",
            ))

        return self.filter_before_after(queryset, "created_on")
Example #2
0
    def filter_queryset(self, queryset):
        params = self.request.query_params
        org = self.request.user.get_org()

        deleted_only = str_to_bool(params.get('deleted'))
        queryset = queryset.filter(is_test=False, is_active=(not deleted_only))

        # filter by UUID (optional)
        uuid = params.get('uuid')
        if uuid:
            queryset = queryset.filter(uuid=uuid)

        # filter by URN (optional)
        urn = params.get('urn')
        if urn:
            queryset = queryset.filter(urns__urn=urn)

        # filter by group name/uuid (optional)
        group_ref = params.get('group')
        if group_ref:
            group = ContactGroup.user_groups.filter(org=org, is_active=True).filter(Q(uuid=group_ref) | Q(name=group_ref)).first()
            if group:
                queryset = queryset.filter(all_groups=group)
            else:
                queryset = queryset.filter(pk=-1)

        # use prefetch rather than select_related for foreign keys to avoid joins
        queryset = queryset.prefetch_related(
            Prefetch('org', queryset=Org.objects.only('is_anon')),
            Prefetch('all_groups', queryset=ContactGroup.user_groups.only('uuid', 'name'), to_attr='prefetched_user_groups')
        )

        return self.filter_before_after(queryset, 'modified_on')
Example #3
0
    def filter_queryset(self, queryset):
        params = self.request.query_params
        org = self.request.user.get_org()

        deleted_only = str_to_bool(params.get('deleted'))
        queryset = queryset.filter(is_test=False, is_active=(not deleted_only))

        # filter by UUID (optional)
        uuid = params.get('uuid')
        if uuid:
            queryset = queryset.filter(uuid=uuid)

        # filter by URN (optional)
        urn = params.get('urn')
        if urn:
            queryset = queryset.filter(urns__urn=urn)

        # filter by group name/uuid (optional)
        group_ref = params.get('group')
        if group_ref:
            group = ContactGroup.user_groups.filter(
                org=org).filter(Q(uuid=group_ref) | Q(name=group_ref)).first()
            if group:
                queryset = queryset.filter(all_groups=group)
            else:
                queryset = queryset.filter(pk=-1)

        # use prefetch rather than select_related for foreign keys to avoid joins
        queryset = queryset.prefetch_related(
            Prefetch('org', queryset=Org.objects.only('is_anon')),
            Prefetch('all_groups',
                     queryset=ContactGroup.user_groups.only('uuid', 'name'),
                     to_attr='prefetched_user_groups'))

        return self.filter_before_after(queryset, 'modified_on')
Example #4
0
    def get_base_queryset(self, request):
        queryset = self.model.objects.filter(org=request.user.get_org(), is_test=False)

        # if they pass in deleted=true then only return deleted contacts
        if str_to_bool(request.query_params.get("deleted", "")):
            return queryset.filter(is_active=False)
        else:
            return queryset.filter(is_active=True)
Example #5
0
    def filter_queryset(self, queryset):
        params = self.request.query_params
        org = self.request.user.get_org()

        # filter by flow (optional)
        flow_uuid = params.get('flow')
        if flow_uuid:
            flow = Flow.objects.filter(org=org, uuid=flow_uuid,
                                       is_active=True).first()
            if flow:
                queryset = queryset.filter(flow=flow)
            else:
                queryset = queryset.filter(pk=-1)

        # filter by id (optional)
        run_id = params.get('id')
        if run_id:
            queryset = queryset.filter(id=run_id)

        # filter by contact (optional)
        contact_uuid = params.get('contact')
        if contact_uuid:
            contact = Contact.objects.filter(org=org,
                                             is_test=False,
                                             is_active=True,
                                             uuid=contact_uuid).first()
            if contact:
                queryset = queryset.filter(contact=contact)
            else:
                queryset = queryset.filter(pk=-1)
        else:
            # otherwise filter out test contact runs
            test_contact_ids = list(
                Contact.objects.filter(org=org,
                                       is_test=True).values_list('pk',
                                                                 flat=True))
            queryset = queryset.exclude(contact__pk__in=test_contact_ids)

        # limit to responded runs (optional)
        if str_to_bool(params.get('responded')):
            queryset = queryset.filter(responded=True)

        # use prefetch rather than select_related for foreign keys to avoid joins
        queryset = queryset.prefetch_related(
            Prefetch('flow', queryset=Flow.objects.only('uuid', 'name')),
            Prefetch('contact', queryset=Contact.objects.only('uuid', 'name')),
            Prefetch('steps',
                     queryset=FlowStep.objects.order_by('arrived_on')),
            Prefetch('steps__messages',
                     queryset=Msg.all_messages.only('text')),
        )

        return self.filter_before_after(queryset, 'modified_on')
Example #6
0
    def filter_queryset(self, queryset):
        params = self.request.query_params
        org = self.request.user.get_org()

        # filter by flow (optional)
        flow_uuid = params.get('flow')
        if flow_uuid:
            flow = Flow.objects.filter(org=org, uuid=flow_uuid, is_active=True).first()
            if flow:
                queryset = queryset.filter(flow=flow)
            else:
                queryset = queryset.filter(pk=-1)

        # filter by id (optional)
        run_id = params.get('id')
        if run_id:
            queryset = queryset.filter(id=run_id)

        # filter by contact (optional)
        contact_uuid = params.get('contact')
        if contact_uuid:
            contact = Contact.objects.filter(org=org, is_test=False, is_active=True, uuid=contact_uuid).first()
            if contact:
                queryset = queryset.filter(contact=contact)
            else:
                queryset = queryset.filter(pk=-1)
        else:
            # otherwise filter out test contact runs
            test_contacts = Contact.objects.filter(org=org, is_test=True)
            queryset = queryset.exclude(contact__in=test_contacts)

        # limit to responded runs (optional)
        if str_to_bool(params.get('responded')):
            queryset = queryset.filter(responded=True)

        # use prefetch rather than select_related for foreign keys to avoid joins
        queryset = queryset.prefetch_related(
            Prefetch('flow', queryset=Flow.objects.only('uuid', 'name')),
            Prefetch('contact', queryset=Contact.objects.only('uuid', 'name')),
            Prefetch('steps', queryset=FlowStep.objects.order_by('arrived_on')),
            Prefetch('steps__messages', queryset=Msg.all_messages.only('text')),
        )

        return self.filter_before_after(queryset, 'modified_on')
Example #7
0
    def get_queryset(self):
        queryset = self.model.objects.filter(
            org=self.request.user.get_org(),
            is_active=True).order_by("-created_on")

        uuids = self.request.query_params.getlist("uuid", None)
        if uuids:
            queryset = queryset.filter(uuid__in=uuids)

        ids = self.request.query_params.getlist("flow",
                                                None)  # deprecated, use uuid
        if ids:
            queryset = queryset.filter(pk__in=ids)

        before = self.request.query_params.get("before", None)
        if before:  # pragma: needs cover
            try:
                before = iso8601.parse_date(before)
                queryset = queryset.filter(created_on__lte=before)
            except Exception:
                queryset = queryset.filter(pk=-1)

        after = self.request.query_params.get("after", None)
        if after:  # pragma: needs cover
            try:
                after = iso8601.parse_date(after)
                queryset = queryset.filter(created_on__gte=after)
            except Exception:
                queryset = queryset.filter(pk=-1)

        label = self.request.query_params.getlist("label", None)
        if label:
            queryset = queryset.filter(labels__name__in=label)

        archived = self.request.query_params.get("archived", None)
        if archived is not None:
            queryset = queryset.filter(is_archived=str_to_bool(archived))

        flow_type = self.request.query_params.getlist("type", None)
        if flow_type:  # pragma: needs cover
            queryset = queryset.filter(flow_type__in=flow_type)

        return queryset.prefetch_related("labels")
Example #8
0
    def get_queryset(self):
        queryset = self.model.objects.filter(
            org=self.request.user.get_org(),
            is_active=True).order_by('-created_on')

        uuids = self.request.query_params.getlist('uuid', None)
        if uuids:
            queryset = queryset.filter(uuid__in=uuids)

        ids = self.request.query_params.getlist('flow',
                                                None)  # deprecated, use uuid
        if ids:
            queryset = queryset.filter(pk__in=ids)

        before = self.request.query_params.get('before', None)
        if before:  # pragma: needs cover
            try:
                before = json_date_to_datetime(before)
                queryset = queryset.filter(created_on__lte=before)
            except Exception:
                queryset = queryset.filter(pk=-1)

        after = self.request.query_params.get('after', None)
        if after:  # pragma: needs cover
            try:
                after = json_date_to_datetime(after)
                queryset = queryset.filter(created_on__gte=after)
            except Exception:
                queryset = queryset.filter(pk=-1)

        label = self.request.query_params.getlist('label', None)
        if label:
            queryset = queryset.filter(labels__name__in=label)

        archived = self.request.query_params.get('archived', None)
        if archived is not None:
            queryset = queryset.filter(is_archived=str_to_bool(archived))

        flow_type = self.request.query_params.getlist('type', None)
        if flow_type:  # pragma: needs cover
            queryset = queryset.filter(flow_type__in=flow_type)

        return queryset.prefetch_related('labels')
Example #9
0
    def get_queryset(self):
        queryset = self.model.objects.filter(org=self.request.user.get_org(), is_active=True).order_by("-created_on")

        uuids = self.request.query_params.getlist("uuid", None)
        if uuids:
            queryset = queryset.filter(uuid__in=uuids)

        ids = self.request.query_params.getlist("flow", None)  # deprecated, use uuid
        if ids:
            queryset = queryset.filter(pk__in=ids)

        before = self.request.query_params.get("before", None)
        if before:  # pragma: needs cover
            try:
                before = iso8601.parse_date(before)
                queryset = queryset.filter(created_on__lte=before)
            except Exception:
                queryset = queryset.filter(pk=-1)

        after = self.request.query_params.get("after", None)
        if after:  # pragma: needs cover
            try:
                after = iso8601.parse_date(after)
                queryset = queryset.filter(created_on__gte=after)
            except Exception:
                queryset = queryset.filter(pk=-1)

        label = self.request.query_params.getlist("label", None)
        if label:
            queryset = queryset.filter(labels__name__in=label)

        archived = self.request.query_params.get("archived", None)
        if archived is not None:
            queryset = queryset.filter(is_archived=str_to_bool(archived))

        flow_type = self.request.query_params.getlist("type", None)
        if flow_type:  # pragma: needs cover
            queryset = queryset.filter(flow_type__in=flow_type)

        return queryset.prefetch_related("labels")
Example #10
0
 def get_ordering(self, request, queryset, view):
     if str_to_bool(request.GET.get("reverse")):
         return "modified_on", "id"
     else:
         return "-modified_on", "-id"