示例#1
0
    def post(self, request, *args, **kwargs):
        if request.is_ajax():
            for data in simplejson.loads(request.POST.get('imageData')):
                image = Image.objects.get(pk=data['image_pk'])
                try:
                    parsed = parseKeyValueTags(data['value'])
                    image.keyvaluetags.all().delete()
                    for tag in parsed:
                        KeyValueTag.objects.create(image=image,
                                                   key=tag["key"],
                                                   value=tag["value"])

                except ValueError:
                    return self.render_json_response({
                        'error':
                        _("Provide a list of unique key/value pairs to tag this image with. Use the '=' symbol "
                          "between key and value, and provide one pair per line. These tags can be used to sort "
                          "images by arbitrary properties."),
                        'image_pk':
                        data['image_pk']
                    })

            messages.success(request, _("Images updated!"))

            return self.render_json_response({
                'images':
                ','.join([str(x.pk) for x in self.get_object().images.all()]),
            })
        else:
            return super(UserCollectionsQuickEditKeyValueTags,
                         self).post(request, *args, **kwargs)
示例#2
0
 def test_parse_key_value_tags_success_multiple_rn(self):
     self.assertEqual([{
         "key": "a",
         "value": "1"
     }, {
         "key": "b",
         "value": "2"
     }], parseKeyValueTags("a=1\r\nb=2"))
示例#3
0
    def __saveKeyValueTags(self, instance):
        instance.keyvaluetags.all().delete()

        if 'keyvaluetags' in self.data:
            tags = self.data['keyvaluetags']
            if tags is None:
                return

            for tag in parseKeyValueTags(tags):
                KeyValueTag.objects.create(image=instance,
                                           key=tag["key"],
                                           value=tag["value"])
示例#4
0
    def to_internal_value(self, data):
        instance = self.parent.instance
        instance.keyvaluetags.all().delete()
        value = []

        if data is None:
            return value

        for tag in parseKeyValueTags(data):
            value.append(
                KeyValueTag.objects.create(image=instance,
                                           key=tag["key"],
                                           value=tag["value"]))

        return value
示例#5
0
    def __saveKeyValueTags(self, instance):
        instance.keyvaluetags.all().delete()

        if 'keyvaluetags' in self.data:
            tags = self.data['keyvaluetags']
            if tags is None:
                return

            try:
                for tag in parseKeyValueTags(tags):
                    KeyValueTag.objects.create(image=instance,
                                               key=tag["key"],
                                               value=tag["value"])
            except ValueError:
                raise forms.ValidationError(_("Unable to parse."))
示例#6
0
    def to_internal_value(self, data):
        instance = self.parent.instance
        instance.keyvaluetags.all().delete()
        value = []

        if data is None:
            return value

        try:
            for tag in parseKeyValueTags(data):
                value.append(
                    KeyValueTag.objects.create(image=instance,
                                               key=tag["key"],
                                               value=tag["value"]))
        except ValueError:
            log.error(f'KeyValueTagsSerializerField: unable to parse: {data}')

        return value
示例#7
0
 def clean_keyvaluetags(self):
     try:
         parsed = parseKeyValueTags(self.cleaned_data['keyvaluetags'])
     except ValueError:
         raise forms.ValidationError(_("Unable to parse."))
示例#8
0
 def test_parse_key_value_tags_empty_tags(self):
     self.assertEqual([], parseKeyValueTags(""))
示例#9
0
 def test_parse_key_value_tags_success_non_ascii(self):
     self.assertEqual([{
         "key": "你好",
         "value": "再见"
     }], parseKeyValueTags("你好=再见"))
示例#10
0
 def test_parse_key_value_tags_success(self):
     self.assertEqual([{
         "key": "a",
         "value": "1"
     }], parseKeyValueTags("a=1"))
示例#11
0
 def test_parse_key_value_tags_success_number_key(self):
     self.assertEqual([{
         "key": "2",
         "value": "1"
     }], parseKeyValueTags("2=1"))
示例#12
0
 def test_parse_key_value_tags_two_equals(self):
     with self.assertRaises(ValueError):
         parseKeyValueTags("a=1=2")
示例#13
0
 def test_parse_key_value_tags_double_equals(self):
     with self.assertRaises(ValueError):
         parseKeyValueTags("a==1")
示例#14
0
 def test_parse_key_value_tags_duplicate_key(self):
     with self.assertRaises(ValueError):
         parseKeyValueTags("a=1\na=2")
示例#15
0
 def test_parse_key_value_tags_missing_key_and_value(self):
     with self.assertRaises(ValueError):
         parseKeyValueTags("=")
示例#16
0
 def test_parse_key_value_tags_none_tags(self):
     self.assertEqual([], parseKeyValueTags(None))