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
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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
 |