Source code for oioioi.printing.forms
from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from oioioi.printing.pdf import PageLimitExceeded, generator
from oioioi.programs.utils import decode_str
[docs]def is_text_file_validator(file):
if not file.content_type.startswith('text/'):
raise ValidationError(_("The file should be a text file."))
[docs]def validate_file_size(file):
if file.size > settings.PRINTING_MAX_FILE_SIZE:
raise ValidationError(_("The file size limit exceeded."))
[docs]class PrintForm(forms.Form):
[docs] file = forms.FileField(
allow_empty_file=False,
label=_("File"),
validators=[is_text_file_validator, validate_file_size],
)
def __init__(self, user, *args, **kwargs):
self.user = user
super(PrintForm, self).__init__(*args, **kwargs)
[docs] def clean_file(self):
cleaned_data = self.cleaned_data
orig, _decode_error = decode_str(cleaned_data['file'].file.read())
try:
cleaned_data['file'] = generator(
source=orig.expandtabs(4),
header=str(
'%s (%s)' % (self.user.get_full_name(), self.user)
),
)
except PageLimitExceeded:
raise ValidationError(_("The page limit exceeded."))
return cleaned_data['file']