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
17 from o2ims.domain import ocloud
18 from o2ims.domain.ocloud_repo import OcloudRepository, ResourceTypeRepository,\
19 ResourcePoolRepository, ResourceRepository, DeploymentManagerRepository,\
20 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 _list(self) -> List[ocloud.ResourceType]:
58 return self.session.query(ocloud.ResourceType)
60 def _update(self, resourceType: ocloud.ResourceType):
61 self.session.add(resourceType)
64 class ResourcePoolSqlAlchemyRepository(ResourcePoolRepository):
65 def __init__(self, session):
67 self.session = session
69 def _add(self, resourcePool: ocloud.ResourcePool):
70 self.session.add(resourcePool)
72 def _get(self, resource_pool_id) -> ocloud.ResourcePool:
73 return self.session.query(ocloud.ResourcePool).filter_by(
74 resourcePoolId=resource_pool_id).first()
76 def _list(self) -> List[ocloud.ResourcePool]:
77 return self.session.query(ocloud.ResourcePool)
79 def _update(self, resourcePool: ocloud.ResourcePool):
80 self.session.add(resourcePool)
83 class ResourceSqlAlchemyRepository(ResourceRepository):
84 def __init__(self, session):
86 self.session = session
88 def _add(self, resource: ocloud.Resource):
89 self.session.add(resource)
91 def _get(self, resource_id) -> ocloud.Resource:
92 # return self.session.query(ocloud.Resource).filter_by(
93 # resourceId=resource_id).first()
94 # topq = uow.session.query(orm.resource).filter(
95 # orm.resource.c.resourceId == resourceId).\
96 # cte('cte', recursive=True)
97 # bootomq = uow.session.query(orm.resource).join(
98 # topq, orm.resource.c.parentId == topq.c.resourceId)
99 # res = uow.session.query(topq.union(bootomq))
101 res = self.session.query(ocloud.Resource).filter_by(
102 resourceId=id).first()
104 query = self.session.query(ocloud.Resource).filter_by(
105 parentId=res.resourceId)
108 child = recursive(r.resourceId)
109 children.append(child)
110 res.set_children(children)
112 return recursive(resource_id)
114 def _list(self, resourcepool_id) -> List[ocloud.Resource]:
115 return self.session.query(ocloud.Resource).filter_by(
116 resourcePoolId=resourcepool_id)
118 def _update(self, resource: ocloud.Resource):
119 self.session.add(resource)
122 class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
123 def __init__(self, session):
125 self.session = session
127 def _add(self, deployment_manager: ocloud.DeploymentManager):
128 self.session.add(deployment_manager)
130 def _get(self, deployment_manager_id) -> ocloud.DeploymentManager:
131 return self.session.query(ocloud.DeploymentManager).filter_by(
132 deploymentManagerId=deployment_manager_id).first()
134 def _list(self) -> List[ocloud.DeploymentManager]:
135 return self.session.query(ocloud.DeploymentManager)
137 def _update(self, deployment_manager: ocloud.DeploymentManager):
138 self.session.add(deployment_manager)
141 class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
142 def __init__(self, session):
144 self.session = session
146 def _add(self, subscription: ocloud.Subscription):
147 self.session.add(subscription)
149 def _get(self, subscription_id) -> ocloud.Subscription:
150 return self.session.query(ocloud.Subscription).filter_by(
151 subscriptionId=subscription_id).first()
153 def _list(self) -> List[ocloud.Subscription]:
154 return self.session.query(ocloud.Subscription)
156 def _update(self, subscription: ocloud.Subscription):
157 self.session.add(subscription)
159 def _delete(self, subscription_id):
160 self.session.query(ocloud.Subscription).filter_by(
161 subscriptionId=subscription_id).delete()