コード例 #1
0
    def get_img_rnd(self, rnd_field, rnd_generator, request):
        if self.cleaned_data[rnd_field]:
            result_img = None
            rnd = rnd_generator(self.cleaned_data[rnd_field])
        else:
            if self.cleaned_data['url']:
                response = requests.get(self.cleaned_data['url'])
                f = ContentFile(response.content, response.url.split('/')[-1])
            else:
                f = self.cleaned_data['upload']
            img = Image(**self.get_img_params(request))
            img.save_image(f)
            result_img = img.save()

            if result_img.banned:
                Log.write(Log.TYPE_VALIDATION, "This image is banned", request, request.POST)
                raise BannedImageException("This image is banned")

            Image.objects.filter(pk=result_img.pk).update(uses=F('uses') + 1)

            rnd = 0
        return result_img, rnd
コード例 #2
0
    def clean_all(self, image_fields):
        if self.request.banned:
            Log.write(Log.TYPE_VALIDATION, "You are banned", self.request, self.request.POST)
            raise forms.ValidationError(u"Вы забанены")

        if self.request.wait_to_post:
            Log.write(Log.TYPE_VALIDATION, "You cannot post yet", self.request, self.request.POST)
            raise forms.ValidationError(u"Вы еще не можете оставлять посты")

        if image_fields and not any(self.cleaned_data.get(f) for f in image_fields):
            Log.write(Log.TYPE_VALIDATION, "Please provice an image", self.request, self.request.POST)
            raise forms.ValidationError(u"Необходимо указать картинку")

        text = self.cleaned_data.get('message', "").strip()
        if not text.strip():
            Log.write(Log.TYPE_VALIDATION, "Text is empty", self.request, self.request.POST)
            raise TextValidationError(u"Необходимо ввести текст")

        if len(text.strip()) > 2048:
            Log.write(Log.TYPE_VALIDATION, "text too long", self.request, self.request.POST)
            raise TextValidationError(u"Слишком много текста")

        if not self.request.user.is_staff:
            text_tokens = set(apa.utils.tokenize_text(text))
            yesterday_ts = apa.utils.to_datetime(datetime.datetime.now()) - 86400
            existing_messages = Comment.objects.filter(cookie_id=self.request.cookie_id, datetime__gte=yesterday_ts)
            for em in existing_messages:
                em_tokens = set(apa.utils.tokenize_text(em.text))
                diff = text_tokens.difference(em_tokens)
                if float(len(diff)) / len(text_tokens) < 0.2:
                    # More than 80% of text repeats
                    Log.write(Log.TYPE_VALIDATION, "Possible post duplicate", self.request, self.request.POST)
                    raise TextValidationError(u"Вы уже отправляли похожий пост недавно.")

            # lang, confidence = apa.utils.detect_language(text)
            # text_size = len(text_tokens)
            # word_len = len(text) / text_size
            # if lang != 'russian' or (text_size > 10 and confidence < text_size / 5) or text_size == 0 or word_len > 10:
            #     Log.write(Log.TYPE_VALIDATION, "Post does not look russian", self.request, self.request.POST)
            #     raise TextValidationError(u"Непонятно, пишите по-русски. И докажите, что вы не робот.")

        try:
            self.render_md(text)
        except RuntimeError, e:
            Log.write(Log.TYPE_VALIDATION, "Text exception: %s" % e, self.request, self.request.POST)
            raise TextValidationError(u"Некорректный текст")