def upload_multiple_files(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == 'POST': if settings.READ_ONLY: return HttpResponse('Upload is disabled for a few hours', status=401) form = MultipleUploadFileForm(request.POST, request.FILES) if form.is_valid(): for attachment in form.cleaned_data['files']: name, extension = os.path.splitext(attachment.name) name = logic.clean_filename(name) document = logic.add_file_to_course( file=attachment, name=name, extension=extension, course=course, tags=[], user=request.user ) document.add_to_queue() return HttpResponseRedirect(reverse('course_show', args=[course.slug])) return HttpResponseRedirect(reverse('document_put', args=(course.slug,)))
def upload_multiple_files(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == 'POST': if settings.READ_ONLY: return HttpResponse('Upload is disabled for a few hours', status=401) form = MultipleUploadFileForm(request.POST, request.FILES) if form.is_valid(): for attachment in form.cleaned_data['files']: name, extension = os.path.splitext(attachment.name) name = logic.clean_filename(name) document = logic.add_file_to_course(file=attachment, name=name, extension=extension, course=course, tags=[], user=request.user) document.add_to_queue() return HttpResponseRedirect( reverse('course_show', args=[course.slug])) return HttpResponseRedirect(reverse('document_put', args=(course.slug, )))
def test_no_extension(user, course): doc = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\n/\x00\x00\t\x81\x08\x06\x00\x00\x00'\x06\xfee\x00\x00\x00\tpHYs\x00\x00n\xba\x00\x00n\xba\x01\xd6\xde\xb1\x17\x00\x00\x00\x19tEXtSoftware\x00www.inkscape.org\x9b\xee<\x1a\x00\x00 \x00IDATx" file = BytesIO(doc) file.size = len(doc) doc = logic.add_file_to_course(file, "My document", "", course, [], user) assert doc assert doc.file_type == ".png"
def upload_file(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == "POST": if settings.READ_ONLY: return HttpResponse("Upload is disabled for a few hours", status=401) form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): file = request.FILES["file"] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if form.cleaned_data["name"]: name = form.cleaned_data["name"] document = logic.add_file_to_course( file=file, name=name, extension=extension, course=course, tags=form.cleaned_data["tags"], user=request.user, ) document.description = form.cleaned_data["description"] document.save() document.add_to_queue() return HttpResponseRedirect( reverse("catalog:course_show", args=[course.slug]) ) else: form = UploadFileForm() multiform = MultipleUploadFileForm() return render( request, "documents/document_upload.html", { "form": form, "multiform": multiform, "course": course, }, )
def test_add_file_to_course(user, course): Tag.objects.create(name="tag one") tags = ["tag one", "tag two", Tag.objects.create(name="tag three")] file = StringIO("mybinarydocumentcontent") file.size = len("mybinarydocumentcontent") doc = logic.add_file_to_course(file, "My document", ".dll", course, tags, user) assert doc assert doc in course.document_set.all() assert doc.name == "My document" assert doc.state == 'READY_TO_QUEUE' assert Tag.objects.count() == 3 assert doc.tags.count() == 3
def create_documents(self, courses, documents): for doc in documents: if not doc['download_id']: if self.verbose: self.stdout.write( self.style.WARNING('SKIP: not downloaded yet: %s' % doc)) continue course = courses[doc['course_id']] pattern = path.join(self.dump_dir, str(doc['download_id'])) + '.*' matching_files = glob(pattern) if len(matching_files) != 1: if self.verbose: self.stdout.write( self.style.WARNING('SKIP: no single file with id=%d' % doc['download_id'])) continue srckey = self.source + '?document_id=%d' % doc['document_id'] filename = matching_files[0] _, extension = os.path.splitext(filename) if extension in settings.REJECTED_FILE_FORMATS: if self.verbose: self.stdout.write( self.style.WARNING( 'REJECT: %s has a wrong format (%s)' % (doc['download_id'], extension))) continue name = logic.clean_filename(doc['name']) document = logic.add_file_to_course( file=File(open(filename, 'rb')), name=name, extension=extension, course=course, tags=[], user=self.user, import_source=srckey, ) if document: document.add_to_queue() self.stdout.write( self.style.SUCCESS('Enqueued "%s" (pk %s) for processing' % (document, document.id)))
def import_document_from_path(doc_path, course, user): filename = os.path.split(doc_path)[1] tags, filename = extract_tags(filename) name, extension = os.path.splitext(filename) name = logic.clean_filename(name) document = logic.add_file_to_course( file=File(open(doc_path)), name=name, extension=extension, course=course, tags=tags, user=user ) document.add_to_queue()
def create_documents(self, courses, documents): for doc in documents: if not doc['download_id']: if self.verbose: self.stdout.write(self.style.WARNING( 'SKIP: not downloaded yet: %s' % doc )) continue course = courses[doc['course_id']] pattern = path.join(self.dump_dir, str(doc['download_id'])) + '.*' matching_files = glob(pattern) if len(matching_files) != 1: if self.verbose: self.stdout.write(self.style.WARNING( 'SKIP: no single file with id=%d' % doc['download_id'] )) continue srckey = self.source + '?document_id=%d' % doc['document_id'] filename = matching_files[0] _, extension = os.path.splitext(filename) if extension in settings.REJECTED_FILE_FORMATS: if self.verbose: self.stdout.write(self.style.WARNING( 'REJECT: %s has a wrong format (%s)' % (doc['download_id'], extension) )) continue name = logic.clean_filename(doc['name']) document = logic.add_file_to_course( file=File(open(filename, 'rb')), name=name, extension=extension, course=course, tags=[], user=self.user, import_source=srckey, ) if document: document.add_to_queue() self.stdout.write(self.style.SUCCESS( 'Enqueued "%s" (pk %s) for processing' % (document, document.id) ))
def upload_multiple_files(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == "POST": form = MultipleUploadFileForm(request.POST, request.FILES) if form.is_valid(): for attachment in form.cleaned_data["files"]: name, extension = os.path.splitext(attachment.name) name = logic.clean_filename(name) document = logic.add_file_to_course( file=attachment, name=name, extension=extension, course=course, tags=[], user=request.user ) document.add_to_queue() return HttpResponseRedirect(reverse("course_show", args=[course.slug])) return HttpResponseRedirect(reverse("document_put", args=(course.slug,)))
def import_document_from_path(doc_path, course, user): filename = os.path.split(doc_path)[1] tags, filename = extract_tags(filename) name, extension = os.path.splitext(filename) name = logic.clean_filename(name) with open(doc_path, "rb") as fd: document = logic.add_file_to_course( file=File(fd), name=name, extension=extension, course=course, tags=tags, user=user, ) document.add_to_queue()
def upload_file(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == 'POST': if settings.READ_ONLY: return HttpResponse('Upload is disabled for a few hours', status=401) form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): file = request.FILES['file'] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if form.cleaned_data['name']: name = form.cleaned_data['name'] document = logic.add_file_to_course( file=file, name=name, extension=extension, course=course, tags=form.cleaned_data['tags'], user=request.user ) document.description = form.cleaned_data['description'] document.save() document.add_to_queue() return HttpResponseRedirect(reverse('course_show', args=[course.slug])) else: form = UploadFileForm() multiform = MultipleUploadFileForm() return render(request, 'documents/document_upload.html', { 'form': form, 'multiform': multiform, 'course': course, })
def upload_file(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == 'POST': if settings.READ_ONLY: return HttpResponse('Upload is disabled for a few hours', status=401) form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): file = request.FILES['file'] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if form.cleaned_data['name']: name = form.cleaned_data['name'] document = logic.add_file_to_course(file=file, name=name, extension=extension, course=course, tags=form.cleaned_data['tags'], user=request.user) document.description = form.cleaned_data['description'] document.save() document.add_to_queue() return HttpResponseRedirect( reverse('course_show', args=[course.slug])) else: form = UploadFileForm() multiform = MultipleUploadFileForm() return render(request, 'documents/document_upload.html', { 'form': form, 'multiform': multiform, 'course': course, })
def create(self, validated_data): file = validated_data['file'] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if validated_data['name']: name = validated_data['name'] document = logic.add_file_to_course( file=file, name=name, extension=extension, course=validated_data['course'], tags=validated_data['tags'], user=self.context['request'].user ) document.description = validated_data['description'] document.save() document.add_to_queue() return document
def test_add_file_to_course(user, course): Tag.objects.create(name="tag one") tags = ["tag one", "tag two", Tag.objects.create(name="tag three")] file = StringIO.StringIO("mybinarydocumentcontent") file.size = len("mybinarydocumentcontent") doc = logic.add_file_to_course( file, "My document", ".dll", course, tags, user ) assert doc assert doc in course.document_set.all() assert doc.name == "My document" assert doc.state == 'READY_TO_QUEUE' assert Tag.objects.count() == 3 assert doc.tags.count() == 3
def upload_file(request, slug): course = get_object_or_404(Course, slug=slug) if request.method == "POST": form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): file = request.FILES["file"] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if form.cleaned_data["name"]: name = form.cleaned_data["name"] document = logic.add_file_to_course( file=file, name=name, extension=extension, course=course, tags=form.cleaned_data["tags"], user=request.user, ) document.description = form.cleaned_data["description"] document.save() document.add_to_queue() return HttpResponseRedirect(reverse("course_show", args=[course.slug])) else: form = UploadFileForm() multiform = MultipleUploadFileForm() return render(request, "documents/document_upload.html", {"form": form, "multiform": multiform, "course": course})
def create(self, validated_data) -> Document | None: file = validated_data["file"] name, extension = os.path.splitext(file.name) name = logic.clean_filename(name) if validated_data["name"]: name = validated_data["name"] document = logic.add_file_to_course( file=file, name=name, extension=extension, course=validated_data["course"], tags=validated_data["tags"], user=self.context["request"].user, ) if document: document.description = validated_data["description"] document.save() document.add_to_queue() return document