Files
gantt/nova/openstack/common/context.py
Mark McLoughlin 2922ba0b88 Sync harmless changes from oslo-incubator
Includes these commits:

  3948aee Highlighting the deprecated nature of 'log-format'.
  b21fc56 Fix bad default for show_deleted
  d28fa69 python3: Add python3 compatibility.
  0bf03b7 Add network_utils.urlsplit
  e456727 Remove useless logging in networks_utils
  7119e29 Enable hacking H404 test.
  b41862d Use param keyword for docstrings
  2f01388 Use Python 3.x compatible except construct
  e3545f8 Enable hacking H402 test
  484a1df Enable hacking H403 test
  35660da Enable hacking H401 test
  874249e Add support for requirements.txt.
  b135234 Remove the notifier and its dependencies from log.py
  926b3e9 Fixes import order nits

Changes which may look not look so harmless:

 - the common get_admin_context() method is not used by Nova
 - network_utils.urlsplit() is added but not used yet
 - suppport for requirements.txt is added to patch_tox_venv but
   actually it doesn't use those files

Change-Id: I03e67f4648dcaf57620f11e63cfd8e7dbe3665cb
2013-07-09 08:02:19 +01:00

84 lines
2.7 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2011 OpenStack Foundation.
# All Rights Reserved.
#
# 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.
"""
Simple class that stores security context information in the web request.
Projects should subclass this class if they wish to enhance the request
context or provide additional information in their specific WSGI pipeline.
"""
import itertools
from nova.openstack.common import uuidutils
def generate_request_id():
return 'req-%s' % uuidutils.generate_uuid()
class RequestContext(object):
"""Helper class to represent useful information about a request context.
Stores information about the security context under which the user
accesses the system, as well as additional request information.
"""
def __init__(self, auth_token=None, user=None, tenant=None, is_admin=False,
read_only=False, show_deleted=False, request_id=None):
self.auth_token = auth_token
self.user = user
self.tenant = tenant
self.is_admin = is_admin
self.read_only = read_only
self.show_deleted = show_deleted
if not request_id:
request_id = generate_request_id()
self.request_id = request_id
def to_dict(self):
return {'user': self.user,
'tenant': self.tenant,
'is_admin': self.is_admin,
'read_only': self.read_only,
'show_deleted': self.show_deleted,
'auth_token': self.auth_token,
'request_id': self.request_id}
def get_admin_context(show_deleted=False):
context = RequestContext(None,
tenant=None,
is_admin=True,
show_deleted=show_deleted)
return context
def get_context_from_function_and_args(function, args, kwargs):
"""Find an arg of type RequestContext and return it.
This is useful in a couple of decorators where we don't
know much about the function we're wrapping.
"""
for arg in itertools.chain(kwargs.values(), args):
if isinstance(arg, RequestContext):
return arg
return None