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, subscription_obj, configuration_obj
18 from o2ims.domain.ocloud_repo import OcloudRepository, ResourceTypeRepository,\
19 ResourcePoolRepository, ResourceRepository, DeploymentManagerRepository
20 from o2ims.domain.subscription_repo import SubscriptionRepository
21 from o2ims.domain.configuration_repo import ConfigurationRepository
22 from o2common.helper import o2logging
23 logger = o2logging.get_logger(__name__)
26 class OcloudSqlAlchemyRepository(OcloudRepository):
27 def __init__(self, session):
29 self.session = session
31 def _add(self, ocloud: ocloud.Ocloud):
32 self.session.add(ocloud)
33 # self.session.add_all(ocloud.deploymentManagers)
35 def _get(self, ocloud_id) -> ocloud.Ocloud:
36 return self.session.query(ocloud.Ocloud).filter_by(
37 oCloudId=ocloud_id).first()
39 def _list(self) -> List[ocloud.Ocloud]:
40 return self.session.query(ocloud.Ocloud)
42 def _update(self, ocloud: ocloud.Ocloud):
43 self.session.add(ocloud)
46 class ResouceTypeSqlAlchemyRepository(ResourceTypeRepository):
47 def __init__(self, session):
49 self.session = session
51 def _add(self, resourceType: ocloud.ResourceType):
52 self.session.add(resourceType)
54 def _get(self, resource_type_id) -> ocloud.ResourceType:
55 return self.session.query(ocloud.ResourceType).filter_by(
56 resourceTypeId=resource_type_id).first()
58 def _get_by_name(self, resource_type_name) -> ocloud.ResourceType:
59 return self.session.query(ocloud.ResourceType).filter_by(
60 name=resource_type_name).first()
62 def _list(self) -> List[ocloud.ResourceType]:
63 return self.session.query(ocloud.ResourceType)
65 def _update(self, resourceType: ocloud.ResourceType):
66 self.session.add(resourceType)
69 class ResourcePoolSqlAlchemyRepository(ResourcePoolRepository):
70 def __init__(self, session):
72 self.session = session
74 def _add(self, resourcePool: ocloud.ResourcePool):
75 self.session.add(resourcePool)
77 def _get(self, resource_pool_id) -> ocloud.ResourcePool:
78 return self.session.query(ocloud.ResourcePool).filter_by(
79 resourcePoolId=resource_pool_id).first()
81 def _list(self) -> List[ocloud.ResourcePool]:
82 return self.session.query(ocloud.ResourcePool)
84 def _update(self, resourcePool: ocloud.ResourcePool):
85 self.session.add(resourcePool)
88 class ResourceSqlAlchemyRepository(ResourceRepository):
89 def __init__(self, session):
91 self.session = session
93 def _add(self, resource: ocloud.Resource):
94 self.session.add(resource)
96 def _get(self, resource_id) -> ocloud.Resource:
97 # return self.session.query(ocloud.Resource).filter_by(
98 # resourceId=resource_id).first()
99 # topq = uow.session.query(orm.resource).filter(
100 # orm.resource.c.resourceId == resourceId).\
101 # cte('cte', recursive=True)
102 # bootomq = uow.session.query(orm.resource).join(
103 # topq, orm.resource.c.parentId == topq.c.resourceId)
104 # res = uow.session.query(topq.union(bootomq))
106 res = self.session.query(ocloud.Resource).filter_by(
107 resourceId=id).first()
109 query = self.session.query(ocloud.Resource).filter_by(
110 parentId=res.resourceId)
113 child = recursive(r.resourceId)
114 children.append(child)
115 res.set_children(children)
117 return recursive(resource_id)
119 def _list(self, resourcepool_id, **kwargs) -> List[ocloud.Resource]:
120 return self.session.query(ocloud.Resource).filter_by(
121 resourcePoolId=resourcepool_id, **kwargs)
123 def _update(self, resource: ocloud.Resource):
124 self.session.add(resource)
127 class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
128 def __init__(self, session):
130 self.session = session
132 def _add(self, deployment_manager: ocloud.DeploymentManager):
133 self.session.add(deployment_manager)
135 def _get(self, deployment_manager_id) -> ocloud.DeploymentManager:
136 return self.session.query(ocloud.DeploymentManager).filter_by(
137 deploymentManagerId=deployment_manager_id).first()
139 def _list(self) -> List[ocloud.DeploymentManager]:
140 return self.session.query(ocloud.DeploymentManager)
142 def _update(self, deployment_manager: ocloud.DeploymentManager):
143 self.session.add(deployment_manager)
146 class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
147 def __init__(self, session):
149 self.session = session
151 def _add(self, subscription: subscription_obj.Subscription):
152 self.session.add(subscription)
154 def _get(self, subscription_id) -> subscription_obj.Subscription:
155 return self.session.query(subscription_obj.Subscription).filter_by(
156 subscriptionId=subscription_id).first()
158 def _list(self) -> List[subscription_obj.Subscription]:
159 return self.session.query(subscription_obj.Subscription)
161 def _update(self, subscription: subscription_obj.Subscription):
162 self.session.add(subscription)
164 def _delete(self, subscription_id):
165 self.session.query(subscription_obj.Subscription).filter_by(
166 subscriptionId=subscription_id).delete()
169 class ConfigurationSqlAlchemyRepository(ConfigurationRepository):
170 def __init__(self, session):
172 self.session = session
174 def _add(self, configuration: configuration_obj.Configuration):
175 self.session.add(configuration)
177 def _get(self, configuration_id) -> configuration_obj.Configuration:
178 return self.session.query(configuration_obj.Configuration).filter_by(
179 configurationId=configuration_id).first()
181 def _list(self) -> List[configuration_obj.Configuration]:
182 return self.session.query(configuration_obj.Configuration)
184 def _update(self, configuration: configuration_obj.Configuration):
185 self.session.add(configuration)
187 def _delete(self, configuration_id):
188 self.session.query(configuration_obj.Configuration).filter_by(
189 configurationId=configuration_id).delete()