mybuddy/reports/utils.py

94 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
def default_graph_layout_options():
"""
Default layout options for all graphs.
:returns: a dict of default options.
"""
return {
'paper_bgcolor': 'rgb(52, 58, 64)',
'plot_bgcolor': 'rgb(52, 58, 64)',
'font': {
'color': 'rgba(255, 255, 255, 1)',
# Bootstrap 4 font family.
'family': '-apple-system, BlinkMacSystemFont, "Segoe UI", '
'Roboto, "Helvetica Neue", Arial, sans-serif, '
'"Apple Color Emoji", "Segoe UI Emoji", '
'"Segoe UI Symbol"',
'size': 14,
},
'margin': {'b': 80, 't': 80},
'xaxis': {
'titlefont': {
'color': 'rgba(255, 255, 255, 0.5)'
},
'gridcolor': 'rgba(0, 0, 0, 0.25)',
'zerolinecolor': 'rgba(0, 0, 0, 0.5)'
},
'yaxis': {
'titlefont': {
'color': 'rgba(255, 255, 255, 0.5)'
},
'gridcolor': 'rgba(0, 0, 0, 0.25)',
'zerolinecolor': 'rgba(0, 0, 0, 0.5)'
}
}
def rangeselector_date():
"""
Graph date range selectors settings for 1w, 2w, 1m, 3m, and all.
:returns: a dict of settings for the selectors.
"""
return {
'bgcolor': 'rgb(35, 149, 86)',
'activecolor': 'rgb(25, 108, 62)',
'buttons': [
{
'count': 7,
'label': '1w',
'step': 'day',
'stepmode': 'backward'
},
{
'count': 14,
'label': '2w',
'step': 'day',
'stepmode': 'backward'
},
{
'count': 1,
'label': '1m',
'step': 'month',
'stepmode': 'backward'
},
{
'count': 3,
'label': '3m',
'step': 'month',
'stepmode': 'backward'
},
{
'step': 'all'
}
]
}
def split_graph_output(output):
"""
Split out of a Plotly graph in to html and javascript.
This function accounts for two output formats from different Plotly
versions: one with a single <script> tag and one with two <script> tags.
:param output: a string of html and javascript comprising the graph.
:returns: a tuple of the the graph's html and javascript.
"""
try:
html, js_graph, js_listener = output.split('<script')
js = js_graph + '<script' + js_listener
except ValueError:
html, js = output.split('<script')
js = '<script' + js
return html, js