aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk/aai/business/project.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/onapsdk/aai/business/project.py')
-rw-r--r--src/onapsdk/aai/business/project.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/onapsdk/aai/business/project.py b/src/onapsdk/aai/business/project.py
new file mode 100644
index 0000000..989444a
--- /dev/null
+++ b/src/onapsdk/aai/business/project.py
@@ -0,0 +1,123 @@
+"""A&AI project 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 Any, Dict, Iterator
+
+from onapsdk.utils.jinja import jinja_env
+
+from ..aai_element import AaiResource
+
+
+class Project(AaiResource):
+ """Project class."""
+
+ def __init__(self, name: str, resource_version: str) -> None:
+ """Project object initialization.
+
+ Args:
+ name (str): Project name
+ resource_version (str): resource version
+ """
+ super().__init__()
+ self.name: str = name
+ self.resource_version: str = resource_version
+
+ @classmethod
+ def get_all(cls) -> Iterator["Project"]:
+ """Get all project.
+
+ Yields:
+ Project: Project object
+
+ """
+ url: str = cls.get_all_url()
+ for project in cls.send_message_json("GET",
+ "Get A&AI projects",
+ url).get("project", []):
+ yield cls(
+ project.get("project-name"),
+ project.get("resource-version")
+ )
+
+ @classmethod
+ def get_all_url(cls) -> str: # pylint: disable=arguments-differ
+ """Return url to get all projects.
+
+ Returns:
+ str: Url to get all projects
+
+ """
+ return f"{cls.base_url}{cls.api_version}/business/projects"
+
+ def __repr__(self) -> str:
+ """Project object representation.
+
+ Returns:
+ str: Project object representation
+
+ """
+ return f"Project(name={self.name})"
+
+ @property
+ def url(self) -> str:
+ """Project's url.
+
+ Returns:
+ str: Resource's url
+
+ """
+ return (f"{self.base_url}{self.api_version}/business/projects/"
+ f"project/{self.name}")
+
+ @classmethod
+ def create(cls, name: str) -> "Project":
+ """Create project A&AI resource.
+
+ Args:
+ name (str): project name
+
+ Returns:
+ Project: Created Project object
+
+ """
+ cls.send_message(
+ "PUT",
+ "Declare A&AI project",
+ (f"{cls.base_url}{cls.api_version}/business/projects/"
+ f"project/{name}"),
+ data=jinja_env().get_template("aai_project_create.json.j2").render(
+ project_name=name
+ )
+ )
+ return cls.get_by_name(name)
+
+ @classmethod
+ def get_by_name(cls, name: str) -> "Project":
+ """Get project resource by it's name.
+
+ Raises:
+ ResourceNotFound: Project requested by a name does not exist.
+
+ Returns:
+ Project: Project requested by a name.
+
+ """
+ url = (f"{cls.base_url}{cls.api_version}/business/projects/"
+ f"project/{name}")
+ response: Dict[str, Any] = \
+ cls.send_message_json("GET",
+ f"Get {name} project",
+ url)
+ return cls(response["project-name"], response["resource-version"])