From 1039c4daafe70253d0012e97b3e26e76fe84f3a0 Mon Sep 17 00:00:00 2001 From: Piotr Stanior Date: Thu, 27 Jan 2022 15:29:38 +0100 Subject: Add data dictionary resource creation Change-Id: Iacabc66da38b7e4b8b04d3041e136343fcf5183c Issue-ID: INT-2055 Signed-off-by: Piotr Stanior --- docs/source/schemas/version_1_0.rst | 15 +++++ docs/source/schemas/version_1_1.rst | 15 +++++ .../resources/data_dictionary_resource.py | 66 ++++++++++++++++++++++ onap_data_provider/resources/resource_creator.py | 7 +++ onap_data_provider/schemas/infra.schema | 14 +++++ onap_data_provider/schemas/infra_1_1.schema | 14 +++++ tests/test_data_dictionary_resource.py | 34 +++++++++++ 7 files changed, 165 insertions(+) create mode 100644 onap_data_provider/resources/data_dictionary_resource.py create mode 100644 tests/test_data_dictionary_resource.py diff --git a/docs/source/schemas/version_1_0.rst b/docs/source/schemas/version_1_0.rst index ffc65ca..15e327d 100644 --- a/docs/source/schemas/version_1_0.rst +++ b/docs/source/schemas/version_1_0.rst @@ -399,3 +399,18 @@ VF modules instantiation parameters - List of key-value parameters - NO - + +Data dictionary +--------------- + +.. list-table:: + :header-rows: 1 + + * - Property + - Type + - Required + - Comment + * - file-path + - string + - YES + - diff --git a/docs/source/schemas/version_1_1.rst b/docs/source/schemas/version_1_1.rst index cb78222..4546ef1 100644 --- a/docs/source/schemas/version_1_1.rst +++ b/docs/source/schemas/version_1_1.rst @@ -413,3 +413,18 @@ VF modules instantiation parameters - List of key-value parameters - NO - + +Data dictionary +--------------- + +.. list-table:: + :header-rows: 1 + + * - Property + - Type + - Required + - Comment + * - file-path + - string + - YES + - diff --git a/onap_data_provider/resources/data_dictionary_resource.py b/onap_data_provider/resources/data_dictionary_resource.py new file mode 100644 index 0000000..4c9402e --- /dev/null +++ b/onap_data_provider/resources/data_dictionary_resource.py @@ -0,0 +1,66 @@ +"""Customer resource module.""" +""" + Copyright 2022 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. +""" + +import logging +from typing import Any, Dict +from onapsdk.cds import DataDictionarySet # type: ignore + +from onapsdk.exceptions import FileError # type: ignore +from onap_data_provider.resources.resource import Resource + + +class DataDictionarySetResource(Resource): + """DataDictionarySet resource class + + creates Data Dictionaries + """ + + def __init__(self, data: Dict[str, Any]) -> None: + """Initialize data dictionary set resource + + Args: + data (Dict[str, Any]): Data needed to create resource. + """ + super().__init__(data) + self._data_dictionaries: DataDictionarySet = None + + def create(self) -> None: + """Create data dictionaries. + + Create data dictionaries from input data. + """ + if self.data_dictionaries: + self.data_dictionaries.upload() + + @property + def data_dictionaries(self) -> DataDictionarySet: + """Get DataDictionarySet. + + Returns: + DataDictionarySet: Created DataDictionarySet containing DataDictionary instances. + """ + if not self._data_dictionaries: + try: + self._data_dictionaries = DataDictionarySet.load_from_file( + self.data.get("file-path") + ) + except FileError: + logging.error( + f"Error when reading from file {self.data.get('file-path')}" + ) + return None + return self._data_dictionaries diff --git a/onap_data_provider/resources/resource_creator.py b/onap_data_provider/resources/resource_creator.py index 34cbafd..de9ee9b 100644 --- a/onap_data_provider/resources/resource_creator.py +++ b/onap_data_provider/resources/resource_creator.py @@ -38,6 +38,7 @@ from .service_instance_resource import ( from .vendor_resource import VendorResource from .vnf_resource import VnfResource from .vsp_resource import VspResource +from .data_dictionary_resource import DataDictionarySetResource from ..versions import VersionsEnum if typing.TYPE_CHECKING: @@ -128,6 +129,11 @@ class ResourceCreator(ABC): VersionsEnum.V1_0: MsbK8SDefinitionResource, VersionsEnum.V1_1: MsbK8SDefinitionResource, }, + "data-dictionaries": { + VersionsEnum.NONE: DataDictionarySetResource, + VersionsEnum.V1_0: DataDictionarySetResource, + VersionsEnum.V1_1: DataDictionarySetResource, + }, } @classmethod @@ -157,6 +163,7 @@ class ResourceCreator(ABC): - platform: PlatformResource - owning-entity: OwningEntityResource - msb-k8s-definition: MsbK8SDefinitionResource + - data-dictionaries: DataDictionarySetResource Args: resource_type (str): Resource type to create diff --git a/onap_data_provider/schemas/infra.schema b/onap_data_provider/schemas/infra.schema index 55c5cbf..d683b46 100644 --- a/onap_data_provider/schemas/infra.schema +++ b/onap_data_provider/schemas/infra.schema @@ -525,3 +525,17 @@ properties: - name - version - artifact + data-dictionaries-sets: + type: array + items: + - type: object + properties: + data-dictionaries: + type: object + properities: + file-path: + type: string + required: + - file-path + required: + - data-dictionaries diff --git a/onap_data_provider/schemas/infra_1_1.schema b/onap_data_provider/schemas/infra_1_1.schema index 7514acc..fdf6b4f 100644 --- a/onap_data_provider/schemas/infra_1_1.schema +++ b/onap_data_provider/schemas/infra_1_1.schema @@ -539,3 +539,17 @@ properties: - name - version - artifact + data-dictionaries-sets: + type: array + items: + - type: object + properties: + data-dictionaries: + type: object + properities: + file-path: + type: string + required: + - file-path + required: + - data-dictionaries diff --git a/tests/test_data_dictionary_resource.py b/tests/test_data_dictionary_resource.py new file mode 100644 index 0000000..31369f7 --- /dev/null +++ b/tests/test_data_dictionary_resource.py @@ -0,0 +1,34 @@ +from unittest.mock import patch, PropertyMock + +from onapsdk.cds import DataDictionarySet +from onapsdk.exceptions import FileError +from onap_data_provider.resources.data_dictionary_resource import ( + DataDictionarySetResource, +) + + +@patch( + "onap_data_provider.resources.data_dictionary_resource.DataDictionarySet.load_from_file" +) +def test_data_dictionary_resource_data_dictionary_set( + mock_data_dictionary_set_load_from_file, +): + dds = DataDictionarySetResource({"json-file-path": "test"}) + mock_data_dictionary_set_load_from_file.return_value = 1 + assert dds.data_dictionaries is not None + + +@patch("onap_data_provider.resources.data_dictionary_resource.DataDictionarySet.upload") +@patch( + "onap_data_provider.resources.data_dictionary_resource.DataDictionarySet.load_from_file" +) +def test_data_dictionary_resource_data_dictionary_set_create( + mock_load_from_file, mock_data_dictionary_set_upload +): + ddsr = DataDictionarySetResource({"file-path": "test"}) + mock_load_from_file.side_effect = FileError + mock_data_dictionary_set_upload.assert_not_called() + mock_load_from_file.side_effect = None + mock_load_from_file.return_value = DataDictionarySet() + ddsr.create() + mock_data_dictionary_set_upload.assert_called() -- cgit 1.2.3-korg