
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
70 lines
2.2 KiB
Python
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
|