oslo.context 2.4.0 release

meta:version: 2.4.0
 meta:series: newton
 meta:release-type: release
 meta:announce: openstack-dev@lists.openstack.org
 meta:pypi: yes
 meta:first: no
 meta:release:Author: Joshua Harlow <jxharlow@godaddy.com>
 meta:release:Commit: Joshua Harlow <jxharlow@godaddy.com>
 meta:release:Change-Id: Icc6a0c9987adffd07a74ab7aec142d110a76707f
 meta:release:Code-Review+2: Doug Hellmann <doug@doughellmann.com>
 meta:release:Workflow+1: Doug Hellmann <doug@doughellmann.com>
 -----BEGIN PGP SIGNATURE-----
 Comment: GPGTools - http://gpgtools.org
 
 iQEcBAABAgAGBQJXRNAJAAoJEDttBqDEKEN6RnwH/20q40f5rUO6TmWemQ2IlbKi
 JXHvkzP+3H7YRU+6AtOs8HxP1u0FCWNDstFJV83YVf0a9YVHIvr+L2lwSyy5YJbO
 KyniJtZ2E5d0mAyllm3Czo1krliTwroui8NjhabL6/MEQDClefHLdUvAadBNDEJt
 AhSWAOSIflwbkmiQNePrY6SZXiUrRdLaB72iLosA84UfHCmMsiD+spbM78CIwPPG
 +0yZQ54Op4erd55rZ6ztkLfCKqA4ew0mZFGzy3OAvUpKMpvsPjujaobxiNlEX9N1
 nkdys4bbk2bZ0gSjFx6vj3oF8hUFx+GkmA18zELhWDdA/lFKKnrSSZ3MVTAPqp4=
 =Rjk3
 -----END PGP SIGNATURE-----

Merge tag '2.4.0' into debian/newton

oslo.context 2.4.0 release

meta:version: 2.4.0
meta:series: newton
meta:release-type: release
meta:announce: openstack-dev@lists.openstack.org
meta:pypi: yes
meta:first: no
meta:release:Author: Joshua Harlow <jxharlow@godaddy.com>
meta:release:Commit: Joshua Harlow <jxharlow@godaddy.com>
meta:release:Change-Id: Icc6a0c9987adffd07a74ab7aec142d110a76707f
meta:release:Code-Review+2: Doug Hellmann <doug@doughellmann.com>
meta:release:Workflow+1: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Corey Bryant 2016-05-31 16:41:10 -04:00
commit 0eb36f3fa6
3 changed files with 80 additions and 9 deletions

View File

@ -34,6 +34,18 @@ import uuid
_request_store = threading.local()
# These arguments will be passed to a new context from the first available
# header to support backwards compatibility.
_ENVIRON_HEADERS = {'auth_token': ['HTTP_X_AUTH_TOKEN',
'HTTP_X_STORAGE_TOKEN'],
'user': ['HTTP_X_USER_ID',
'HTTP_X_USER'],
'tenant': ['HTTP_X_PROJECT_ID',
'HTTP_X_TENANT_ID',
'HTTP_X_TENANT'],
'user_domain': ['HTTP_X_USER_DOMAIN_ID'],
'project_domain': ['HTTP_X_PROJECT_DOMAIN_ID']}
def generate_request_id():
"""Generate a unique request id."""
@ -148,15 +160,21 @@ class RequestContext(object):
# Load a new context object from the environment variables set by
# auth_token middleware. See:
# http://docs.openstack.org/developer/keystonemiddleware/api/keystonemiddleware.auth_token.html#what-auth-token-adds-to-the-request-for-use-by-the-openstack-service
kwargs.setdefault('auth_token', environ.get('HTTP_X_AUTH_TOKEN'))
kwargs.setdefault('user', environ.get('HTTP_X_USER_ID'))
kwargs.setdefault('tenant', environ.get('HTTP_X_PROJECT_ID'))
kwargs.setdefault('user_domain', environ.get('HTTP_X_USER_DOMAIN_ID'))
kwargs.setdefault('project_domain',
environ.get('HTTP_X_PROJECT_DOMAIN_ID'))
roles = environ.get('HTTP_X_ROLES')
kwargs.setdefault('roles', roles.split(',') if roles else [])
# add kwarg if not specified by user from a list of possible headers
for k, v_list in _ENVIRON_HEADERS.items():
if k in kwargs:
continue
for v in v_list:
if v in environ:
kwargs[k] = environ[v]
break
if 'roles' not in kwargs:
roles = environ.get('HTTP_X_ROLES', environ.get('HTTP_X_ROLE'))
roles = [r.strip() for r in roles.split(',')] if roles else []
kwargs['roles'] = roles
return cls(**kwargs)

View File

@ -161,6 +161,59 @@ class ContextTest(test_base.BaseTestCase):
ctx = context.RequestContext.from_environ(environ={'HTTP_X_ROLES': ''})
self.assertEqual([], ctx.roles)
def test_from_environ_deprecated_variables(self):
value = uuid.uuid4().hex
environ = {'HTTP_X_USER': value}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(value, ctx.user)
environ = {'HTTP_X_TENANT_ID': value}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(value, ctx.tenant)
environ = {'HTTP_X_STORAGE_TOKEN': value}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(value, ctx.auth_token)
environ = {'HTTP_X_TENANT': value}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(value, ctx.tenant)
environ = {'HTTP_X_ROLE': value}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual([value], ctx.roles)
def test_from_environ_deprecated_precendence(self):
old = uuid.uuid4().hex
new = uuid.uuid4().hex
override = uuid.uuid4().hex
environ = {'HTTP_X_USER': old,
'HTTP_X_USER_ID': new}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(ctx.user, new)
ctx = context.RequestContext.from_environ(environ=environ,
user=override)
self.assertEqual(ctx.user, override)
environ = {'HTTP_X_TENANT': old,
'HTTP_X_PROJECT_ID': new}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(ctx.tenant, new)
ctx = context.RequestContext.from_environ(environ=environ,
tenant=override)
self.assertEqual(ctx.tenant, override)
def test_from_environ_strip_roles(self):
environ = {'HTTP_X_ROLES': ' abc\t,\ndef\n,ghi\n\n'}
ctx = context.RequestContext.from_environ(environ=environ)
self.assertEqual(['abc', 'def', 'ghi'], ctx.roles)
def test_from_function_and_args(self):
ctx = context.RequestContext(user="user1")
arg = []

View File

@ -24,7 +24,7 @@ commands = python setup.py test --coverage --coverage-package-name=oslo_context
show-source = True
ignore = E123,E125,H803
exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
[hacking]
import_exceptions =