
    \e                        d Z ddlZddlZddlZddlZ	 ej
                  ZdZ	 ej                  e      Zej                  Zej                  Zej                  ZddZddZddZeddfdZd	 Zd
 Zd Zd Zd ZddZd Zy# e$ r eZY kw xY w)z+
Reflection module.

.. versionadded:: 1.1
    N)builtins__builtin____builtins__
exceptionsTc              #   z   K   t        j                  |       D ]  \  }}|j                  d      r|r||f ! yw)z`Yields the members of an object, filtering by hidden/not hidden.

    .. versionadded:: 2.3
    _N)inspect
getmembers
startswith)objexclude_hiddennamevalues       7/usr/lib/python3/dist-packages/oslo_utils/reflection.pyget_membersr   /   sA     
 !++C0 u??3NUms   9;c                 N    t        | |      D cg c]  \  }}|	 c}}S c c}}w )z&Get all the member names for a object.)r   )r   )r   r   r   _objs       r   get_member_namesr   :   s+     N;=\dDD = = =s   !c                    t        j                  |       rt        d      t        j                  |       rt	        |       } t        | t              st        |       } |r!	 | j                  t        v }|r| j                  S |r't        | d      r| j                  d| j                  S | j                  S # t        $ r Y @w xY w)a  Get class name for object.

    If object is a type, returns name of the type. If object is a bound
    method or a class method, returns its ``self`` object's class name.
    If object is an instance of class, returns instance's class name.
    Else, name of the type of the object is returned. If fully_qualified
    is True, returns fully qualified name of the type. For builtin types,
    just name is returned. TypeError is raised if can't get class name from
    object.
    zCan't get class name.
__module__.)r	   
isfunction	TypeErrorismethodget_method_self
isinstancetyper   _BUILTIN_MODULES__name__AttributeErrorhasattr)r   fully_qualifiedtruncate_builtinsbuilt_ins       r   get_class_namer%   @   s     #/00c"c4 3i	$~~)99H ||#735..#,,77||  		s   B4 4	C ?C c              #      K   t        | t              st        |       } | j                         D ]  }t        ||      st	        |||       ! yw)a  Get class names of object parent classes.

    Iterate over all class names object is instance or subclass of,
    in order of method resolution (mro). If up_to parameter is provided,
    only name of classes that are sublcasses to that class are returned.
    )r"   r#   N)r   r   mro
issubclassr%   )r   up_tor"   r#   clss        r   get_all_class_namesr+   `   sS      c4 3iwwy Fc5! 1@3DF FFs
   ;AAc                 
   t        |       }|8t        |t              r|}nt        |      }	 |j                  | j                  f}nrt        j                  |       st        j                  |       r	 | j                  | j                  f}n.t        |       }|t        u r| }	 |j                  |j                  f}dj                  |      S # t
        $ r& |j                  |j                  | j                  f}Y ?w xY w# t
        $ rW t        | d      r0| j                  }|j                  |j                  | j                  f}n| j                  | j                  f}Y w xY w# t
        $ r |j                  |j                  f}Y w xY w)zeGenerate a name from callable.

    Tries to do the best to guess fully qualified callable name.
    im_classr   )r   r   r   r   __qualname__r    r   r	   r   r   r!   r-   
_TYPE_TYPEjoin)functionmethod_selfr-   partss       r   get_callable_namer4   q   s}   
 "(+Kk4("HK(H	P(((*?*?@E 
		(	#w'9'9('C		A(((*?*?@E >z!H	=(((*?*?@E 88E?-  	P(((*;*;X=N=NOE	P  	Ax,#,,!,,!**H,=,=? ",,h.?.?@	A  	=(((*;*;<E	=s6   C	 1C;  E 	,C87C8;AEE!FFc                     t        j                  |       sy	  t        j                  d      |       S # t        $ r Y yw xY w)z;Gets the ``self`` object attached to this method (or none).N__self__)r	   r   operator
attrgetterr    methods    r   r   r      sB    F#.x"":.v66 s   3 	??c                     | |u ry| |k(  ryy)z*Returns if the two callbacks are the same.TF )	callback1	callback2s     r   is_same_callbackr?      s    I I
     c                     t        |       duS )z2Returns if the given method is bound to an object.N)r   r9   s    r   is_bound_methodrB      s    6"$..r@   c                 H    t        j                  |       xr t        | |      S )zCReturns if the object is class and it is subclass of a given class.)r	   isclassr(   )r   r*   s     r   is_subclassrE      s    ??38JsC$88r@   c                 `   t        |       }t        |j                  j                               }|j                  j	                         D ]b  \  }}|j
                  t        j                  t        j                  fv s |s5|j                  t        j                  usR|j                  |       d |S )zGet names of callable arguments.

    Special arguments (like ``*args`` and ``**kwargs``) are not included into
    output.

    If required_only is True, optional arguments (with default values)
    are not included into output.
    )get_signaturelist
parameterskeysitemskind	ParameterVAR_POSITIONALVAR_KEYWORDdefaultemptyremove)r1   required_onlysigfunction_args
param_nameps         r   get_callable_argsrX      s     
!C,,./M--/ -
AFFy//1F1FGG199IOO#C  ,- r@   c                 l    t        |       }t        d |j                  j                         D              S )z@Returns ``True`` if function accepts kwargs otherwise ``False``.c              3   V   K   | ]!  }|j                   t        j                  k(   # y w)N)rL   rM   rO   ).0rW   s     r   	<genexpr>z!accepts_kwargs.<locals>.<genexpr>   s$      ,-)'''s   '))rG   anyrI   values)r1   rT   s     r   accepts_kwargsr_      s3    

!C 141F1F1H  r@   )T)TT)F)__doc__r	   loggingr7   typesTypeTyper/   r    r   r   	getLoggerr   LOGrM   	Signature	signaturerG   r   r   r%   objectr+   r4   r   r?   rB   rE   rX   r_   r<   r@   r   <module>ri      s   "    J M  g! 		!!=@ $*(,F"%P/
9
$a  Js   B BB