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)
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
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)
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
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)
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()))