1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2010 OpenStack LLC.
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may
7
# not use this file except in compliance with the License. You may obtain
8
# a copy of the License at
10
# http://www.apache.org/licenses/LICENSE-2.0
12
# Unless required by applicable law or agreed to in writing, software
13
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
# License for the specific language governing permissions and limitations
18
from keystone.backends.sqlalchemy import get_session, models, aliased
19
from keystone.backends.api import BaseEndpointTemplateAPI
22
class EndpointTemplateAPI(BaseEndpointTemplateAPI):
23
def create(self, values):
24
endpoint_template = models.EndpointTemplates()
25
endpoint_template.update(values)
26
endpoint_template.save()
27
return endpoint_template
29
def update(self, id, values, session=None):
31
session = get_session()
33
endpoint_template_ref = self.get(id, session)
34
endpoint_template_ref.update(values)
35
endpoint_template_ref.save(session=session)
36
return endpoint_template_ref
38
def delete(self, id, session=None):
40
session = get_session()
42
endpoint_template = self.get(id, session)
43
session.delete(endpoint_template)
45
def get(self, id, session=None):
47
session = get_session()
48
result = session.query(models.EndpointTemplates).\
49
filter_by(id=id).first()
52
def get_all(self, session=None):
54
session = get_session()
55
return session.query(models.EndpointTemplates).all()
57
def get_by_service(self, service_id, session=None):
59
session = get_session()
60
return session.query(models.EndpointTemplates).\
61
filter_by(service=service_id).all()
63
def get_page(self, marker, limit, session=None):
65
session = get_session()
68
return session.query(models.EndpointTemplates).\
69
filter("id>:marker").params(\
70
marker='%s' % marker).order_by(\
71
models.EndpointTemplates.id.desc()).limit(limit).all()
73
return session.query(models.EndpointTemplates).order_by(\
74
models.EndpointTemplates.id.desc()).\
77
def get_page_markers(self, marker, limit, session=None):
79
session = get_session()
80
first = session.query(models.EndpointTemplates).order_by(\
81
models.EndpointTemplates.id).first()
82
last = session.query(models.EndpointTemplates).order_by(\
83
models.EndpointTemplates.id.desc()).first()
88
next_page = session.query(models.EndpointTemplates).\
89
filter("id > :marker").\
90
params(marker='%s' % marker).\
91
order_by(models.EndpointTemplates.id).\
94
prev_page = session.query(models.EndpointTemplates).\
95
filter("id < :marker").\
96
params(marker='%s' % marker).\
97
order_by(models.EndpointTemplates.id.desc()).\
100
if len(next_page) == 0:
105
if len(prev_page) == 0:
110
if prev_page.id == marker:
113
prev_page = prev_page.id
114
if next_page.id == last.id:
117
next_page = next_page.id
118
return (prev_page, next_page)
120
def endpoint_get_by_tenant_get_page(self, tenant_id, marker, limit,
123
session = get_session()
125
return session.query(models.Endpoints).\
126
filter(models.Endpoints.tenant_id == tenant_id).\
127
filter("id >= :marker").params(
128
marker='%s' % marker).order_by(
129
models.Endpoints.id).limit(limit).all()
131
return session.query(models.Endpoints).\
132
filter(models.Endpoints.tenant_id == tenant_id).\
133
order_by(models.Endpoints.id).limit(limit).all()
135
def endpoint_get_by_tenant_get_page_markers(self, tenant_id, marker, limit,
138
session = get_session()
139
tba = aliased(models.Endpoints)
140
first = session.query(tba).\
141
filter(tba.tenant_id == tenant_id).\
142
order_by(tba.id).first()
143
last = session.query(tba).\
144
filter(tba.tenant_id == tenant_id).\
145
order_by(tba.id.desc()).first()
150
next_page = session.query(tba).\
151
filter(tba.tenant_id == tenant_id).\
152
filter("id>=:marker").params(
153
marker='%s' % marker).order_by(
154
tba.id).limit(int(limit)).all()
156
prev_page = session.query(tba).\
157
filter(tba.tenant_id == tenant_id).\
158
filter("id < :marker").params(
159
marker='%s' % marker).order_by(
160
tba.id).limit(int(limit) + 1).all()
161
next_len = len(next_page)
162
prev_len = len(prev_page)
174
if first.id == marker:
177
prev_page = prev_page.id
178
if marker == last.id:
181
next_page = next_page.id
182
return (prev_page, next_page)
184
def endpoint_add(self, values):
185
endpoints = models.Endpoints()
186
endpoints.update(values)
190
def endpoint_get(self, id, session=None):
192
session = get_session()
193
result = session.query(models.Endpoints).\
194
filter_by(id=id).first()
197
def endpoint_get_by_tenant(self, tenant_id, session=None):
199
session = get_session()
200
result = session.query(models.Endpoints).\
201
filter_by(tenant_id=tenant_id).first()
204
def endpoint_get_by_endpoint_template(
205
self, endpoint_template_id, session=None):
207
session = get_session()
208
result = session.query(models.Endpoints).\
209
filter_by(endpoint_template_id=endpoint_template_id).all()
212
def endpoint_delete(self, id, session=None):
214
session = get_session()
215
with session.begin():
216
endpoints = self.endpoint_get(id, session)
218
session.delete(endpoints)
222
return EndpointTemplateAPI()