Beispiel #1
0
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,)))
Beispiel #2
0
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, )))
Beispiel #3
0
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"
Beispiel #4
0
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,
        },
    )
Beispiel #5
0
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
Beispiel #6
0
    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)
                ))
Beispiel #9
0
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,)))
Beispiel #10
0
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()
Beispiel #11
0
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,
    })
Beispiel #12
0
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,
    })
Beispiel #13
0
    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
Beispiel #15
0
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})
Beispiel #16
0
    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