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")
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')
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')
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)
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')
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')
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")
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')
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")
def get_ordering(self, request, queryset, view): if str_to_bool(request.GET.get("reverse")): return "modified_on", "id" else: return "-modified_on", "-id"