Skip to main content

Facebook-like implementation of batch requests

Project description

PyPI version Travis CI Coverage Status Code Health Python Versions Implementation

Quick start

examples:

curl -X POST \
  http://127.0.0.1:8000/batch/ \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{"batch": [
    {
        "method": "get",
        "relative_url": "/test/",
        "name": "yolo"
    },
    {
        "method": "post",
        "relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
        "body": {"data": {"id": "{result=yolo:$.id}", "ids": "{result=yolo:$.data.*.id}"}, "test": "yolo"}
    },
    {
        "method": "post",
        "relative_url": "/test/",
        "body": "{\"data\": 42}",
        "omit_response_on_success": true
    },
    {
        "method": "options",
        "relative_url": "/test/"
    }
]
}'

using file uploading

curl -X POST \
  http://127.0.0.1:8000/batch/ \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F 'batch=[
    {
        "method": "get",
        "relative_url": "/test/",
        "name": "yolo"
    },
    {
        "method": "post",
        "relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
        "body": {"data": "{result=yolo:$.data.*.id}", "test": "yolo"},
        "attached_files":{"file": "a.jpg"}
    },
    {
        "method": "post",
        "relative_url": "/test/",
        "body": "{\"data\": 42}",
        "omit_response_on_success": true,
        "attached_files":["a.jpg", "b.png"]
    },
    {
        "method": "options",
        "relative_url": "/test/"
    }
]' \
  -F b.png=@2476.png \
  -F a.jpg=@check_133.pdf

Future features:

  • add support for requests pipelining. use responses as arguments to next requests (done)
  • build graph based on requests dependencies & run simultaneously independent.
  • [STRIKEOUT:switchable atomic support. true - all fails if something wrong. else - fail only dependent (can be very hard to support on front-end side, but for now seems as good feature)] run all requests in single transaction. (done)
  • [STRIKEOUT:use native django. we don’t use complicated things that require drf for work. all can be done with “naked” django.] (since we validate requests with drf serializers, it’s better to leave as it is).
  • support files uploading (done)

Dependencies:

  • Django starting from 2.2
  • Django rest framework

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for drf-batch-requests, version 0.9.3
Filename, size File type Python version Upload date Hashes
Filename, size drf_batch_requests-0.9.3-py3-none-any.whl (82.0 kB) File type Wheel Python version 3.6 Upload date Hashes View
Filename, size drf-batch-requests-0.9.3.tar.gz (38.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page