1 # -*- coding: utf-8 -*-
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
19 from osm_im
.vnfd
import vnfd
as vnfd_im
20 from osm_im
.nsd
import nsd
as nsd_im
21 from osm_im
.nst
import nst
as nst_im
22 from pyangbind
.lib
.serialise
import pybindJSONDecoder
23 import pyangbind
.lib
.pybindJSON
as pybindJSON
25 class ValidationException(Exception):
30 def pyangbind_validation(self
, item
, data
, force
=False):
33 data: dict object loaded from the descriptor file
34 force: True to skip unknown fields in the descriptor
43 raise ValidationException("Not possible to validate '{}' item".format(item
))
46 pybindJSONDecoder
.load_ietf_json(data
, None, None, obj
=myobj
,
47 path_helper
=True, skip_unknown
=force
)
48 out
= pybindJSON
.dumps(myobj
, mode
="ietf")
49 desc_out
= yaml
.safe_load(out
)
51 except Exception as e
:
52 raise ValidationException("Error in pyangbind validation: {}".format(str(e
)))
54 def yaml_validation(self
, descriptor
):
56 data
= yaml
.safe_load(descriptor
)
57 except Exception as e
:
58 raise ValidationException("Error in YAML validation. Not a proper YAML file: {}".format(e
))
59 if 'vnfd:vnfd-catalog' in data
or 'vnfd-catalog' in data
:
61 elif 'nsd:nsd-catalog' in data
or 'nsd-catalog' in data
:
66 raise ValidationException("Error in YAML validation. Not possible to determine the type of descriptor in the first line. Expected values: vnfd:vnfd-catalog, vnfd-catalog, nsd:nsd-catalog, nsd-catalog, nst")
70 def descriptor_validation(self
, descriptor
):
71 item
, data
= self
.yaml_validation(descriptor
)
72 self
.pyangbind_validation(item
, data
)