bd147221092135f7c703ad51e97eff1f8a9cedf5
[pti/o2.git] / o2ims / adapter / ocloud_repository.py
1 # Copyright (C) 2021 Wind River Systems, Inc.
2 #
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
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
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 implied.
12 #  See the License for the specific language governing permissions and
13 #  limitations under the License.
14
15 from typing import List
16
17 from o2ims.domain import ocloud, subscription_obj
18 from o2ims.domain.ocloud_repo import OcloudRepository, ResourceTypeRepository,\
19     ResourcePoolRepository, ResourceRepository, DeploymentManagerRepository
20 from o2ims.domain.subscription_repo import SubscriptionRepository, \
21     RegistrationRepository
22 from o2common.helper import o2logging
23 logger = o2logging.get_logger(__name__)
24
25
26 class OcloudSqlAlchemyRepository(OcloudRepository):
27     def __init__(self, session):
28         super().__init__()
29         self.session = session
30
31     def _add(self, ocloud: ocloud.Ocloud):
32         self.session.add(ocloud)
33         # self.session.add_all(ocloud.deploymentManagers)
34
35     def _get(self, ocloud_id) -> ocloud.Ocloud:
36         return self.session.query(ocloud.Ocloud).filter_by(
37             oCloudId=ocloud_id).first()
38
39     def _list(self) -> List[ocloud.Ocloud]:
40         return self.session.query(ocloud.Ocloud)
41
42     def _update(self, ocloud: ocloud.Ocloud):
43         self.session.add(ocloud)
44
45
46 class ResouceTypeSqlAlchemyRepository(ResourceTypeRepository):
47     def __init__(self, session):
48         super().__init__()
49         self.session = session
50
51     def _add(self, resourceType: ocloud.ResourceType):
52         self.session.add(resourceType)
53
54     def _get(self, resource_type_id) -> ocloud.ResourceType:
55         return self.session.query(ocloud.ResourceType).filter_by(
56             resourceTypeId=resource_type_id).first()
57
58     def _list(self) -> List[ocloud.ResourceType]:
59         return self.session.query(ocloud.ResourceType)
60
61     def _update(self, resourceType: ocloud.ResourceType):
62         self.session.add(resourceType)
63
64
65 class ResourcePoolSqlAlchemyRepository(ResourcePoolRepository):
66     def __init__(self, session):
67         super().__init__()
68         self.session = session
69
70     def _add(self, resourcePool: ocloud.ResourcePool):
71         self.session.add(resourcePool)
72
73     def _get(self, resource_pool_id) -> ocloud.ResourcePool:
74         return self.session.query(ocloud.ResourcePool).filter_by(
75             resourcePoolId=resource_pool_id).first()
76
77     def _list(self) -> List[ocloud.ResourcePool]:
78         return self.session.query(ocloud.ResourcePool)
79
80     def _update(self, resourcePool: ocloud.ResourcePool):
81         self.session.add(resourcePool)
82
83
84 class ResourceSqlAlchemyRepository(ResourceRepository):
85     def __init__(self, session):
86         super().__init__()
87         self.session = session
88
89     def _add(self, resource: ocloud.Resource):
90         self.session.add(resource)
91
92     def _get(self, resource_id) -> ocloud.Resource:
93         # return self.session.query(ocloud.Resource).filter_by(
94         #     resourceId=resource_id).first()
95         # topq = uow.session.query(orm.resource).filter(
96         #     orm.resource.c.resourceId == resourceId).\
97         #     cte('cte', recursive=True)
98         # bootomq = uow.session.query(orm.resource).join(
99         #     topq, orm.resource.c.parentId == topq.c.resourceId)
100         # res = uow.session.query(topq.union(bootomq))
101         def recursive(id):
102             res = self.session.query(ocloud.Resource).filter_by(
103                 resourceId=id).first()
104             if res is not None:
105                 query = self.session.query(ocloud.Resource).filter_by(
106                     parentId=res.resourceId)
107                 children = []
108                 for r in query:
109                     child = recursive(r.resourceId)
110                     children.append(child)
111                 res.set_children(children)
112             return res
113         return recursive(resource_id)
114
115     def _list(self, resourcepool_id) -> List[ocloud.Resource]:
116         return self.session.query(ocloud.Resource).filter_by(
117             resourcePoolId=resourcepool_id)
118
119     def _update(self, resource: ocloud.Resource):
120         self.session.add(resource)
121
122
123 class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
124     def __init__(self, session):
125         super().__init__()
126         self.session = session
127
128     def _add(self, deployment_manager: ocloud.DeploymentManager):
129         self.session.add(deployment_manager)
130
131     def _get(self, deployment_manager_id) -> ocloud.DeploymentManager:
132         return self.session.query(ocloud.DeploymentManager).filter_by(
133             deploymentManagerId=deployment_manager_id).first()
134
135     def _list(self) -> List[ocloud.DeploymentManager]:
136         return self.session.query(ocloud.DeploymentManager)
137
138     def _update(self, deployment_manager: ocloud.DeploymentManager):
139         self.session.add(deployment_manager)
140
141
142 class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
143     def __init__(self, session):
144         super().__init__()
145         self.session = session
146
147     def _add(self, subscription: subscription_obj.Subscription):
148         self.session.add(subscription)
149
150     def _get(self, subscription_id) -> subscription_obj.Subscription:
151         return self.session.query(subscription_obj.Subscription).filter_by(
152             subscriptionId=subscription_id).first()
153
154     def _list(self) -> List[subscription_obj.Subscription]:
155         return self.session.query(subscription_obj.Subscription)
156
157     def _update(self, subscription: subscription_obj.Subscription):
158         self.session.add(subscription)
159
160     def _delete(self, subscription_id):
161         self.session.query(subscription_obj.Subscription).filter_by(
162             subscriptionId=subscription_id).delete()
163
164
165 class RegistrationSqlAlchemyRepository(RegistrationRepository):
166     def __init__(self, session):
167         super().__init__()
168         self.session = session
169
170     def _add(self, registration: subscription_obj.Registration):
171         self.session.add(registration)
172
173     def _get(self, registration_id) -> subscription_obj.Registration:
174         return self.session.query(subscription_obj.Registration).filter_by(
175             registrationId=registration_id).first()
176
177     def _list(self) -> List[subscription_obj.Registration]:
178         return self.session.query(subscription_obj.Registration)
179
180     def _update(self, registration: subscription_obj.Registration):
181         self.session.add(registration)
182
183     def _delete(self, registration_id):
184         self.session.query(subscription_obj.Registration).filter_by(
185             registrationId=registration_id).delete()