Module: check_mk
Branch: master
Commit: f5548c7a69f4a7fbb6c11cc4d8fa5e05de1c3b10
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f5548c7a69f4a7…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Oct 7 16:39:17 2014 +0200
Extract function for filters from view to visuals
---
web/htdocs/views.py | 20 ++------------------
web/htdocs/visuals.py | 34 ++++++++++++++++++++++++++++++----
2 files changed, 32 insertions(+), 22 deletions(-)
diff --git a/web/htdocs/views.py b/web/htdocs/views.py
index eec6912..92e7f87 100644
--- a/web/htdocs/views.py
+++ b/web/htdocs/views.py
@@ -536,7 +536,6 @@ def transform_view_to_valuespec_value(view):
view['visibility'].append(key)
view['grouping'] = { "grouping" :
view.get('group_painters', []) }
- view['filters'] = { "context" : view.get('context', {}) }
view['sorting'] = { "sorters" : view.get('sorters', {}) }
columns = []
@@ -559,8 +558,6 @@ def transform_view_to_valuespec_value(view):
columns.append((pname, viewname, ''))
-
-
def transform_valuespec_value_to_view(view):
for ident, attrs in view.items():
# Transform some valuespec specific options to legacy view
@@ -572,6 +569,7 @@ def transform_valuespec_value_to_view(view):
view[option] = True
del attrs['options']
view.update(attrs)
+ del view["view"]
elif ident == 'sorting':
view.update(attrs)
@@ -871,21 +869,7 @@ def show_view(view, show_heading = False, show_buttons = True,
# in context. In this case, take them from the context type definition.
show_filters = visuals.show_filters(view, datasource['infos'])
- # Populate the HTML vars with missing context vars. The context vars set
- # in single context are enforced (can not be overwritten by URL). The normal
- # filter vars in "multiple" context are not enforced.
- for key in visuals.get_single_info_keys(view):
- if key in view['context']:
- html.set_var(key, view['context'][key])
-
- # Now apply the multiple context filters
- for info_key in datasource['infos']:
- for fname, fval in view['context'].items():
- if type(fval) == dict: # this is a real filter
- for varname, val in fval.items():
- # shown filters are set, if form is fresh and variable not supplied
in URL
- if only_count or (html.var("filled_in") !=
"filter" and not html.has_var(varname)):
- html.set_var(varname, val)
+ visuals.add_context_to_html_vars(view, datasource["infos"], only_count)
# Af any painter, sorter or filter needs the information about the host's
# inventory, then we load it and attach it as column "host_inventory"
diff --git a/web/htdocs/visuals.py b/web/htdocs/visuals.py
index d7c674e..8ff8d70 100644
--- a/web/htdocs/visuals.py
+++ b/web/htdocs/visuals.py
@@ -467,7 +467,6 @@ def process_context_specs(context_specs):
ident = 'context_' + info_key
attrs = spec.from_html_vars(ident)
- html.debug(attrs)
spec.validate_value(attrs, ident)
context.update(attrs)
return context
@@ -477,6 +476,9 @@ def render_context_specs(visual, context_specs):
for info_key, spec in context_specs:
forms.section(spec.title())
ident = 'context_' + info_key
+ # Trick: the field "context" contains a dictionary with
+ # all filter settings, from which the value spec will automatically
+ # extract those that it needs.
value = visual.get('context', {})
spec.render_input(ident, value)
@@ -623,8 +625,7 @@ def page_edit_visual(what, all_visuals, custom_field_handler = None,
save_and_go = None
for nr, (title, pagename, icon) in enumerate(sub_pages):
if html.var("save%d" % nr):
- save_and_go =
html.makeuri_contextless([(visual_types[what]['ident_attr'], visualname)],
- filename = pagename + '.py')
+ save_and_go = pagename
if save_and_go or html.var("save") or html.var("try") or
html.var("search"):
try:
@@ -656,7 +657,8 @@ def page_edit_visual(what, all_visuals, custom_field_handler = None,
if html.var("save") or save_and_go:
if save_and_go:
- back = save_and_go
+ back =
html.makeuri_contextless([(visual_types[what]['ident_attr'],
visual['name'])],
+ filename = save_and_go +
'.py')
else:
back = html.var('back')
if not back:
@@ -869,6 +871,30 @@ def show_filters(visual, info_keys):
return list(set(show_filters)) # remove duplicates
+
+def add_context_to_html_vars(visual, only_infos=None, only_count=False):
+ if only_infos == None:
+ only_infos = infos.keys() # all datasources!
+
+ # Populate the HTML vars with missing context vars. The context vars set
+ # in single context are enforced (can not be overwritten by URL). The normal
+ # filter vars in "multiple" context are not enforced.
+ for key in get_single_info_keys(visual):
+ if key in visual['context']:
+ html.set_var(key, visual['context'][key])
+
+ # Now apply the multiple context filters
+ for info_key in only_infos:
+ for fname, fval in visual['context'].items():
+ if type(fval) == dict: # this is a real filter
+ for varname, val in fval.items():
+ # shown filters are set, if form is fresh and variable not supplied
in URL
+ if only_count or (html.var("filled_in") !=
"filter" and not html.has_var(varname)):
+ html.set_var(varname, val)
+
+
+
+
#.
# .--ValueSpecs----------------------------------------------------------.
# | __ __ _ ____ |