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
Release files for Flask-Firehose 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| Flask_Firehose-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Release files / Flask_Firehose-0.2.3-py3-none-any.whl
| Download URL | Flask_Firehose-0.2.3-py3-none-any.whl |
|---|---|
| Size | 4.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78303033ca873753b4fdb4920d0c16a9f396f2d4a905aefebe34bfe19c35cde2
|
|
BLAKE2b-256 checksum How to use checksums |
8006f8f540998ef7bc85b0645732ce2b4eca155d3bbe02a80e8c1386e6731530
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|