Exemplo n.º 1
0
    def upload_publication(self, request):
        if 'file' not in request.data:
            raise exceptions.ParseError(detail='Request neobsahoval súbor')

        file = request.data['file']
        if mime_type(file) != 'application/pdf':
            raise exceptions.ParseError(detail='Nesprávny formát')

        semester = Semester.objects.filter(pk=request.data['semester']).first()
        primary_key = request.data['semester']
        if SemesterPublication.objects.filter(semester=semester) \
            .filter(~Q(pk=primary_key), order=request.data['order']) \
                .exists():
            raise ValidationError({
                'order':
                'Časopis s týmto číslom už v danom semestri existuje',
            })

        publication = SemesterPublication.objects.create(
            file=file,
            semester=semester,
            order=request.data['order'],
        )
        publication.generate_name()
        publication.file.save(publication.name, file)
        return Response(status=status.HTTP_201_CREATED)
Exemplo n.º 2
0
 def download_publication(self, request, pk=None):
     publication = self.get_object()
     response = HttpResponse(publication.file,
                             content_type=mime_type(publication.file))
     response[
         'Content-Disposition'] = f'attachment; filename="{publication.name}"'
     return response
Exemplo n.º 3
0
    def upload_solution(self, request, pk=None):
        problem = self.get_object()

        if not request.user.is_authenticated:
            raise exceptions.PermissionDenied('Je potrebné sa prihlásiť')

        event_registration = EventRegistration.get_registration_by_profile_and_event(
            request.user.profile, problem.series.semester)

        if event_registration is None:
            raise exceptions.MethodNotAllowed(method='upload-solutuion')

        if 'file' not in request.data:
            raise exceptions.ParseError(detail='Request neobsahoval súbor')

        file = request.data['file']
        if mime_type(file) != 'application/pdf':
            raise exceptions.ParseError(
                detail='Riešenie nie je vo formáte pdf')
        late_tag = problem.series.get_actual_late_flag()
        solution = Solution.objects.create(
            problem=problem,
            semester_registration=event_registration,
            late_tag=late_tag,
            is_online=True)
        solution.solution.save(solution.get_solution_file_name(),
                               file,
                               save=True)

        return Response(status=status.HTTP_201_CREATED)
Exemplo n.º 4
0
    def clean(self, *args, **kwargs):
        file = super().clean(*args, *kwargs)

        if self.max_size and file.size > self.max_size:
            raise ValidationError(
                'Prekročená maximálna povolená veľkosť súboru')

        if self.content_types and mime_type(file) not in self.content_types:
            raise ValidationError('Nepovolený typ súboru')

        return file
Exemplo n.º 5
0
    def upload_publication(self, request):
        if 'file' not in request.data:
            raise exceptions.ParseError(detail='Request neobsahoval súbor')

        file = request.data['file']
        if mime_type(file) not in ['application/pdf', 'application/zip']:
            raise exceptions.ParseError(detail='Nesprávny formát')

        event = Event.objects.filter(pk=request.data['event']).first()
        publication = UnspecifiedPublication.objects.create(file=file,
                                                            event=event)
        publication.generate_name()
        publication.file.save(publication.name, file)
        return Response(status=status.HTTP_201_CREATED)
Exemplo n.º 6
0
    def generate_thumbnail(self, forced=False):
        if mime_type(self.file) != 'application/pdf':
            return

        if self.thumbnail and not forced:
            return

        with self.file.open(mode='rb') as file:
            pil_image = pdf2image.convert_from_bytes(
                file.read(), first_page=1, last_page=1)[0]

        png_image_bytes = BytesIO()
        pil_image.save(png_image_bytes, format='png')
        png_image_bytes.seek(0)

        thumbnail_filename = os.path.splitext(
            os.path.basename(self.file.name))[0] + '.png'

        if self.thumbnail:
            self.thumbnail.delete()

        self.thumbnail.save(
            thumbnail_filename, ContentFile(png_image_bytes.read()))