aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk/aai/cloud_infrastructure/geo_region.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/onapsdk/aai/cloud_infrastructure/geo_region.py')
-rw-r--r--src/onapsdk/aai/cloud_infrastructure/geo_region.py191
1 files changed, 191 insertions, 0 deletions
diff --git a/src/onapsdk/aai/cloud_infrastructure/geo_region.py b/src/onapsdk/aai/cloud_infrastructure/geo_region.py
new file mode 100644
index 0000000..32ff820
--- /dev/null
+++ b/src/onapsdk/aai/cloud_infrastructure/geo_region.py
@@ -0,0 +1,191 @@
+"""Geo region module."""
+# Copyright 2022 Orange, 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 Iterator, Optional
+
+from onapsdk.utils.jinja import jinja_env
+
+from ..aai_element import AaiResource
+
+
+class GeoRegion(AaiResource): # pylint: disable=too-many-instance-attributes
+ """Geo region class."""
+
+ def __init__(self,
+ geo_region_id: str,
+ *,
+ geo_region_name: str = "",
+ geo_region_type: str = "",
+ geo_region_role: str = "",
+ geo_region_function: str = "",
+ data_owner: str = "",
+ data_source: str = "",
+ data_source_version: str = "",
+ resource_version: str = "",
+ ) -> None:
+ """Geo region init.
+
+ Args:
+ geo_region_id (str): UUID, key for geo-region object.
+ geo_region_name (str, optional): Name of geo-region. Defaults to "".
+ geo_region_type (str, optional): Type of geo-region. Defaults to "".
+ geo_region_role (str, optional): Role of geo-region. Defaults to "".
+ geo_region_function (str, optional): Function of geo-region. Defaults to "".
+ data_owner (str, optional): Identifies the entity that is responsible managing
+ this inventory object. Defaults to "".
+ data_source (str, optional): Identifies the upstream source of the data.
+ Defaults to "".
+ data_source_version (str, optional): Identifies the version of
+ the upstream source. Defaults to "".
+ resource_version (str, optional): Resource version. Defaults to "".
+
+ """
+ super().__init__()
+ self.geo_region_id: str = geo_region_id
+ self.geo_region_name: str = geo_region_name
+ self.geo_region_type: str = geo_region_type
+ self.geo_region_role: str = geo_region_role
+ self.geo_region_function: str = geo_region_function
+ self.data_owner: str = data_owner
+ self.data_source: str = data_source
+ self.data_source_version: str = data_source_version
+ self.resource_version: str = resource_version
+
+ def __repr__(self) -> str:
+ """Geo region object representation.
+
+ Returns:
+ str: Human readable string contains most important information about geo region.
+
+ """
+ return (
+ f"GeoRegion(geo_region_id={self.geo_region_id})"
+ )
+
+ @property
+ def url(self) -> str:
+ """Geo region's url.
+
+ Returns:
+ str: Geo Region's url
+
+ """
+ return (f"{self.base_url}{self.api_version}/cloud-infrastructure/"
+ f"geo-regions/geo-region/{self.geo_region_id}")
+
+ @classmethod
+ def get_all_url(cls, *args, **kwargs) -> str: # pylint: disable=arguments-differ
+ """Return url to get all geo regions.
+
+ Returns:
+ str: Url to get all geo regions
+
+ Raises:
+ ResourceNotFound: No geo regions found
+
+ """
+ return f"{cls.base_url}{cls.api_version}/cloud-infrastructure/geo-regions"
+
+ @classmethod
+ def get_all(cls) -> Iterator["GeoRegion"]:
+ """Get all geo regions.
+
+ Yields:
+ GeoRegion: Geo region
+
+ """
+ for geo_region_data in cls.send_message_json("GET",
+ "Get all geo regions",
+ cls.get_all_url()).get("geo-region", []):
+ yield cls(geo_region_id=geo_region_data["geo-region-id"],
+ geo_region_name=geo_region_data.get("geo-region-name", ""),
+ geo_region_type=geo_region_data.get("geo-region-type", ""),
+ geo_region_role=geo_region_data.get("geo-region-role", ""),
+ geo_region_function=geo_region_data.get("geo-region-function", ""),
+ data_owner=geo_region_data.get("data-owner", ""),
+ data_source=geo_region_data.get("data-source", ""),
+ data_source_version=geo_region_data.get("data-source-version", ""),
+ resource_version=geo_region_data.get("resource-version", ""))
+
+ @classmethod
+ def get_by_geo_region_id(cls, geo_region_id: str) -> "GeoRegion":
+ """Get geo region by it's id.
+
+ Args:
+ geo_region_id (str): Geo region id
+
+ Returns:
+ GeoRegion: Geo region
+
+ """
+ resp = cls.send_message_json("GET",
+ f"Get geo region with {geo_region_id} id",
+ f"{cls.get_all_url()}/geo-region/{geo_region_id}")
+ return GeoRegion(resp["geo-region-id"],
+ geo_region_name=resp.get("geo-region-name", ""),
+ geo_region_type=resp.get("geo-region-type", ""),
+ geo_region_role=resp.get("geo-region-role", ""),
+ geo_region_function=resp.get("geo-region-function", ""),
+ data_owner=resp.get("data-owner", ""),
+ data_source=resp.get("data-source", ""),
+ data_source_version=resp.get("data-source-version", ""),
+ resource_version=resp["resource-version"])
+
+ @classmethod
+ def create(cls, # pylint: disable=too-many-arguments
+ geo_region_id: str,
+ geo_region_name: Optional[str] = None,
+ geo_region_type: Optional[str] = None,
+ geo_region_role: Optional[str] = None,
+ geo_region_function: Optional[str] = None,
+ data_owner: Optional[str] = None,
+ data_source: Optional[str] = None,
+ data_source_version: Optional[str] = None) -> "GeoRegion":
+ """Create geo region.
+
+ Args:
+ geo_region_id (str): UUID, key for geo-region object.
+ geo_region_name (Optional[str], optional): Name of geo-region. Defaults to None.
+ geo_region_type (Optional[str], optional): Type of geo-region. Defaults to None.
+ geo_region_role (Optional[str], optional): Role of geo-region. Defaults to None.
+ geo_region_function (Optional[str], optional): Function of geo-region.
+ Defaults to None.
+ data_owner (Optional[str], optional): Identifies the entity that is
+ responsible managing this inventory object.. Defaults to None.
+ data_source (Optional[str], optional): Identifies the upstream source of the data.
+ Defaults to None.
+ data_source_version (Optional[str], optional): Identifies the version of
+ the upstream source. Defaults to None.
+
+ Returns:
+ GeoRegion: Geo region object
+
+ """
+ cls.send_message(
+ "PUT",
+ "Create geo region",
+ f"{cls.get_all_url()}/geo-region/{geo_region_id}",
+ data=jinja_env()
+ .get_template("geo_region_create.json.j2")
+ .render(geo_region_id=geo_region_id,
+ geo_region_name=geo_region_name,
+ geo_region_type=geo_region_type,
+ geo_region_role=geo_region_role,
+ geo_region_function=geo_region_function,
+ data_owner=data_owner,
+ data_source=data_source,
+ data_source_version=data_source_version),
+ )
+ return cls.get_by_geo_region_id(geo_region_id)