Пример #1
0
    def clean(self):
        cleaned_data = super(TopicForm, self).clean()

        title = cleaned_data.get('title')
        text = cleaned_data.get('text')
        tags = cleaned_data.get('tags')

        if title is not None:
            if not title.strip():
                self._errors['title'] = self.error_class(
                    [_(u'Le champ titre ne peut être vide')])
                if 'title' in cleaned_data:
                    del cleaned_data['title']
        if text is not None and not text.strip():
            self._errors['text'] = self.error_class(
                [_(u'Le champ text ne peut être vide')])
            if 'text' in cleaned_data:
                del cleaned_data['text']

        if text is not None and len(text) > settings.ZDS_APP['forum']['max_post_length']:
            self._errors['text'] = self.error_class(
                [_(u'Ce message est trop long, il ne doit pas dépasser {0} '
                   u'caractères').format(settings.ZDS_APP['forum']['max_post_length'])])

        validator = TagValidator()
        if not validator.validate_raw_string(tags):
            self._errors['tags'] = self.error_class(validator.errors)
        return cleaned_data
Пример #2
0
 def test_validator_with_correct_tags(self):
     tag = Tag(title='a test')
     tag.save()
     validator = TagValidator()
     self.assertEqual(validator.validate_raw_string(None), True)
     self.assertEqual(validator.validate_raw_string(tag.title), True)
     self.assertEqual(validator.errors, [])
Пример #3
0
 def test_validator_with_correct_tags(self):
     tag = Tag(title='a test')
     tag.save()
     validator = TagValidator()
     self.assertEqual(validator.validate_raw_string(None), True)
     self.assertEqual(validator.validate_raw_string(tag.title), True)
     self.assertEqual(validator.errors, [])
Пример #4
0
    def clean(self):
        cleaned_data = super(ContentForm, self).clean()
        image = cleaned_data.get('image')

        if image is not None and image.size > settings.ZDS_APP['gallery']['image_max_size']:
            self._errors['image'] = self.error_class(
                [_(u'Votre logo est trop lourd, la limite autorisée est de {} Ko')
                 .format(settings.ZDS_APP['gallery']['image_max_size'] / 1024)])
        validator = TagValidator()
        if not validator.validate_raw_string(cleaned_data.get('tags')):
            self._errors['tags'] = self.error_class(validator.errors)
        return cleaned_data
Пример #5
0
    def clean(self):
        cleaned_data = super(TopicForm, self).clean()

        self.get_non_empty_field_or_error(cleaned_data, 'title',
                                          lambda: _('Le champ titre ne peut être vide'))
        text = self.get_non_empty_field_or_error(cleaned_data, 'text',
                                                 lambda: _('Le champ text ne peut être vide'))

        if text:
            self.check_text_length_limit(text, settings.ZDS_APP['forum']['max_post_length'],
                                         lambda: _('Ce message est trop long, '
                                                   'il ne doit pas dépasser {0} caractères'))

        tags = cleaned_data.get('tags')
        validator = TagValidator()
        if not validator.validate_raw_string(tags):
            self._errors['tags'] = self.error_class(validator.errors)
        return cleaned_data
Пример #6
0
    def clean(self):
        cleaned_data = super().clean()

        self.get_non_empty_field_or_error(
            cleaned_data, "title",
            lambda: _("Le champ titre ne peut être vide"))
        text = self.get_non_empty_field_or_error(
            cleaned_data, "text", lambda: _("Le champ text ne peut être vide"))

        if text:
            self.check_text_length_limit(
                text,
                settings.ZDS_APP["forum"]["max_post_length"],
                lambda: _("Ce message est trop long, "
                          "il ne doit pas dépasser {0} caractères"),
            )

        tags = cleaned_data.get("tags")
        validator = TagValidator()
        if not validator.validate_raw_string(tags):
            self._errors["tags"] = self.error_class(validator.errors)
        return cleaned_data
