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
Metadata
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 | Actions Reset |
|---|---|---|---|---|
| Flask_Firehose-0.2.3-py3-none-any.whl | Python 3 | none | any | Details for Flask_Firehose-0.2.3-py3-none-any.whl |
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
|
Security for Flask-Firehose 0.2.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.