Skip to main content

HTTP/2 Server Push for your Flask apps.

Project description

HTTP/2 Server Push for your Flask apps.

Installation

pip install flask-firehose

Usage

Initialization

Direct initialization:

app = Flask(__name__)
Firehose(app)

With application factories:

firehose = Firehose()

def create_app():
    app = Flask(__name__)
    firehose.init_app(app)
    return app

Pushing resources

Let the HTML template writer decide what to push:

{% extends 'base.html' %}
{% block body %}
    <link rel="stylesheet" href="{{ push('/static/css/main.css', as='style', rel='preload') }}">
    This is some document.
{% endblock %}

Let the backend developer decide what to push:

from flask_firehose import push

@app.route('/someroute')
def render_someroute():
    push('/static/css/main.css', **{'as': 'style', 'rel': 'preload'})
    return render_template('some_template')

Tracking pushed resources

Ideally, resources already pushed during a session shouldn’t be pushed again. So, Flask-Firehose includes a simple utility class to track pushed resources using session variable ‘h2-pushed’. Additionally, Flask-Firehose can also work with external code to track pushed resources in case the provided implementation is unsuitable.

class Custom_connector():

    def get_pushed(self):
        """Returns a set of items that have been already pushed to client.

        Returns
        -------
        set
            Set of items that are pushed.

        """
        # your code here

    def set_pushed(self, inset):
        """Update client state after pushing more items at the end of request.

        Parameters
        ----------
        inset : set
            A set of URLs of pushed items.
        """
        # your code here

Using custom connector with Firehose

firehose = Firehose(connector=Custom_connector())
firehose.init_app(app)

Configure NGINX

location = /myapp {
    proxy_pass http://upstream;
    http2_push_preload on;
}

Read more at: https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/

Testing

To initialize a development environment in ./venv:

make devenv

To run unit tests:

make test

To run integration testing with NGINX with docker:

make dockertest

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

Flask_Firehose-0.2.3-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file Flask_Firehose-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: Flask_Firehose-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.5

File hashes

Hashes for Flask_Firehose-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 78303033ca873753b4fdb4920d0c16a9f396f2d4a905aefebe34bfe19c35cde2
MD5 eeaadd4c518ff6d893be910c416e5787
BLAKE2b-256 8006f8f540998ef7bc85b0645732ce2b4eca155d3bbe02a80e8c1386e6731530

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page