Ejemplo n.º 1
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Upload(filePath = request.FILES['docfile'])
            newdoc.owner = request.user

            #Overwrite file if already exist.
            '''documents = Upload.objects.filter(owner=request.user)
            if documents:
                #print os.path.join(MEDIA_ROOT, documents[0].filePath.name)
                os.remove(os.path.join(MEDIA_ROOT, documents[0].filePath.name))
                documents.delete()'''
            newdoc.save()

            # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('upload.views.upload'))
    else:
        form = UploadForm()

    documents = Upload.objects.filter(owner=request.user)
    return render_to_response(
                'upload/upload.html',
                {'form':form, 'documents': documents},
                context_instance=RequestContext(request)
            )
Ejemplo n.º 2
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Upload(filePath=request.FILES['docfile'])
            newdoc.owner = request.user

            #Overwrite file if already exist.
            '''documents = Upload.objects.filter(owner=request.user)
            if documents:
                #print os.path.join(MEDIA_ROOT, documents[0].filePath.name)
                os.remove(os.path.join(MEDIA_ROOT, documents[0].filePath.name))
                documents.delete()'''
            newdoc.save()

            # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('upload.views.upload'))
    else:
        form = UploadForm()

    documents = Upload.objects.filter(owner=request.user)
    return render_to_response('upload/upload.html', {
        'form': form,
        'documents': documents
    },
                              context_instance=RequestContext(request))
Ejemplo n.º 3
0
def submit_ids(user: User):
    """
    Route to create ids upload package.

    User must be in `INFO_VERIFIED` state.
    Will transition user to `ID_NOT_VERIFIED`

    One should call `/v1/ids/<id>/verify` in order to actually start verification process (see docs there)
    """
    if user.state != INFO_VERIFIED:
        raise InvalidState(user.state)

    schema = Schema(
        {
            'upload1':
            Coerce(ObjectId),
            'upload2':
            Coerce(ObjectId),
            'doc_type':
            In(DOC_TYPES),
            'doc_country':
            All(Length(2, 2), str),
            Optional('doc_state', default=None):
            Any(None, All(Length(2, 20), str)),
        },
        extra=REMOVE_EXTRA,
        required=True)
    data = schema(request.json)
    upload1 = Upload.objects(user=user, id=data['upload1']).get()
    upload2 = Upload.objects(user=user, id=data['upload2']).get()

    try:
        if not (upload1.stored_size <= 4 * 1024 * 1024):
            raise ValidationError('Invalid image size')

        if not (upload2.stored_size <= 4 * 1024 * 1024):
            raise ValidationError('Invalid image size')
    except KeyError as err:
        raise MissingFile(str(err))

    id_upload = IDUpload.create(
        user=user,
        upload1=upload1,
        upload2=upload2,
        doc_country=data['doc_country'],
        doc_state=data['doc_state'],
        doc_type=data['doc_type'],
    )

    user.update(doc_type=data['doc_type'])
    user.transition(ID_NOT_VERIFIED)

    return jsonify(id_upload.to_json()), 201
Ejemplo n.º 4
0
def uploadAssignment(request, assignmentID):
    if request.method == 'POST':
        assignment = get_object_or_404(Assignment, pk=assignmentID)
        form = UploadForm(request.POST,
                          request.FILES,
                          assignment_model_obj=assignment)
        if form.is_valid():
            newUpload = Upload(owner=request.user,
                               assignment=assignment,
                               filePath=request.FILES['docfile'])
            newUpload.save()
        else:
            return form.errors
Ejemplo n.º 5
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            path = handle_uploaded_file(request.FILES['file'], request.user)
            local_name = request.FILES['file'].name
            local_name = local_name.split("/")[-1]
            up = Upload(local_name=local_name, remote_path = path, user=request.user, type=request.POST['type'])
            up.save()
            return HttpResponseRedirect("/upload/")
    else:
        form = UploadForm()
    return render(request, 'upload/upload.html', {'form': form})
Ejemplo n.º 6
0
def uploadAssignment(request, assignmentID):
    if request.method == 'POST':
        assignment = get_object_or_404(Assignment, pk=assignmentID)
        form = UploadForm(request.POST, request.FILES, assignment_model_obj=assignment)
        if form.is_valid():
            newUpload = Upload(
                               owner = request.user,
                               assignment = assignment,
                               filePath = request.FILES['docfile']
                            )
            newUpload.save()
        else:
            return form.errors
