24 __all__ = [
"get_caller_name"]
 
   28     """Get the name of the caller method. 
   30     Any item that cannot be determined (or is not relevant, e.g. a free 
   31     function has no class) is silently omitted, along with an 
   37         How many levels of stack to skip while getting caller name; 
   38         1 means "who calls me", 2 means "who calls my caller", etc. 
   43         Name of the caller as a string in the form ``module.class.method``. 
   44         An empty string is returned if ``skip`` exceeds the stack height. 
   48     Adapted from from http://stackoverflow.com/a/9812105 
   49     by adding support to get the class from ``parentframe.f_locals['cls']`` 
   51     stack = inspect.stack()
 
   53     if len(stack) < start + 1:
 
   55     parentframe = stack[start][0]
 
   58     module = inspect.getmodule(parentframe)
 
   60         name.append(module.__name__)
 
   62     if 'self' in parentframe.f_locals:
 
   63         name.append(
type(parentframe.f_locals[
'self']).__name__)
 
   64     elif 'cls' in parentframe.f_locals:
 
   65         name.append(parentframe.f_locals[
'cls'].__name__)
 
   66     codename = parentframe.f_code.co_name
 
   67     if codename != 
'<module>':