Clark Boylan 7f9c7fdee2 Fix default handling with newer voluptious
It seems newer voluptuous passes the specified default value into the
verification method. Previously if data wasn't supplied it seems to have
not validated anything and returend the default. Anyway this means we
need to use a default value that matches our input type and manipulate
it on the output end the same way we would normal input.

We make this update in order to use newer voluptuous which will be
required when we switch to python3.10.

Change-Id: I64d9c8ac1334971f2d1c82f19ea675022635dc37
2022-10-14 16:35:05 -07:00

70 lines
2.2 KiB
Python

# Copyright 2015 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import voluptuous as v
from grafana_dashboards.schema.template.adhoc import Adhoc
from grafana_dashboards.schema.template.base import Base
from grafana_dashboards.schema.template.custom import Custom
from grafana_dashboards.schema.template.datasource import Datasource
from grafana_dashboards.schema.template.interval import Interval
from grafana_dashboards.schema.template.query import Query
class Template(object):
def __init__(self):
self.defaults = []
def _validate(self):
def f(data):
if not isinstance(data, list):
raise v.Invalid('Should be a list')
res = {
'enabled': False,
'list': []
}
for template in data:
res['enabled'] = True
validate = Base().get_schema()
validate(template)
if template['type'] == 'query':
schema = Query().get_schema()
if template['type'] == 'interval':
schema = Interval().get_schema()
if template['type'] == 'custom':
schema = Custom().get_schema()
if template['type'] == 'datasource':
schema = Datasource().get_schema()
if template['type'] == 'adhoc':
schema = Adhoc().get_schema()
res['list'].append(schema(template))
return res
return f
def get_schema(self):
schema = v.Schema({
v.Required(
'templating', default=self.defaults): v.All(
self._validate()),
})
return schema