Ejemplo n.º 7
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            path = handle_uploaded_file(request.FILES['file'], request.user)
            local_name = request.FILES['file'].name
            local_name = local_name.split("/")[-1]
            up = Upload(local_name=local_name, remote_path = path, user=request.user, type=request.POST['type'])
            up.save()
            return HttpResponseRedirect("/upload/")
    else:
        form = UploadForm()
    return render(request, 'upload/upload.html', {'form': form})
Ejemplo n.º 8
0
def export_async(update: telegram.Update, state: str):
    now = datetime.datetime.utcnow().isoformat()
    filename = f'Export.{now}.{ObjectId()}.csv'
    signed_url = s3.sign_url(filename, method='GET', expire=1800)

    with StringIO() as fh:
        export_count = export(fh, state=state)
        fh.seek(0)

        Upload.upload(fh.read(), filename, 'text/csv')
        update.message.reply_text(
            f'Exported *{export_count}* users to {signed_url}',
            parse_mode=telegram.ParseMode.MARKDOWN,
            quote=False,
        )
Ejemplo n.º 9
0
 def inner(user: User, **kwargs) -> Upload:
     return Upload.create(
         user=user,
         original_filename=kwargs.get('filename', 'example.jpg'),
         content_type=kwargs.get('content_type', 'image/jpg'),
         size=kwargs.get('size', 5 * 1024),
     )
Ejemplo n.º 10
0
def test_base64(user):
    data = BytesIO(b'Hello')
    with patch('upload.s3.s3.get', return_value=data.read()):
        res = Upload(user=user,
                     original_filename='blop',
                     content_type='image/png').to_base64()
        assert res == 'image/png;base64,SGVsbG8='
Ejemplo n.º 11
0
def new_upload(user: User):
    schema = Schema(
        {
            'filename': All(Length(3, 250), str),
            'content_type': All(Length(5, 20), str),
            'size': Range(100, 4 * 1024 * 1024),  # 400KB..4MB
        },
        extra=REMOVE_EXTRA,
        required=True)
    data = schema(request.json)

    try:
        ext = data['filename'].split('.')[1].lower()
    except:
        raise ValidationError('Invalid file')

    # if ext not in ['gif', 'jpeg', 'jpg', 'png']:
    #     raise ValidationError('Invalid file')

    upload = Upload.create(
        user=user,
        original_filename=data['filename'],
        content_type=data['content_type'],
        size=data['size'],
    )
    return jsonify({'put_url': upload.put_url, 'id': str(upload.id)})
Ejemplo n.º 12
0
def list_file(request):
    # file upload view
    if request.method == "POST":
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            newfile = Upload(upload_file=request.FILES["upload_file"], username=request.user.username)
            newfile.save()

            # Redirect to the file list after POST
            return HttpResponseRedirect("")
    else:
        form = UploadForm()  # A empty, unbound form

    # Load documents for the list page
    files = Upload.objects.all().filter(username=request.user.username)

    # Render list page with the documents and the form
    return render_to_response(
        "upload/list_file.html", {"files": files, "form": form}, context_instance=RequestContext(request)
    )
Ejemplo n.º 13
0
def test_upload(service, user, token):
    data = {
        'filename': 'blop.jpg',
        'content_type': 'image/jpeg',
        'size': 500 * 1024,
    }
    res = service.post('/v1/upload', data, auth=token(user))
    assert res.status_code == 200, res.json

    upload = Upload.objects().get()
    assert upload.user == user
    assert upload.filename == f'{user.id}/{upload.id}.jpg'
Ejemplo n.º 14
0
def list_file(request):
    # file upload view
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            newfile = Upload(upload_file = request.FILES['upload_file'],username=request.user.username)
            newfile.save()

            # Redirect to the file list after POST
            return HttpResponseRedirect('')
    else:
        form = UploadForm() # A empty, unbound form

    # Load documents for the list page
    files = Upload.objects.all().filter(username = request.user.username)

    # Render list page with the documents and the form
    return render_to_response(
        'upload/list_file.html',
        {'files': files, 'form': form},
        context_instance=RequestContext(request)
    )
Ejemplo n.º 15
0
def file_upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            username = request.user.username
            filename=form.cleaned_data['file_url']
            file_url=form.cleaned_data['file_url']
            #pdb.set_trace()
            efile_upload=Upload()
            efile_upload.user_name=username
            efile_upload.title_name = filename
            efile_upload.file_url = file_url
            efile_upload.file_size=request.FILES['file_url'].size # Get the size of uploaded file from file's object
            efile_upload.save()
        #return HttpResponse(str(filename)+' had uploaded Success')
            messages.success(request,'上传成功')
    else:
        form = UploadForm()
    return render(request, 'upload/upload.html', {'form': form})
