def post(self, request, *args, **kwargs): activity = request.POST['activity'] text = request.POST['text'] urns = parse_csv(request.POST.get('urns', ''), as_ints=False) contact_uuids = parse_csv(request.POST.get('contacts', ''), as_ints=False) contacts = Contact.objects.filter(org=request.org, uuid__in=contact_uuids) case_id = request.POST.get('case', None) case = Case.objects.get(org=request.org, pk=case_id) if case_id else None outgoing = Outgoing.create(request.org, request.user, activity, text, contacts, urns, case) return JsonResponse({'id': outgoing.pk})
def post(self, request, *args, **kwargs): case = self.get_object() label_ids = parse_csv(request.POST.get('labels', ''), as_ints=True) labels = Label.get_all(request.org).filter(pk__in=label_ids) case.update_labels(request.user, labels) return HttpResponse(status=204)
def save(self, obj): data = self.form.cleaned_data org = self.request.user.get_org() name = data['name'] description = data['description'] keywords = parse_csv(data['keywords']) self.object = Label.create(org, name, description, keywords)
def post(self, request, *args, **kwargs): org = request.org user = request.user action = kwargs['action'] message_ids = parse_csv(request.POST.get('messages', ''), as_ints=True) messages = org.incoming_messages.filter(org=org, backend_id__in=message_ids) label_id = int(request.POST.get('label', 0)) label = Label.get_all(org, user).get(pk=label_id) if label_id else None if action == 'flag': Message.bulk_flag(org, user, messages) elif action == 'unflag': Message.bulk_unflag(org, user, messages) elif action == 'label': Message.bulk_label(org, user, messages, label) elif action == 'unlabel': Message.bulk_unlabel(org, user, messages, label) elif action == 'archive': Message.bulk_archive(org, user, messages) elif action == 'restore': Message.bulk_restore(org, user, messages) else: return HttpResponseBadRequest("Invalid action: %s", action) return HttpResponse(status=204)
def populate_label_tests(apps, schema_editor): Label = apps.get_model('msgs', 'Label') for label in Label.objects.all(): keywords = parse_csv(label.keywords) if label.keywords else [] if keywords: label.tests = json.dumps([ContainsTest(keywords, Quantifier.ANY).to_json()]) label.save(update_fields=('tests',)) print("Migrated label #%d with keywords %s" % (label.pk, label.keywords))
def clean_keywords(self): keywords = parse_csv(self.cleaned_data['keywords']) clean_keywords = [] for keyword in keywords: clean_keyword = normalize(keyword) if not ContainsTest.is_valid_keyword(keyword): raise forms.ValidationError(_("Invalid keyword: %s") % keyword) clean_keywords.append(clean_keyword) return ', '.join(clean_keywords)
def post(self, request, *args, **kwargs): org = request.org user = request.user message_id = int(kwargs['id']) message = org.incoming_messages.filter(org=org, backend_id=message_id).first() label_ids = parse_csv(self.request.POST.get('labels', ''), as_ints=True) labels = Label.get_all(org, user).filter(pk__in=label_ids) message.update_labels(user, labels) return HttpResponse(status=204)
def clean_keywords(self): keywords = parse_csv(self.cleaned_data['keywords']) clean_keywords = [] for keyword in keywords: clean_keyword = normalize(keyword) if len(keyword) < Label.KEYWORD_MIN_LENGTH: raise forms.ValidationError(_("Keywords must be at least %d characters long") % Label.KEYWORD_MIN_LENGTH) if not Label.is_valid_keyword(keyword): raise forms.ValidationError(_("Invalid keyword: %s") % keyword) clean_keywords.append(clean_keyword) return ','.join(clean_keywords)
def get_labels(task, org, labelstring): """ Gets a list of label objects from a comma-separated string of the label codes, eg. "TB, aids" """ labels = set() labelstrings = parse_csv(labelstring) for labelstring in labelstrings: labelstring = labelstring.strip() try: label = Label.objects.get( org=org, name__iexact=labelstring) # iexact removes case sensitivity labels.add(label) except Exception as e: task.log("Label %s does not exist" % labelstring) raise e return list(labels)
def construct_tests(self): """ Constructs tests from form field values """ data = self.form.cleaned_data keywords = parse_csv(data['keywords']) groups = data['groups'] field_test = data['field_test'] ignore_single_words = data['ignore_single_words'] tests = [] if keywords: tests.append(ContainsTest(keywords, Quantifier.ANY)) if groups: tests.append(GroupsTest(groups, Quantifier.ANY)) if field_test: tests.append(field_test) if ignore_single_words: tests.append(WordCountTest(2)) return tests
def derive_search(self): """ Collects and prepares message search parameters into JSON serializable dict """ folder = MessageFolder[self.request.GET['folder']] label_id = self.request.GET.get('label', None) include_archived = str_to_bool(self.request.GET.get('archived', '')) text = self.request.GET.get('text', None) contact_id = self.request.GET.get('contact', None) group_ids = parse_csv(self.request.GET.get('groups', ''), as_ints=True) after = parse_iso8601(self.request.GET.get('after', None)) before = parse_iso8601(self.request.GET.get('before', None)) return { 'folder': folder, 'label': label_id, 'include_archived': include_archived, # only applies to flagged folder 'text': text, 'contact': contact_id, 'groups': group_ids, 'after': after, 'before': before }
def compress(self, values): field, values_csv = values if values else (None, "") if field: return FieldTest(field.key, parse_csv(values[1])) else: return None