summaryrefslogtreecommitdiffstats
path: root/onap_data_provider/resources/sdc_properties_mixins.py
diff options
context:
space:
mode:
Diffstat (limited to 'onap_data_provider/resources/sdc_properties_mixins.py')
-rw-r--r--onap_data_provider/resources/sdc_properties_mixins.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/onap_data_provider/resources/sdc_properties_mixins.py b/onap_data_provider/resources/sdc_properties_mixins.py
new file mode 100644
index 0000000..9a2b625
--- /dev/null
+++ b/onap_data_provider/resources/sdc_properties_mixins.py
@@ -0,0 +1,109 @@
+"""SDC properties mixins module."""
+"""
+ Copyright 2021 Deutsche Telekom AG
+
+ 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.
+"""
+from typing import Any, List, Union
+
+from onapsdk.exceptions import SDKException, ValidationError, ParameterError # type: ignore
+from onapsdk.sdc.component import Component # type: ignore
+from onapsdk.sdc.properties import Property # type: ignore
+from onapsdk.sdc.sdc_resource import SdcResource # type: ignore
+
+
+class SdcPropertiesMixins:
+ """Mixins class for properties handling.
+
+ Mixin class for propoerties preparation for SdcResources and Components.
+ """
+
+ def set_properties(
+ self, propresource: Union[SdcResource, Component], data: List[Any]
+ ) -> None:
+ """Set properties an SdcResource.
+
+ Args:
+ sdcresource (SdcResource): the SdcResource the properties should belong to
+ data (Dict[List, Any]): Data needed to create resource.
+
+ Raises ValidationError
+ """
+ for property_data in data:
+
+ if any(
+ (prop.name == property_data["name"] for prop in propresource.properties)
+ ):
+ prop = propresource.get_property(property_data["name"])
+ prop.value = property_data.get("value")
+ else:
+ proptype = property_data.get("type")
+ if proptype is None:
+ raise ValidationError(
+ f"New Property '{str(property_data['name'])}' is missing a type!"
+ )
+
+ property = Property(
+ name=property_data["name"],
+ property_type=proptype,
+ value=property_data.get("value"),
+ )
+ try:
+ propresource.add_property(property)
+ except SDKException:
+ raise ParameterError(
+ f"Creation of new property '{str(property_data['name'])}' "
+ f"for resourceclass '{str(propresource.__class__.__name__)}' is not provided yet!"
+ )
+
+ def set_inputs(
+ self, propresource: Union[SdcResource, Component], data: List[Any]
+ ) -> None:
+ """Set inputs of an SdcResource.
+
+ Args:
+ sdcresource (SdcResource): the SdcResource the inputs should belong to
+ data (Dict[str, Any]): Data needed to create resource.
+
+ Raises ValidationError
+ """
+ for property_data in data:
+
+ if any(
+ (prop.name == property_data["name"] for prop in propresource.inputs)
+ ):
+ propresource.set_input_default_value(
+ propresource.get_input(property_data["name"]),
+ property_data.get("value"),
+ )
+ else:
+ proptype = property_data.get("type")
+ if proptype is None:
+ raise ValidationError(
+ "New input '{0}' is missing a type!".format(
+ str(property_data["name"])
+ )
+ )
+
+ property = Property(
+ name=property_data["name"],
+ property_type=proptype,
+ value=property_data.get("value"),
+ )
+ try:
+ propresource.add_property(property)
+ propresource.declare_input(property)
+ except SDKException:
+ raise ParameterError(
+ f"Creation of new input '{str(property_data['name'])}' is not provided yet!"
+ )