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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78303033ca873753b4fdb4920d0c16a9f396f2d4a905aefebe34bfe19c35cde2 |
|
MD5 | eeaadd4c518ff6d893be910c416e5787 |
|
BLAKE2b-256 | 8006f8f540998ef7bc85b0645732ce2b4eca155d3bbe02a80e8c1386e6731530 |