Giter VIP home page Giter VIP logo

python-resumable's Introduction

Python-resumable

Well, in order to explain what is Python-resumable we have to explain what is ResumableJS. ResumableJS is a JavaScript library providing multiple simultaneous, stable and resumable uploads via the HTML5 File API. And python-resumable is a universal hookup for resumablejs. We'd like to create an interface that works regardless of which framework you use.

It has a universal hookup, that takes chunks as base64 strings, and currently it has a Flask-specific hookup that takes Flask file objects. We'd like to add Pyramid and Django hooks.

Instalation

Simple as that:

pip install python_resumable

Usage

It's rather simple to use. It has to take 5 Resumable headers, your upload and tmp directory and file data as well.

Here's a simple Flask example.

from flask import Flask, request, jsonify
from python_resumable import FlaskUploader


app = Flask(__name__)

@app.route('/uploads', methods=['GET'])
def check_status():
    """This route works with get checks from resumable"""

    resumable_dict = {
        'resumableIdentifier': request.args.get('resumableIdentifier'),
        'resumableFilename': request.args.get('resumableFilename'),
        'resumableTotalSize': request.args.get('resumableTotalSize'),
        'resumableTotalChunks': request.args.get('resumableTotalChunks'),
        'resumableChunkNumber': request.args.get('resumableChunkNumber')
    }

    resumable = FlaskUploader(resumable_dict,
                              '/home/user/uploads',
                              '/home/user/tmp',
                              request.files['file'])

    if resumable.chunk.exists() is True:
        return jsonify({"chunkUploadStatus": True})

    return jsonify({"chunkUploadStatus": False}), 204


@app.route('/uploads', methods=['POST'])
def upload_file():

    resumable_dict = {
        'resumableIdentifier': request.form.get('resumableIdentifier'),
        'resumableFilename': request.form.get('resumableFilename'),
        'resumableTotalSize': request.form.get('resumableTotalSize'),
        'resumableTotalChunks': request.form.get('resumableTotalChunks'),
        'resumableChunkNumber': request.form.get('resumableChunkNumber')
    }

    resumable = FlaskUploader(resumable_dict,
                              '/home/user/uploads',
                              '/home/user/tmp',
                              request.files['file'])

    resumable.upload_chunk()
    
    if resumable.check_status() is True:
        resumable.assemble_chunks()
        return jsonify({"fileUploadStatus": True,
                        "resumableIdentifier": resumable.repo.file_id})

    return jsonify({"chunkUploadStatus": True,
                    "resumableIdentifier": resumable.repo.file_id})

Well... As simple as it could actually get with Resumable.

Mini-reference

This package provides you with two usable classes -- Uploader and FlaskUploader. They are essentially identical, except for the type of chunk-data they take.

Arguments on creation:

  • resumable_dict: contains Resumable data in a dictionary form, namely: 'resumableIdentifier', 'resumableFilename', 'resumableTotalSize', 'resumableTotalChunks', 'resumableChunkNumber'
  • upload_dir: contains path to your final directory where the file will be assembled.
  • tmp_dir: contains path to temporary directory, where it will store the chunks.
  • chunk_data: contains data transfered with the chunk. Uploader takes generic b64 strings, FlaskUploader takes Flask file objects.

Attributes:

  • Chunk: Stores chunk-related data. For full inforamtion -- refer to the full reference.
  • Repository: Stores data related to the end file. For full inforamtion -- refer to the full reference.

Methods:

  • upload_chunk: If chunk already exists returns False, else saves chunk to tmp_dir/resumableId/chunk_name and returns True.
  • check_status: If all chunks are in tmp returns True, else returns False.
  • assemble_chunks: Assembles all of the chunks in your upload_dir. If filename is not specified uses resumableFilename.
  • cleanup: Deletes all the data from tmp_dir/resumableId.

Full reference can be found in docstrings.

Links

python-resumable's People

Contributors

reriiru avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

python-resumable's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.