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
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"Некорректный текст")