1 # Copyright (C) 2021 Wind River Systems, Inc.
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
15 from typing import List, Tuple
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 from o2common.helper import o2logging
22 logger = o2logging.get_logger(__name__)
25 class OcloudSqlAlchemyRepository(OcloudRepository):
26 def __init__(self, session):
28 self.session = session
30 def _add(self, ocloud: ocloud.Ocloud):
31 self.session.add(ocloud)
32 # self.session.add_all(ocloud.deploymentManagers)
34 def _get(self, ocloud_id) -> ocloud.Ocloud:
35 return self.session.query(ocloud.Ocloud).filter_by(
36 oCloudId=ocloud_id).first()
38 def _list(self) -> List[ocloud.Ocloud]:
39 return self.session.query(ocloud.Ocloud)
41 def _update(self, ocloud: ocloud.Ocloud):
42 self.session.add(ocloud)
45 class ResouceTypeSqlAlchemyRepository(ResourceTypeRepository):
46 def __init__(self, session):
48 self.session = session
50 def _add(self, resourceType: ocloud.ResourceType):
51 self.session.add(resourceType)
53 def _get(self, resource_type_id) -> ocloud.ResourceType:
54 return self.session.query(ocloud.ResourceType).filter_by(
55 resourceTypeId=resource_type_id).first()
57 def _get_by_name(self, resource_type_name) -> ocloud.ResourceType:
58 return self.session.query(ocloud.ResourceType).filter_by(
59 name=resource_type_name).first()
61 def _list(self, **kwargs) -> Tuple[int, List[ocloud.ResourceType]]:
62 size = kwargs.pop('limit') if 'limit' in kwargs else None
63 offset = kwargs.pop('start') if 'start' in kwargs else 0
65 result = self.session.query(ocloud.ResourceType).filter_by(
66 **kwargs).order_by('resourceTypeId')
67 count = result.count()
68 if size is not None and size != -1:
69 return (count, result.limit(size).offset(offset))
70 return (count, result)
72 def _update(self, resourceType: ocloud.ResourceType):
73 self.session.add(resourceType)
76 class ResourcePoolSqlAlchemyRepository(ResourcePoolRepository):
77 def __init__(self, session):
79 self.session = session
81 def _add(self, resourcePool: ocloud.ResourcePool):
82 self.session.add(resourcePool)
84 def _get(self, resource_pool_id) -> ocloud.ResourcePool:
85 return self.session.query(ocloud.ResourcePool).filter_by(
86 resourcePoolId=resource_pool_id).first()
88 def _list(self, **kwargs) -> Tuple[int, List[ocloud.ResourcePool]]:
89 size = kwargs.pop('limit') if 'limit' in kwargs else None
90 offset = kwargs.pop('start') if 'start' in kwargs else 0
92 result = self.session.query(ocloud.ResourcePool).filter_by(
93 **kwargs).order_by('resourcePoolId')
94 count = result.count()
95 if size is not None and size != -1:
96 return (count, result.limit(size).offset(offset))
97 return (count, result)
99 def _update(self, resourcePool: ocloud.ResourcePool):
100 self.session.add(resourcePool)
103 class ResourceSqlAlchemyRepository(ResourceRepository):
104 def __init__(self, session):
106 self.session = session
108 def _add(self, resource: ocloud.Resource):
109 self.session.add(resource)
111 def _get(self, resource_id) -> ocloud.Resource:
112 # return self.session.query(ocloud.Resource).filter_by(
113 # resourceId=resource_id).first()
114 # topq = uow.session.query(orm.resource).filter(
115 # orm.resource.c.resourceId == resourceId).\
116 # cte('cte', recursive=True)
117 # bootomq = uow.session.query(orm.resource).join(
118 # topq, orm.resource.c.parentId == topq.c.resourceId)
119 # res = uow.session.query(topq.union(bootomq))
121 res = self.session.query(ocloud.Resource).filter_by(
122 resourceId=id).first()
124 query = self.session.query(ocloud.Resource).filter_by(
125 parentId=res.resourceId)
128 child = recursive(r.resourceId)
129 children.append(child)
130 res.set_children(children)
132 return recursive(resource_id)
134 def _list(self, resourcepool_id, **kwargs) -> \
135 Tuple[int, List[ocloud.Resource]]:
138 size = kwargs.pop('limit') if 'limit' in kwargs else None
139 offset = kwargs.pop('start') if 'start' in kwargs else 0
141 result = self.session.query(ocloud.Resource).filter_by(
142 resourcePoolId=resourcepool_id, **kwargs).order_by('resourceId')
143 count = result.count()
144 if size is not None and size != -1:
145 return (count, result.limit(size).offset(offset))
146 return (count, result)
148 def _update(self, resource: ocloud.Resource):
149 self.session.add(resource)
152 class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
153 def __init__(self, session):
155 self.session = session
157 def _add(self, deployment_manager: ocloud.DeploymentManager):
158 self.session.add(deployment_manager)
160 def _get(self, deployment_manager_id) -> ocloud.DeploymentManager:
161 return self.session.query(ocloud.DeploymentManager).filter_by(
162 deploymentManagerId=deployment_manager_id).first()
164 def _list(self, **kwargs) -> Tuple[int, List[ocloud.DeploymentManager]]:
165 size = kwargs.pop('limit') if 'limit' in kwargs else None
166 offset = kwargs.pop('start') if 'start' in kwargs else 0
168 result = self.session.query(ocloud.DeploymentManager).filter_by(
169 **kwargs).order_by('deploymentManagerId')
170 count = result.count()
171 if size is not None and size != -1:
172 return (count, result.limit(size).offset(offset))
173 return (count, result)
175 def _update(self, deployment_manager: ocloud.DeploymentManager):
176 self.session.add(deployment_manager)
179 class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
180 def __init__(self, session):
182 self.session = session
184 def _add(self, subscription: subscription_obj.Subscription):
185 self.session.add(subscription)
187 def _get(self, subscription_id) -> subscription_obj.Subscription:
188 return self.session.query(subscription_obj.Subscription).filter_by(
189 subscriptionId=subscription_id).first()
191 def _list(self, **kwargs) -> \
192 Tuple[int, List[subscription_obj.Subscription]]:
193 size = kwargs.pop('limit') if 'limit' in kwargs else None
194 offset = kwargs.pop('start') if 'start' in kwargs else 0
196 result = self.session.query(subscription_obj.Subscription).filter_by(
197 **kwargs).order_by('subscriptionId')
198 count = result.count()
199 if size is not None and size != -1:
200 return (count, result.limit(size).offset(offset))
201 return (count, result)
203 def _update(self, subscription: subscription_obj.Subscription):
204 self.session.add(subscription)
206 def _delete(self, subscription_id):
207 self.session.query(subscription_obj.Subscription).filter_by(
208 subscriptionId=subscription_id).delete()