Ejemplo n.º 16
0
def profile(request):
    if request.method == 'POST':
        image_file = request.FILES['image_file']
        image_type = request.POST['image_type']
        if settings.USE_S3:
            if image_type == 'private':
                upload = UploadPrivate(file=image_file)
            else:
                upload = Upload(file=image_file)
            upload.save()
            image_url = upload.file.url
        else:
            fs = FileSystemStorage()

            ext = image_file.name.split('.')[-1]
            _filename = "%s.%s" % (uuid.uuid4(), ext)

            filename = fs.save(_filename, image_file)
            image_url = fs.url(filename)
        return render(request, 'profile.html', {'image_url': image_url})
    return render(request, 'profile.html')
Ejemplo n.º 17
0
def detailsAssignment(request, assignmentID):
    assignment = get_object_or_404(Assignment, pk=assignmentID)
    course = assignment.course
    course_history = CourseHistory.objects.get(course_id=course,
                                               user_id=request.user.id)
    course_info = CourseInfo.objects.get(pk=course.course_info_id)
    is_creator = isCourseCreator(course, request.user)
    is_moderator = isCourseModerator(course, request.user)

    has_joined = CourseHistory.objects.filter(course_id=course,
                                              user_id=request.user.id)
    if assignment.late_submission_allowed:
        submission_allowed = (timezone.now() <=
                              assignment.hard_deadline) and bool(has_joined)
    else:
        submission_allowed = (timezone.now() <=
                              assignment.deadline) and bool(has_joined)

    is_due = (timezone.now() >= assignment.deadline)  # and bool(has_joined)

    if request.method == "POST" and submission_allowed:
        form = UploadForm(request.POST,
                          request.FILES,
                          assignment_model_obj=assignment)
        if form.is_valid():
            older_upload = Upload.objects.filter(owner=request.user,
                                                 assignment=assignment)
            if older_upload:
                older_upload[0].delete()
            newUpload = Upload(owner=request.user,
                               assignment=assignment,
                               filePath=request.FILES['docfile'])
            newUpload.save()
            return HttpResponseRedirect(
                reverse('assignments_details',
                        kwargs={'assignmentID': assignmentID}))
    else:
        form = UploadForm()

    perror_ctype = ContentType.objects.get_for_model(ProgramErrors)
    terror_ctype = ContentType.objects.get_for_model(TestcaseErrors)
    program_errors = []
    test_errors = []

    for error in AssignmentErrors.objects.filter(assignment=assignment,
                                                 content_type=terror_ctype):
        test_errors.extend(TestcaseErrors.objects.filter(pk=error.object_id))

    for error in AssignmentErrors.objects.filter(assignment=assignment,
                                                 content_type=perror_ctype):
        program_errors.extend(ProgramErrors.objects.filter(pk=error.object_id))

    course = assignment.course
    programs = Program.objects.filter(assignment=assignment)
    #test_cases = Testcase.objects.filter(program__in=programs)

    practice_program = [
        a_program for a_program in programs
        if a_program.program_type == "Practice"
    ]
    programs_with_errors = []

    for aprogram in programs:
        if not aprogram.is_sane:
            try:
                p_error = ProgramErrors.objects.get(program=aprogram)
                programs_with_errors.append(p_error)
            except ProgramErrors.DoesNotExist:
                p_error = None

    submittedFiles = Upload.objects.filter(owner=request.user,
                                           assignment=assignment)

    program_not_ready = False
    disable_grading = False
    if programs_with_errors or submission_allowed == False:
        program_not_ready = True
    if (submittedFiles and submittedFiles[0].is_stale):
        disable_grading = True

    all_assignments = Assignment.objects.filter(
        course=course).order_by('-serial_number')
    if request.user == assignment.creater:
        assignments = all_assignments
    else:
        assignments = [
            a for a in all_assignments if a.publish_on <= timezone.now()
        ]

    total_sumissions = Upload.objects.filter(assignment=assignment).count()
    isSubmitted = Upload.objects.filter(assignment=assignment).count() > 0
    get_params = {'source': 'assignment', 'id': assignmentID}

    return render_to_response(
        'assignments/details.html',
        {
            'assignment': assignment,
            'course': course,
            'has_joined': has_joined,
            'is_moderator': is_moderator,
            'programs': programs,
            'form': form,
            'submission_allowed': submission_allowed,
            'submittedFiles': submittedFiles,
            'programs_with_errors': programs_with_errors,
            'disable_grading': disable_grading,
            'program_not_ready': program_not_ready,
            'practice_program': practice_program,
            'assignments': assignments,
            'program_errors': program_errors,
            'test_errors': test_errors,
            'published': assignment.publish_on <= timezone.now(),
            'is_due': is_due,
            'isSubmitted': isSubmitted,
            'date_time': timezone.now(),
            'get_params': get_params,
            'total_sumissions': total_sumissions
        },
        context_instance=RequestContext(request),
    )
