Example #1
0
    def post(self, oauth, resource_id):
        """ Upload a file """
        d = Deposition.get(resource_id, user=current_user)

        # Bail-out early if not permitted (add_file will also check, but then
        # we already uploaded the file)
        if not d.authorize('add_file'):
            raise ForbiddenAction('add_file', d)

        uploaded_file = request.files['file']
        filename = secure_filename(
            request.form.get('filename') or uploaded_file.filename
        )

        df = DepositionFile(backend=DepositionStorage(d.id))

        if df.save(uploaded_file, filename=filename):
            try:
                d.add_file(df)
                d.save()
            except FilenameAlreadyExists as e:
                df.delete()
                raise e

        return d.type.marshal_file(df), 201
Example #2
0
    def post(self, resource_id):
        """Upload a file."""
        d = Deposition.get(resource_id, user=current_user)

        # Bail-out early if not permitted (add_file will also check, but then
        # we already uploaded the file)
        if not d.authorize('add_file'):
            raise ForbiddenAction('add_file', d)

        uploaded_file = request.files['file']
        filename = secure_filename(
            request.form.get('filename') or uploaded_file.filename
        )

        df = DepositionFile(backend=DepositionStorage(d.id))

        if df.save(uploaded_file, filename=filename):
            try:
                d.add_file(df)
                d.save()
            except FilenameAlreadyExists as e:
                df.delete()
                raise e

        return d.type.marshal_file(df), 201
Example #3
0
def save_deposition_file(deposition, filename, file_path):
    """Save files in Deposition."""
    with open(file_path) as fd:
        df = DepositionFile(backend=DepositionStorage(deposition.id))
        if df.save(fd, filename=filename):
            deposition.add_file(df)
            deposition.save()
Example #4
0
def deposition_with_files(files, user_id=None, deposition_id=None):
    """Add very big files to a deposition."""
    if deposition_id:
        d = Deposition.get(deposition_id)
    else:
        d = Deposition.create(User.query.get(user_id))

    for filepath in files:
        with open(filepath, "rb") as fileobj:
            filename = os.path.basename(filepath)
            df = DepositionFile(backend=DepositionStorage(d.id))
            df.save(fileobj, filename=filename)
            d.add_file(df)
    return d