예제 #1
0
파일: views.py 프로젝트: digideskio/casepro
        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})
예제 #2
0
파일: views.py 프로젝트: digideskio/casepro
        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)
예제 #3
0
파일: views.py 프로젝트: digideskio/casepro
 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)
예제 #4
0
파일: views.py 프로젝트: digideskio/casepro
        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)
예제 #5
0
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))
예제 #6
0
    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)
예제 #7
0
파일: forms.py 프로젝트: praekelt/casepro
    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)
예제 #8
0
파일: views.py 프로젝트: digideskio/casepro
        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)
예제 #9
0
파일: views.py 프로젝트: digideskio/casepro
    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)
예제 #10
0
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)
예제 #11
0
    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
예제 #12
0
    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
        }
예제 #13
0
 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
예제 #14
0
파일: forms.py 프로젝트: praekelt/casepro
 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