Пример #7
0
class TopicForm(forms.Form):
    title = forms.CharField(
        label=_('Titre'),
        max_length=Topic._meta.get_field('title').max_length,
        widget=forms.TextInput(attrs={
            'placeholder': _(u'Titre de mon sujet'),
            'required': 'required',
        }))

    subtitle = forms.CharField(
        label=_('Sous-titre'),
        max_length=Topic._meta.get_field('subtitle').max_length,
        required=False,
    )

    forum = forms.ModelChoiceField(label=_(u'Catégorie'),
                                   queryset=None,
                                   widget=forms.Select(attrs={
                                       'required': 'required',
                                   }))

    tags = forms.CharField(
        label=_(
            u'Tag(s) séparés par une virgule (exemple: python,django,web)'),
        max_length=64,
        required=False,
        widget=forms.TextInput(
            attrs={
                'data-autocomplete':
                '{ "type": "multiple", "fieldname": "title", "url": "/api/tags/?search=%s" }'
            }))

    text = forms.CharField(
        label='Texte',
        widget=forms.Textarea(
            attrs={
                'placeholder': _('Votre message au format Markdown.'),
                'required': 'required',
            }))

    def __init__(self, *args, **kwargs):
        self.user = kwargs.get('user')

        super(TopicForm, self).__init__(*args, **kwargs)

        self.fields['forum'].queryset = Forum.objects.exclude(
            group__in=Group.objects.filter(user=self.user).all())

        self.helper = FormHelper()
        self.helper.form_class = 'content-wrapper'
        self.helper.form_method = 'post'

        self.helper.layout = Layout(
            Field('title', autocomplete='off'),
            Field('subtitle', autocomplete='off'),
            Field('tags'),
            Field('forum'),
            CommonLayoutEditor(),
        )

    def clean(self):
        cleaned_data = super(TopicForm, self).clean()

        title = cleaned_data.get('title')
        text = cleaned_data.get('text')
        if title is not None:
            if title.strip() == '':
                self._errors['title'] = self.error_class(
                    [_(u'Le champ titre ne peut être vide')])
                if 'title' in cleaned_data:
                    del cleaned_data['title']
            elif re.sub(ur"(?P<start>)(\[.*?\])(?P<end>)", sub_tag, title) \
                    .strip() == '':
                self._errors['title'] = self.error_class(
                    [_(u'Le titre ne peux pas contenir uniquement des tags')])
            else:
                tags = re.findall(ur"((.*?)\[(.*?)\](.*?))", title)
                for tag in tags:
                    if tag[2].strip() == "":
                        if 'title' in cleaned_data:
                            self._errors['title'] = self.error_class(
                                [_(u'Un tag ne peut être vide')])

                    elif len(tag[2]) > Tag._meta.get_field('title').max_length:
                        if 'title' in cleaned_data:
                            self._errors['title'] = self.error_class([
                                _(u'Un tag doit faire moins de {0} caractères'
                                  ).format(
                                      Tag._meta.get_field('title').max_length)
                            ])
        if text is not None and text.strip() == '':
            self._errors['text'] = self.error_class(
                [_(u'Le champ text ne peut être vide')])
            if 'text' in cleaned_data:
                del cleaned_data['text']

        if text is not None and len(
                text) > settings.ZDS_APP['forum']['max_post_length']:
            self._errors['text'] = self.error_class([
                _(u'Ce message est trop long, il ne doit pas dépasser {0} '
                  u'caractères').format(
                      settings.ZDS_APP['forum']['max_post_length'])
            ])

        if not TagValidator.validate_raw_string(cleaned_data.get("tags")):
            self._errors['tags'] = self.error_class(
                [_(u'Vous avez entré un tag trop long.')])
        return cleaned_data
Пример #8
0
 def clean_tags(self):
     validator = TagValidator()
     cleaned_tags = self.cleaned_data.get("tags")
     if not validator.validate_raw_string(cleaned_tags):
         self.add_error("tags", self.error_class(validator.errors))
     return cleaned_tags
Пример #9
0
    def test_validator_with_utf8mb4(self):

        raw_string = '🐙☢,bla'
        validator = TagValidator()
        self.assertFalse(validator.validate_raw_string(raw_string))
        self.assertEqual(1, len(validator.errors))
Пример #10
0
    def test_validator_with_special_char_only(self):

        validator = TagValidator()
        self.assertFalse(validator.validate_raw_string('^'))
        self.assertEqual(len(validator.errors), 1)
Пример #11
0
    def test_validator_with_utf8mb4(self):

        raw_string = '🐙☢,bla'
        validator = TagValidator()
        self.assertFalse(validator.validate_raw_string(raw_string))
        self.assertEqual(1, len(validator.errors))
Пример #12
0
    def test_validator_with_special_char_only(self):

        validator = TagValidator()
        self.assertFalse(validator.validate_raw_string("^"))
        self.assertEqual(len(validator.errors), 1)