Use context interface for constraint

Use the new constraint interface on the context rather than
setting an ugly attribute.

Depends-On: I6bc2539a1ddbf7990164abeb8bb951ddcb45c993

Related-Bug: #1493714
Change-Id: I9142ca96a40092b2a4c94920c4ded9bbc3a0b35b
This commit is contained in:
Kevin Benton 2017-07-12 01:08:48 -07:00
parent 4a316960f2
commit 9662e2b170
3 changed files with 10 additions and 18 deletions

View File

@ -92,11 +92,8 @@ def Resource(controller, faults=None, deserializers=None, serializers=None,
revision_number = api_common.check_request_for_revision_constraint(
request)
if revision_number is not None:
constraint = {'if_revision_match': revision_number,
'resource': controller._collection,
'resource_id': args['id']}
# TODO(kevinbenton): add an interface to context to do this
setattr(request.context, '_CONSTRAINT', constraint)
request.context.set_transaction_constraint(
controller._collection, args['id'], revision_number)
method = getattr(controller, action)
result = method(request=request, **args)

View File

@ -118,13 +118,8 @@ class QueryParametersHook(hooks.PecanHook):
state.request)
if revision_number is None:
return
constraint = {
'if_revision_match': revision_number,
'resource': collection,
'resource_id': state.request.context['resource_id']}
# TODO(kevinbenton): add an interface to context to do this
setattr(state.request.context['neutron_context'],
'_CONSTRAINT', constraint)
state.request.context['neutron_context'].set_transaction_constraint(
collection, state.request.context['resource_id'], revision_number)
def after(self, state):
resource = state.request.context.get('resource')

View File

@ -147,18 +147,18 @@ class RevisionPlugin(service_base.ServicePluginBase):
instance that is constrained as well as the requested revision number
to match.
"""
criteria = getattr(session.info.get('using_context'),
'_CONSTRAINT', None)
context = session.info.get('using_context')
criteria = context.get_transaction_constraint() if context else None
if not criteria:
return None, None
match = criteria['if_revision_match']
match = criteria.if_revision_match
mmap = standard_attr.get_standard_attr_resource_model_map()
model = mmap.get(criteria['resource'])
model = mmap.get(criteria.resource)
if not model:
msg = _("Revision matching not supported for this resource")
raise exc.BadRequest(resource=criteria['resource'], msg=msg)
raise exc.BadRequest(resource=criteria.resource, msg=msg)
instance = self._find_instance_by_column_value(
session, model, 'id', criteria['resource_id'])
session, model, 'id', criteria.resource_id)
return instance, match
def _enforce_if_match_constraints(self, session):