Ejemplo n.º 18
0
def test_stored_size(user):
    with patch('upload.s3.S3.file_size', return_value=1234):
        res = Upload(user=user,
                     original_filename='blop',
                     content_type='image/png').stored_size
        assert res == 1234
Ejemplo n.º 19
0
def detailsAssignment(request, assignmentID):
    assignment = get_object_or_404(Assignment, pk=assignmentID)
    course = assignment.course
    course_history = CourseHistory.objects.get(course_id=course, user_id=request.user.id)
    course_info = CourseInfo.objects.get(pk=course.course_info_id)
    is_creator = isCourseCreator(course, request.user)
    is_moderator = isCourseModerator(course, request.user)

    has_joined = CourseHistory.objects.filter(course_id=course, user_id=request.user.id)
    if assignment.late_submission_allowed:
        submission_allowed = (timezone.now() <= assignment.hard_deadline) and bool(has_joined)
    else:
        submission_allowed = (timezone.now() <= assignment.deadline) and bool(has_joined)

    is_due = (timezone.now() >= assignment.deadline)# and bool(has_joined)

    if request.method == "POST" and submission_allowed:
        form = UploadForm(request.POST, request.FILES, assignment_model_obj=assignment)
        if form.is_valid():
            older_upload = Upload.objects.filter(
                                owner=request.user,
                                assignment=assignment
                            )
            if older_upload:
                older_upload[0].delete()
            newUpload = Upload(
                            owner=request.user,
                            assignment=assignment,
                            filePath=request.FILES['docfile']
                        )
            newUpload.save()
            return HttpResponseRedirect(reverse('assignments_details', kwargs={'assignmentID':assignmentID}))
    else:
        form = UploadForm()

    perror_ctype = ContentType.objects.get_for_model(ProgramErrors)
    terror_ctype = ContentType.objects.get_for_model(TestcaseErrors)
    program_errors = []
    test_errors = []

    for error in AssignmentErrors.objects.filter(assignment=assignment, content_type=terror_ctype):
        test_errors.extend(TestcaseErrors.objects.filter(pk=error.object_id))

    for error in AssignmentErrors.objects.filter(assignment=assignment, content_type=perror_ctype):
        program_errors.extend(ProgramErrors.objects.filter(pk=error.object_id))


    course = assignment.course
    programs = Program.objects.filter(assignment=assignment)
    #test_cases = Testcase.objects.filter(program__in=programs)

    practice_program = [a_program for a_program in programs if a_program.program_type == "Practice"]
    programs_with_errors = []

    for aprogram in programs:
        if not aprogram.is_sane:
            try:
                p_error = ProgramErrors.objects.get(program=aprogram)
                programs_with_errors.append(p_error)
            except ProgramErrors.DoesNotExist:
                p_error = None

    submittedFiles = Upload.objects.filter(owner=request.user, assignment=assignment)
    
    program_not_ready = False
    disable_grading = False
    if programs_with_errors or submission_allowed == False:
    	program_not_ready = True
    if (submittedFiles and submittedFiles[0].is_stale) :
        disable_grading = True

    all_assignments = Assignment.objects.filter(course=course).order_by('-serial_number')
    if request.user == assignment.creater:
        assignments = all_assignments
    else:
        assignments = [a for a in all_assignments if a.publish_on <= timezone.now()]

    total_sumissions = Upload.objects.filter(assignment=assignment).count()
    isSubmitted = Upload.objects.filter(assignment=assignment).count() > 0
    get_params = {'source': 'assignment', 'id': assignmentID}

    return render_to_response(
                'assignments/details.html',
                {'assignment': assignment, 'course': course, 'has_joined': has_joined, 'is_moderator':is_moderator,
                'programs': programs, 'form': form, 'submission_allowed': submission_allowed,
                'submittedFiles': submittedFiles, 'programs_with_errors': programs_with_errors,
                'disable_grading': disable_grading, 'program_not_ready':program_not_ready, 'practice_program': practice_program,
                'assignments' : assignments, 'program_errors':program_errors, 'test_errors':test_errors,
                'published': assignment.publish_on <= timezone.now(), 'is_due': is_due,
                'isSubmitted':isSubmitted, 'date_time': timezone.now(), 'get_params': get_params,
                'total_sumissions': total_sumissions},
                context_instance=RequestContext(request),
            )