Skip to content

cainmagi/dash-file-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

32 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Dash File Cache

Banner

GitHub release (latest SemVer) GitHub all releases GitHub PyPI - Downloads

GitHub Actions (Build) GitHub Actions (Release)

Dash File Cache is a Dash extension library.

Utilities for providing convenient methods to serve cached data in Plotly-Dash or Flask.

The data cache enables the following features:

  1. Load a server-side file dynamically and send the file to users (the frontend).
  2. Support in-memory files (like io.BytesIO()) or on-disk files (specified by a path).
  3. Support different kinds of cache (single-thread, multi-processing, or file-based).
  4. Customized components helping the dashboard trigger download events from the server side.

1. Install

Intall the latest released version of this package by using the PyPI source:

python -m pip install dash-file-cache

If users want to install the developer's version, they need to ensure that the following packages are installed.

Then use the following commands to install it.

git clone --depth 1 --single-branch https://github.com/cainmagi/dash-file-cache cd dash-file-cache python -m pip install -r requirements.txt -r requirements-dev.txt yarn install yarn dlx @yarnpkg/sdks vscode yarn build python -m pip install .[dev]

For VSCode users, please install the recommended extensions specified in the project workspace file.

2. Usage

The following codes show a minimal example of this package

from typing import Optional import io import dash from dash import html from dash import Input, Output from dash_file_cache import ServiceData, CachePlain app = dash.Dash("demo") service = ServiceData(CachePlain(1)) service.serve(app) app.layout = html.Div( ( html.Div( html.P( ( html.Span("Get Image:", style={"paddingRight": "0.5rem"}), html.Button(id="btn", children="Image"), ) ) ), html.Div((html.P("Cache address:"), html.P(id="addr"))), html.Div((html.P("Cached Image:"), html.Img(id="cache"))), ), ) @app.callback(  Output("addr", "children"),  Input("btn", "n_clicks"),  prevent_initial_call=True, ) def click_get_image( n_clicks: Optional[int], ): if not n_clicks: return dash.no_update addr = service.register( io.StringIO( R'<svg height="100" width="100" xmlns="http://www.w3.org/2000/svg">' R'<circle r="45" cx="50" cy="50" fill="red" /></svg>' ), content_type="image/svg+xml", mime_type="image/svg+xml", one_time_service=True, ) return addr @app.callback(  Output("cache", "src"),  Input("addr", "children"),  prevent_initial_call=True, ) def update_cache(addr): if not addr: return dash.no_update return addr if __name__ == "__main__": app.run(host="127.0.0.1", port="8080", debug=True)

Check http://127.0.0.1:8080 to see the following results:

The minimal demo
pic-demo-minimal

3. Documentation

Check the documentation to find more details about the examples and APIs.

https://cainmagi.github.io/dash-file-cache/

4. Contributing

See CONTRIBUTING.md πŸ“–

5. Changelog

See Changelog.md πŸ“–