safe_utils.getcallargs was written to support python2.6 which did not have inspect.getcallargs. Now that support for python2.6 has been dropped it should be replaced with inspect.getcallargs. Change-Id: Idf5b9a7f4d10b81b1be9aed26505e3acaa6f7e24
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright 2010 United States Government as represented by the
 | 
						|
# Administrator of the National Aeronautics and Space Administration.
 | 
						|
# Copyright 2011 Justin Santa Barbara
 | 
						|
# 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.
 | 
						|
 | 
						|
"""Utilities and helper functions that won't produce circular imports."""
 | 
						|
 | 
						|
 | 
						|
def get_wrapped_function(function):
 | 
						|
    """Get the method at the bottom of a stack of decorators."""
 | 
						|
    if not hasattr(function, '__closure__') or not function.__closure__:
 | 
						|
        return function
 | 
						|
 | 
						|
    def _get_wrapped_function(function):
 | 
						|
        if not hasattr(function, '__closure__') or not function.__closure__:
 | 
						|
            return None
 | 
						|
 | 
						|
        for closure in function.__closure__:
 | 
						|
            func = closure.cell_contents
 | 
						|
 | 
						|
            deeper_func = _get_wrapped_function(func)
 | 
						|
            if deeper_func:
 | 
						|
                return deeper_func
 | 
						|
            elif hasattr(closure.cell_contents, '__call__'):
 | 
						|
                return closure.cell_contents
 | 
						|
 | 
						|
    return _get_wrapped_function(function)
 |