Add context module, rename context to ctx in method args
Change-Id: Ifefaae130cb3c1652e851356219c217c1dfd1509
This commit is contained in:
parent
213e7bf0cc
commit
d8cd612d8e
85
climate/context.py
Normal file
85
climate/context.py
Normal file
@ -0,0 +1,85 @@
|
||||
# Copyright (c) 2013 Mirantis Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from eventlet import corolocal
|
||||
|
||||
from climate.openstack.common import log as logging
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Context(object):
|
||||
"""Context class for the Climate operations."""
|
||||
_contexts = {}
|
||||
|
||||
def __init__(self, user_id=None, tenant_id=None, auth_token=None,
|
||||
service_catalog=None, user_name=None, tenant_name=None,
|
||||
roles=None, **kwargs):
|
||||
if kwargs:
|
||||
LOG.warn('Arguments dropped when creating context: %s', kwargs)
|
||||
|
||||
self.user_id = user_id
|
||||
self.user_name = user_name
|
||||
self.tenant_id = tenant_id
|
||||
self.tenant_name = tenant_name
|
||||
self.auth_token = auth_token
|
||||
self.service_catalog = service_catalog
|
||||
self.roles = roles
|
||||
self._db_session = None
|
||||
|
||||
def __enter__(self):
|
||||
stack = self._contexts.setdefault(corolocal.get_ident(), [])
|
||||
stack.append(self)
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
stack = self._contexts[corolocal.get_ident()]
|
||||
stack.pop()
|
||||
if not stack:
|
||||
del self._contexts[corolocal.get_ident()]
|
||||
|
||||
@classmethod
|
||||
def current(cls):
|
||||
try:
|
||||
return cls._contexts[corolocal.get_ident()][-1]
|
||||
except (KeyError, IndexError):
|
||||
raise RuntimeError("Context isn't available here")
|
||||
|
||||
@classmethod
|
||||
def clear(cls):
|
||||
try:
|
||||
del cls._contexts[corolocal.get_ident()]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def clone(self):
|
||||
return Context(self.user_id,
|
||||
self.tenant_id,
|
||||
self.auth_token,
|
||||
self.service_catalog,
|
||||
self.user_name,
|
||||
self.tenant_name,
|
||||
self.roles)
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
'user_id': self.user_id,
|
||||
'user_name': self.user_name,
|
||||
'tenant_id': self.tenant_id,
|
||||
'tenant_name': self.tenant_name,
|
||||
'auth_token': self.auth_token,
|
||||
'service_catalog': self.service_catalog,
|
||||
'roles': self.roles,
|
||||
}
|
@ -106,118 +106,118 @@ def to_dict(func):
|
||||
|
||||
#Reservation
|
||||
|
||||
def reservation_create(context, reservation_values):
|
||||
def reservation_create(ctx, reservation_values):
|
||||
"""Create a reservation from the values."""
|
||||
return IMPL.reservation_create(context, reservation_values)
|
||||
return IMPL.reservation_create(ctx, reservation_values)
|
||||
|
||||
|
||||
@to_dict
|
||||
def reservation_get_all_by_lease(context, lease_id):
|
||||
def reservation_get_all_by_lease(ctx, lease_id):
|
||||
"""Return all reservations belongs to specific lease."""
|
||||
return IMPL.reservation_get_all_by_lease(context, lease_id)
|
||||
return IMPL.reservation_get_all_by_lease(ctx, lease_id)
|
||||
|
||||
|
||||
@to_dict
|
||||
def reservation_get(context, reservation_id):
|
||||
def reservation_get(ctx, reservation_id):
|
||||
"""Return specific reservation."""
|
||||
return IMPL.reservation_get(context, reservation_id)
|
||||
return IMPL.reservation_get(ctx, reservation_id)
|
||||
|
||||
|
||||
def reservation_destroy(context, reservation_id):
|
||||
def reservation_destroy(ctx, reservation_id):
|
||||
"""Delete specific reservation."""
|
||||
IMPL.reservation_destroy(context, reservation_id)
|
||||
IMPL.reservation_destroy(ctx, reservation_id)
|
||||
|
||||
|
||||
def reservation_update(context, reservation_id, reservation_values):
|
||||
def reservation_update(ctx, reservation_id, reservation_values):
|
||||
"""Update reservation."""
|
||||
IMPL.reservation_update(context, reservation_id, reservation_values)
|
||||
IMPL.reservation_update(ctx, reservation_id, reservation_values)
|
||||
|
||||
|
||||
#Lease
|
||||
|
||||
def lease_create(context, lease_values):
|
||||
def lease_create(ctx, lease_values):
|
||||
"""Create a lease from values."""
|
||||
return IMPL.lease_create(context, lease_values)
|
||||
return IMPL.lease_create(ctx, lease_values)
|
||||
|
||||
|
||||
@to_dict
|
||||
def lease_get_all(context):
|
||||
def lease_get_all(ctx):
|
||||
"""Return all leases."""
|
||||
return IMPL.lease_get_all(context)
|
||||
return IMPL.lease_get_all(ctx)
|
||||
|
||||
|
||||
@to_dict
|
||||
def lease_get_all_by_tenant(context, tenant_id):
|
||||
def lease_get_all_by_tenant(ctx, tenant_id):
|
||||
"""Return all leases in specific tenant."""
|
||||
return IMPL.lease_get_all_by_tenant(context, tenant_id)
|
||||
return IMPL.lease_get_all_by_tenant(ctx, tenant_id)
|
||||
|
||||
|
||||
@to_dict
|
||||
def lease_get_all_by_user(context, user_id):
|
||||
def lease_get_all_by_user(ctx, user_id):
|
||||
"""Return all leases belongs to specific user."""
|
||||
return IMPL.lease_get_all_by_user(context, user_id)
|
||||
return IMPL.lease_get_all_by_user(ctx, user_id)
|
||||
|
||||
|
||||
@to_dict
|
||||
def lease_get(context, lease_id):
|
||||
def lease_get(ctx, lease_id):
|
||||
"""Return lease."""
|
||||
return IMPL.lease_get(context, lease_id)
|
||||
return IMPL.lease_get(ctx, lease_id)
|
||||
|
||||
|
||||
@to_dict
|
||||
def lease_list(context):
|
||||
def lease_list(ctx):
|
||||
"""Return a list of all existing leases."""
|
||||
return IMPL.lease_list(context)
|
||||
return IMPL.lease_list(ctx)
|
||||
|
||||
|
||||
def lease_destroy(context, lease_id):
|
||||
def lease_destroy(ctx, lease_id):
|
||||
"""Delete lease or raise if not exists."""
|
||||
IMPL.lease_destroy(context, lease_id)
|
||||
IMPL.lease_destroy(ctx, lease_id)
|
||||
|
||||
|
||||
def lease_update(context, lease_id, lease_values):
|
||||
def lease_update(ctx, lease_id, lease_values):
|
||||
"""Update lease or raise if not exists."""
|
||||
IMPL.lease_update(context, lease_id, lease_values)
|
||||
IMPL.lease_update(ctx, lease_id, lease_values)
|
||||
|
||||
|
||||
#Events
|
||||
|
||||
@to_dict
|
||||
def event_create(context, event_values):
|
||||
def event_create(ctx, event_values):
|
||||
"""Create an event from values."""
|
||||
return IMPL.event_create(context, event_values)
|
||||
return IMPL.event_create(ctx, event_values)
|
||||
|
||||
|
||||
@to_dict
|
||||
def event_get_all(context):
|
||||
def event_get_all(ctx):
|
||||
"""Return all events."""
|
||||
return IMPL.event_get_all(context)
|
||||
return IMPL.event_get_all(ctx)
|
||||
|
||||
|
||||
@to_dict
|
||||
def event_get(context, event_id):
|
||||
def event_get(ctx, event_id):
|
||||
"""Return a specific event."""
|
||||
return IMPL.event_get(context, event_id)
|
||||
return IMPL.event_get(ctx, event_id)
|
||||
|
||||
|
||||
@to_dict
|
||||
def event_get_all_sorted_by_filters(context, sort_key, sort_dir, filters):
|
||||
def event_get_all_sorted_by_filters(ctx, sort_key, sort_dir, filters):
|
||||
"""Return instances sorted by param."""
|
||||
return IMPL.event_get_all_sorted_by_filters(context, sort_key, sort_dir,
|
||||
return IMPL.event_get_all_sorted_by_filters(ctx, sort_key, sort_dir,
|
||||
filters)
|
||||
|
||||
|
||||
@to_dict
|
||||
def event_list(context, param):
|
||||
def event_list(ctx, param):
|
||||
"""Return a list of events."""
|
||||
return IMPL.event_list(context)
|
||||
return IMPL.event_list(ctx)
|
||||
|
||||
|
||||
def event_destroy(context, event_id):
|
||||
def event_destroy(ctx, event_id):
|
||||
"""Delete event or raise if not exists."""
|
||||
IMPL.event_destroy(context, event_id)
|
||||
IMPL.event_destroy(ctx, event_id)
|
||||
|
||||
|
||||
def event_update(context, event_id, event_values):
|
||||
def event_update(ctx, event_id, event_values):
|
||||
"""Update event or raise if not exists."""
|
||||
IMPL.event_update(context, event_id, event_values)
|
||||
IMPL.event_update(ctx, event_id, event_values)
|
||||
|
@ -38,31 +38,31 @@ def get_backend():
|
||||
return sys.modules[__name__]
|
||||
|
||||
|
||||
def model_query(model, context, session=None, project_only=None):
|
||||
def model_query(model, ctx, session=None, project_only=None):
|
||||
"""Query helper.
|
||||
|
||||
:param model: base model to query
|
||||
:param context: context to query under
|
||||
:param project_only: if present and context is user-type, then restrict
|
||||
query to match the context's project_id.
|
||||
:param ctx: ctx to query under
|
||||
:param project_only: if present and ctx is user-type, then restrict
|
||||
query to match the ctx's project_id.
|
||||
"""
|
||||
session = session or get_session()
|
||||
|
||||
query = session.query(model)
|
||||
|
||||
if project_only:
|
||||
query = query.filter_by(tenant_id=context.project_id)
|
||||
query = query.filter_by(tenant_id=ctx.project_id)
|
||||
|
||||
return query
|
||||
|
||||
|
||||
def column_query(context, *columns, **kwargs):
|
||||
def column_query(ctx, *columns, **kwargs):
|
||||
session = kwargs.get("session") or get_session()
|
||||
|
||||
query = session.query(*columns)
|
||||
|
||||
if kwargs.get("project_only"):
|
||||
query = query.filter_by(tenant_id=context.tenant_id)
|
||||
query = query.filter_by(tenant_id=ctx.tenant_id)
|
||||
|
||||
return query
|
||||
|
||||
@ -130,28 +130,28 @@ class InequalityCondition(object):
|
||||
|
||||
|
||||
#Reservation
|
||||
def _reservation_get(context, session, reservation_id):
|
||||
query = model_query(models.Reservation, context, session)
|
||||
def _reservation_get(ctx, session, reservation_id):
|
||||
query = model_query(models.Reservation, ctx, session)
|
||||
return query.filter_by(id=reservation_id).first()
|
||||
|
||||
|
||||
def reservation_get(context, reservation_id):
|
||||
return _reservation_get(context, get_session(), reservation_id)
|
||||
def reservation_get(ctx, reservation_id):
|
||||
return _reservation_get(ctx, get_session(), reservation_id)
|
||||
|
||||
|
||||
def reservation_get_all(context):
|
||||
query = model_query(models.Reservation, context, get_session())
|
||||
def reservation_get_all(ctx):
|
||||
query = model_query(models.Reservation, ctx, get_session())
|
||||
return query.all()
|
||||
|
||||
|
||||
def reservation_get_all_by_lease_id(context, lease_id):
|
||||
reservations = model_query(models.Reservation, context, get_session()).\
|
||||
def reservation_get_all_by_lease_id(ctx, lease_id):
|
||||
reservations = model_query(models.Reservation, ctx, get_session()).\
|
||||
filter_by(lease_id=lease_id)
|
||||
|
||||
return reservations.all()
|
||||
|
||||
|
||||
def reservation_create(context, values):
|
||||
def reservation_create(ctx, values):
|
||||
values = values.copy()
|
||||
reservation = models.Reservation()
|
||||
reservation.update(values)
|
||||
@ -164,24 +164,24 @@ def reservation_create(context, values):
|
||||
# raise exception about duplicated columns (e.columns)
|
||||
raise RuntimeError("DBDuplicateEntry: %s" % e.columns)
|
||||
|
||||
return reservation_get(context, reservation.id)
|
||||
return reservation_get(ctx, reservation.id)
|
||||
|
||||
|
||||
def reservation_update(context, reservation_id, values):
|
||||
def reservation_update(ctx, reservation_id, values):
|
||||
session = get_session()
|
||||
|
||||
with session.begin():
|
||||
reservation = _reservation_get(context, session, reservation_id)
|
||||
reservation = _reservation_get(ctx, session, reservation_id)
|
||||
reservation.update(values)
|
||||
reservation.save(session=session)
|
||||
|
||||
return reservation_get(context, reservation_id)
|
||||
return reservation_get(ctx, reservation_id)
|
||||
|
||||
|
||||
def reservation_destroy(context, reservation_id):
|
||||
def reservation_destroy(ctx, reservation_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
reservation = _reservation_get(context, session, reservation_id)
|
||||
reservation = _reservation_get(ctx, session, reservation_id)
|
||||
|
||||
if not reservation:
|
||||
# raise not found error
|
||||
@ -191,33 +191,33 @@ def reservation_destroy(context, reservation_id):
|
||||
|
||||
|
||||
#Lease
|
||||
def _lease_get(context, session, lease_id):
|
||||
query = model_query(models.Lease, context, session)
|
||||
def _lease_get(ctx, session, lease_id):
|
||||
query = model_query(models.Lease, ctx, session)
|
||||
return query.filter_by(id=lease_id).first()
|
||||
|
||||
|
||||
def lease_get(context, lease_id):
|
||||
return _lease_get(context, get_session(), lease_id)
|
||||
def lease_get(ctx, lease_id):
|
||||
return _lease_get(ctx, get_session(), lease_id)
|
||||
|
||||
|
||||
def lease_get_all(context):
|
||||
query = model_query(models.Lease, context, get_session())
|
||||
def lease_get_all(ctx):
|
||||
query = model_query(models.Lease, ctx, get_session())
|
||||
return query.all()
|
||||
|
||||
|
||||
def lease_get_all_by_tenant(context, tenant_id):
|
||||
def lease_get_all_by_tenant(ctx, tenant_id):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
def lease_get_all_by_user(context, user_id):
|
||||
def lease_get_all_by_user(ctx, user_id):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
def lease_list(context):
|
||||
return model_query(models.Lease, context, get_session()).all()
|
||||
def lease_list(ctx):
|
||||
return model_query(models.Lease, ctx, get_session()).all()
|
||||
|
||||
|
||||
def lease_create(context, values):
|
||||
def lease_create(ctx, values):
|
||||
values = values.copy()
|
||||
lease = models.Lease()
|
||||
reservations = values.pop("reservations", [])
|
||||
@ -245,24 +245,24 @@ def lease_create(context, values):
|
||||
# raise exception about duplicated columns (e.columns)
|
||||
raise RuntimeError("DBDuplicateEntry: %s" % e.columns)
|
||||
|
||||
return lease_get(context, lease.id)
|
||||
return lease_get(ctx, lease.id)
|
||||
|
||||
|
||||
def lease_update(context, lease_id, values):
|
||||
def lease_update(ctx, lease_id, values):
|
||||
session = get_session()
|
||||
|
||||
with session.begin():
|
||||
lease = _lease_get(context, session, lease_id)
|
||||
lease = _lease_get(ctx, session, lease_id)
|
||||
lease.update(values)
|
||||
lease.save(session=session)
|
||||
|
||||
return lease_get(context, lease_id)
|
||||
return lease_get(ctx, lease_id)
|
||||
|
||||
|
||||
def lease_destroy(context, lease_id):
|
||||
def lease_destroy(ctx, lease_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
lease = _lease_get(context, session, lease_id)
|
||||
lease = _lease_get(ctx, session, lease_id)
|
||||
|
||||
if not lease:
|
||||
# raise not found error
|
||||
@ -272,30 +272,30 @@ def lease_destroy(context, lease_id):
|
||||
|
||||
|
||||
#Event
|
||||
def _event_get(context, session, event_id):
|
||||
query = model_query(models.Event, context, session)
|
||||
def _event_get(ctx, session, event_id):
|
||||
query = model_query(models.Event, ctx, session)
|
||||
return query.filter_by(id=event_id).first()
|
||||
|
||||
|
||||
def _event_get_all(context, session):
|
||||
query = model_query(models.Event, context, session)
|
||||
def _event_get_all(ctx, session):
|
||||
query = model_query(models.Event, ctx, session)
|
||||
return query
|
||||
|
||||
|
||||
def event_get(context, event_id):
|
||||
return _event_get(context, get_session(), event_id)
|
||||
def event_get(ctx, event_id):
|
||||
return _event_get(ctx, get_session(), event_id)
|
||||
|
||||
|
||||
def event_get_all(context):
|
||||
return _event_get_all(context, get_session()).all()
|
||||
def event_get_all(ctx):
|
||||
return _event_get_all(ctx, get_session()).all()
|
||||
|
||||
|
||||
def event_get_all_sorted_by_filters(context, sort_key, sort_dir, filters):
|
||||
def event_get_all_sorted_by_filters(ctx, sort_key, sort_dir, filters):
|
||||
"""Return events filtered and sorted by name of the field."""
|
||||
|
||||
sort_fn = {'desc': desc, 'asc': asc}
|
||||
|
||||
events_query = _event_get_all(context, get_session())
|
||||
events_query = _event_get_all(ctx, get_session())
|
||||
|
||||
if 'status' in filters:
|
||||
events_query = \
|
||||
@ -308,11 +308,11 @@ def event_get_all_sorted_by_filters(context, sort_key, sort_dir, filters):
|
||||
return events_query.all()
|
||||
|
||||
|
||||
def event_list(context):
|
||||
return model_query(models.Event.id, context, get_session()).all()
|
||||
def event_list(ctx):
|
||||
return model_query(models.Event.id, ctx, get_session()).all()
|
||||
|
||||
|
||||
def event_create(context, values):
|
||||
def event_create(ctx, values):
|
||||
values = values.copy()
|
||||
event = models.Event()
|
||||
event.update(values)
|
||||
@ -325,24 +325,24 @@ def event_create(context, values):
|
||||
# raise exception about duplicated columns (e.columns)
|
||||
raise RuntimeError("DBDuplicateEntry: %s" % e.columns)
|
||||
|
||||
return event_get(context, event.id)
|
||||
return event_get(ctx, event.id)
|
||||
|
||||
|
||||
def event_update(context, event_id, values):
|
||||
def event_update(ctx, event_id, values):
|
||||
session = get_session()
|
||||
|
||||
with session.begin():
|
||||
event = _event_get(context, session, event_id)
|
||||
event = _event_get(ctx, session, event_id)
|
||||
event.update(values)
|
||||
event.save(session=session)
|
||||
|
||||
return event_get(context, event_id)
|
||||
return event_get(ctx, event_id)
|
||||
|
||||
|
||||
def event_destroy(context, event_id):
|
||||
def event_destroy(ctx, event_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
event = _event_get(context, session, event_id)
|
||||
event = _event_get(ctx, session, event_id)
|
||||
|
||||
if not event:
|
||||
# raise not found error
|
||||
|
Loading…
x
Reference in New Issue
Block a user