apply default filter

This commit is contained in:
Florian Bezannier
2021-05-14 12:45:58 +02:00
parent 068ceccc93
commit cd15232b4f
4 changed files with 60 additions and 24 deletions
+17 -6
View File
@@ -18,7 +18,6 @@ from mylogger import logger
from my_psacc import MyPSACC
# pylint: disable=invalid-name
app = None
dash_app = None
dispatcher = None
@@ -28,9 +27,15 @@ myp: MyPSACC = None
chc: ChargeControls = None
def start_app(title, base_path, debug: bool, host, port, reloader=False, # pylint: disable=too-many-arguments
unminified=False):
def start_app(*args, **kwargs):
run(config_flask(*args, **kwargs))
def config_flask(title, base_path, debug: bool, host, port, reloader=False, # pylint: disable=too-many-arguments
unminified=False):
global app, dash_app, dispatcher
reload_view = app is not None
app = Flask(__name__)
try:
lang = locale.getlocale()[0].split("_")[0]
locale.setlocale(locale.LC_TIME, ".".join(locale.getlocale())) # make sure LC_TIME is set
@@ -40,7 +45,6 @@ def start_app(title, base_path, debug: bool, host, port, reloader=False, # pyl
logger.warning("Can't get language")
if unminified:
locale_url = ["assets/plotly-with-meta.js"]
app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
app.config["DEBUG"] = debug
if base_path == "/":
@@ -53,8 +57,15 @@ def start_app(title, base_path, debug: bool, host, port, reloader=False, # pyl
server=app, requests_pathname_prefix=requests_pathname_prefix)
dash_app.enable_dev_tools(reloader)
# keep this line
import web.views # pylint: disable=unused-import,import-outside-toplevel
return run_simple(host, port, application, use_reloader=reloader, use_debugger=debug)
import web.views # pylint: disable=import-outside-toplevel
if reload_view:
import importlib # pylint: disable=import-outside-toplevel
importlib.reload(web.views)
return {"hostname": host, "port": port, "application": application, "use_reloader": reloader, "use_debugger": debug}
def run(config):
return run_simple(**config)
def save_config(my_peugeot: MyPSACC, name):
+16 -3
View File
@@ -70,6 +70,7 @@ function filterDataset (data, range) {
return res
}
function filterShortTrip (data) {
const longTrips = {
trips: data.trips.filter(line => line.distance > 10),
@@ -172,10 +173,10 @@ function updateCardsValue (data) {
function sortDataset (ctx, data, tables) {
const tableId = ctx.prop_id.split('.')[0]
if (ctx.value.length > 0) {
const table = tables.filter(table => table.table_id === tableId)[0]
if (ctx.value.length > 0 && data[table.src].length > 0) {
const asc = ctx.value[0].direction === 'asc'
let columnId = ctx.value[0].column_id
const table = tables.filter(table => table.table_id === tableId)[0]
let sorted
if (columnId.endsWith('_str')) {
columnId = columnId.slice(0, -4)
@@ -196,7 +197,17 @@ function sortDataset (ctx, data, tables) {
}
}
function filterAndSort (data, range, figures, p, log) { // eslint-disable-line no-unused-vars
function sort_multiple_table(sort_params, data, tables){
for ([prop_id, value] of Object.entries(sort_params)) {
let ctx = {}
ctx.prop_id = prop_id+".sort_by";
ctx.value = value
console.log(ctx)
sortDataset(ctx, data, tables);
}
}
function filterAndSort (data, range, figures, p, log, sort) { // eslint-disable-line no-unused-vars
if (log > 10) {
logger.disableLogger()
}
@@ -205,6 +216,7 @@ function filterAndSort (data, range, figures, p, log) { // eslint-disable-line n
console.log('figures:', figures)
console.log('data:', data)
console.log('ctx', ctx)
console.log("sort", sort)
if (ctx.length > 0 && ctx[0].prop_id.endsWith('sort_by')) {
dataFiltered = filterDataset(data, range)
sortDataset(ctx[0], dataFiltered, p.table_src)
@@ -214,6 +226,7 @@ function filterAndSort (data, range, figures, p, log) { // eslint-disable-line n
} else {
addLocaleDate(data, p.date_columns)
dataFiltered = filterDataset(data, range)
sort_multiple_table(sort, dataFiltered, p.table_src)
outFigures.push(...updateTables(dataFiltered, p.table_src))
console.log(dataFiltered.trips.length)
const longTrips = filterShortTrip(dataFiltered)
+25 -13
View File
@@ -34,7 +34,7 @@ def figures_to_dict(figures):
return el_list
class Figure_Filter:
class FigureFilter:
def __init__(self):
self.graphs = []
@@ -74,20 +74,31 @@ class Figure_Filter:
outputs.extend([Output(graph.graph_id, "figure") for graph in self.maps])
return outputs
def __get_graph_x_label(self, graphs):
@staticmethod
def __get_graph_x_label(graphs):
return [graph.x for graph in graphs]
def __get_graph_y_label(self, graphs):
@staticmethod
def __get_graph_y_label(graphs):
return [graph.y for graph in graphs]
def __get_table_input_sort_by(self):
inputs = [Input(table.table_id, 'sort_by') for table in self.tables]
return inputs
def gen_unused_variable(self):
def gen_sort_variable(self):
res = ", ".join([chr(i) for i in range(ord('a'), ord('a') + len(self.tables))])
return res
def __gen_sort_dict(self):
res = "{"
i = ord("a")
for table in self.tables:
res+= f'"{table.table_id}": {chr(i)},'
i += 1
res = res[:-1] + "}"
return res
def get_params(self):
params = json.dumps({
"date_columns": self.__get_table_date_column_id(),
@@ -106,17 +117,18 @@ class Figure_Filter:
log_level = 10
else:
log_level = 20
fct_def = f"""function(data,range, figures, {self.gen_unused_variable()}) {{
const params={self.get_params()};
const logLevel={log_level};
return filterAndSort(data, range, figures, params, logLevel);
fct_def = f"""function(data,range, figures, {self.gen_sort_variable()}) {{
console.log("=============")
const params={self.get_params()}
const logLevel={log_level}
return filterAndSort(data, range, figures, params, logLevel, {self.__gen_sort_dict()})
}}"""
dash_app.clientside_callback(fct_def,
*self.__get_output(),
Input('clientside-data-store', 'data'),
Input('date-slider', 'value'),
Input('clientside-figure-store', 'data'),
*self.__get_table_input_sort_by())
*self.__get_output(),
Input('clientside-data-store', 'data'),
Input('date-slider', 'value'),
Input('clientside-figure-store', 'data'),
*self.__get_table_input_sort_by())
return True
return False
+2 -2
View File
@@ -23,7 +23,7 @@ from web.db import Database
from web.utils import diff_dashtable, dash_date_to_datetime
# pylint: disable=invalid-name
from web.figure_filter import Figure_Filter
from web.figurefilter import FigureFilter
from web.utils import create_card
RESPONSE = "-response"
@@ -285,7 +285,7 @@ def serve_layout():
global cached_layout
if cached_layout is None:
logger.debug("Create new layout")
fig_filter = Figure_Filter()
fig_filter = FigureFilter()
try:
range_slider = dcc.RangeSlider(
id='date-slider',