Module: check_mk
Branch: master
Commit: f3d2f550993f8a3bbe9e453b954cae3e2f798cbf
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f3d2f550993f8a…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Feb 25 08:02:34 2019 +0100
New generic item input validation method
When a dialog takes a parameter from HTTP variables that represents an
item of a collection, it normally searches for the item before
proceeding and raises an error in case it does not exist in the
collection.
This is done individually in many places with individual error messages
that all have to be localized individually. This new function does this
in a generic way and should reduce page individual code a bit.
Change-Id: I4b515f5d9c86a4e233d646fe3a22b4ad498d85e8
---
cmk/gui/htmllib.py | 8 ++++++++
cmk/gui/views.py | 14 +++-----------
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/cmk/gui/htmllib.py b/cmk/gui/htmllib.py
index 9de825f..ab54b33 100644
--- a/cmk/gui/htmllib.py
+++ b/cmk/gui/htmllib.py
@@ -1151,6 +1151,14 @@ class html(HTMLGenerator):
_("The given text is wrong encoded. "
"You need to provide a UTF-8 encoded text."))
+ def get_item_input(self, varname, collection):
+ """Helper to get an item from the given collection
+ Raises a MKUserError() in case the requested item is not
available."""
+ item = self.get_ascii_input(varname)
+ if item not in collection:
+ raise MKUserError(varname, _("The requested item %s does not
exist") % item)
+ return collection[item], item
+
def get_integer_input(self, varname, deflt=None):
if deflt is not None and not self.request.has_var(varname):
return deflt
diff --git a/cmk/gui/views.py b/cmk/gui/views.py
index e53c389..effe3f3 100644
--- a/cmk/gui/views.py
+++ b/cmk/gui/views.py
@@ -451,13 +451,10 @@ def page_create_view(next_url=None):
@cmk.gui.pages.register("create_view_infos")
def page_create_view_infos():
- ds_name = html.request.var('datasource')
- if ds_name not in data_source_registry:
- raise MKGeneralException(_('The given datasource is not supported'))
-
+ ds_class, ds_name = html.get_item_input("datasource",
data_source_registry)
visuals.page_create_visual(
'views',
- data_source_registry[ds_name]().infos,
+ ds_class().infos,
next_url='edit_view.py?mode=create&datasource=%s&single_infos=%%s' %
ds_name)
@@ -907,12 +904,7 @@ def show_filter_form(is_open, filters):
@cmk.gui.pages.register("view")
def page_view():
- view_name = html.get_ascii_input("view_name")
- if view_name is None:
- raise MKUserError("view_name", _("Missing the variable view_name
in the URL."))
- view = get_permitted_views().get(view_name)
- if not view:
- raise MKUserError("view_name", _("No view defined with the name
'%s'.") % view_name)
+ view, view_name = html.get_item_input("view_name", get_permitted_views())
# Gather the page context which is needed for the "add to visual" popup
menu
# to add e.g. views to dashboards or reports