a
    $lJh%                     @   s&  d dl Z d dl mZmZmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZm Z  e!e!dddZ"G dd deZ#ee$ee f ee%df dddZ&e$e	e! dddZ'e$e	e! e(dddZ)dS )    N)cleandocgetdocgetfileisclassismodule	signature)Any
CollectionIterableOptionalTupleTypeUnion   )GroupRenderableType)escape_control_codes)ReprHighlighter)JupyterMixin)Panel)Pretty)Table)TextTextType)docreturnc                 C   s   |  d\}}}|S )z)Get the first paragraph from a docstring.z

)	partition)r   Z	paragraph_ r   K/var/www/shaz/venv/lib/python3.9/site-packages/pip/_vendor/rich/_inspect.py_first_paragraph   s    r    c                   @   s   e Zd ZdZdddddddddd	eee eeeeeeeeddddZee	d	d
dZ
edddZeeee	 dddZee dddZeee dddZdS )Inspecta  A renderable to inspect any Python Object.

    Args:
        obj (Any): An object to inspect.
        title (str, optional): Title to display over inspect result, or None use type. Defaults to None.
        help (bool, optional): Show full help text rather than just first paragraph. Defaults to False.
        methods (bool, optional): Enable inspection of callables. Defaults to False.
        docs (bool, optional): Also render doc strings. Defaults to True.
        private (bool, optional): Show private attributes (beginning with underscore). Defaults to False.
        dunder (bool, optional): Show attributes starting with double underscore. Defaults to False.
        sort (bool, optional): Sort attributes alphabetically. Defaults to True.
        all (bool, optional): Show all attributes. Defaults to False.
        value (bool, optional): Pretty print value of object. Defaults to True.
    NFT)	titlehelpmethodsdocsprivatedundersortallvalue)objr"   r#   r$   r%   r&   r'   r(   r)   r*   r   c       	         C   sd   t  | _|| _|p| || _|	r.d } }}|| _|| _|p@|| _|pJ|| _|| _	|| _
|
| _d S )NT)r   highlighterr+   _make_titler"   r#   r$   r%   r&   r'   r(   r*   )selfr+   r"   r#   r$   r%   r&   r'   r(   r)   r*   r   r   r   __init__%   s    

zInspect.__init__r+   r   c                 C   s:   t |st|st|r t|n
tt|}| |}|S )zMake a default title.)r   callabler   strtyper,   )r.   r+   Z	title_strZ
title_textr   r   r   r-   @   s    


zInspect._make_title)r   c                 C   s   t jt|   | jdddS )Nzscope.borderr   r   )r"   border_stylepadding)r   Zfitr   _renderr"   )r.   r   r   r   __rich__J   s    
zInspect.__rich__)namer+   r   c           
   	   C   s   zt t|d }W n( ty*   d}Y n ty<   Y dS 0 d}zt|}W n ttfyd   Y n0 t|dd}|r|d|  | |}|pt	|d|}t
|rd}nt
|rd	}nd
}t| dd|dd f|df|}	|	S )zGet a signature for a callable.:z(...)Nzinspect.callablestylezlink file://__qualname__classz	async defdef zinspect.r   )r2   r   
ValueError	TypeErrorr   OSErrorr   stylizer,   getattrinspectr   iscoroutinefunctionassemblereplace)
r.   r9   r+   
_signatureZsource_filenameZcallable_nameZsignature_textqualnameprefixZqual_signaturer   r   r   _get_signatureR   s6    


zInspect._get_signaturec                 #   s  t ttf t ttf ddd}tt ttf d fdd| j t }t|}| jsfdd |D }| jszd	d |D }|t| }fd
d|D }| j	r|j	|d t
jddd}|jdd |j}| j}t r| d }	|	dur|	V  dV  | jr4|  }
|
dur4t|
dd}||}|V  dV  | jrzt szt szt sztt ddddddV  dV  |D ]\}\}}t||drdndfd}|dur| }|d |||t| q~t|rz| jsq~| ||}|du r||t||d  nZ| jrn| |}|durn|d!|v rLd!nd" ||}|d# || ||| n||t||d  q~|j r|V  n|rt!d$| d%V  dS )&zRender object.)itemr   c                 S   s"   | \}\}}t ||d fS )Nr   )r1   striplower)rN   key_errorr*   r   r   r   
sort_items|   s    z#Inspect._render.<locals>.sort_items)	attr_namer   c              
      sB   zdt  | fW S  ty< } z|dfW  Y d}~S d}~0 0 dS )zGet attribute or any exception.N)rE   	Exception)rT   errorr+   r   r   safe_getattr   s    z%Inspect._render.<locals>.safe_getattrc                 S   s   g | ]}| d s|qS )__
startswith.0rQ   r   r   r   
<listcomp>       z#Inspect._render.<locals>.<listcomp>c                 S   s   g | ]}| d s|qS )r   rZ   r\   r   r   r   r^      r_   c                    s   g | ]}| |fqS r   r   r\   )rX   r   r   r^      r_   )rQ   r4   F)r6   expandright)Zjustify Nzinspect.helpr;   T
   <   )Zindent_guides
max_lengthZ
max_stringzinspect.value.border)r5   rY   zinspect.attr.dunderzinspect.attr)z =zinspect.equalszinspect.error)r,   
r@   zinspect.docz[b cyan]za[/][i] attribute(s) not shown.[/i] Run [b][magenta]inspect[/]([not b]inspect[/])[/b] for options.)"r   r2   r   boolr+   dirlenr'   r&   r(   r   ZgridZ
add_columnadd_rowr,   r1   rM   r%   _get_formatted_docr   r*   r   r   r   r   rH   r[   copyrD   reprr$   appendZ	row_countZfrom_markup)r.   rS   keysZtotal_itemsZnot_shown_countitemsZitems_tablerj   r,   r   Z_docZdoc_textrQ   rV   r*   Zkey_textwarningZ_signature_textr%   r   r   )r+   rX   r   r7   y   s     

&








zInspect._render)object_r   c                 C   s6   t |}|du rdS t| }| js.t|}t|S )a  
        Extract the docstring of an object, process it and returns it.
        The processing consists in cleaning up the doctring's indentation,
        taking only its 1st paragraph if `self.help` is not True,
        and escape its control codes.

        Args:
            object_ (Any): the object to get the docstring from.

        Returns:
            Optional[str]: the processed docstring, or None if no docstring was found.
        N)r   r   rO   r#   r    r   )r.   rr   r%   r   r   r   rk      s    zInspect._get_formatted_doc)__name__
__module__r=   __doc__r   r   r   rg   r/   r   r-   r   r8   r2   rM   r
   r   r7   rk   r   r   r   r   r!      s8   
']r!   .r0   c                 C   s   t | dst| } t| ddS )zNReturns the MRO of an object's class, or of the object itself if it's a class.__mro__r   )hasattrr3   rE   rW   r   r   r   get_object_types_mro   s    
rx   c                 C   s   dd t | D S )z
    Returns the MRO of an object's class as full qualified names, or of the object itself if it's a class.

    Examples:
        `object_types_mro_as_strings(JSONDecoder)` will return `['json.decoder.JSONDecoder', 'builtins.object']`
    c                 S   s*   g | ]"}t |d d dt |dd qS )rt   rb   .r=   )rE   )r]   type_r   r   r   r^      s   z3get_object_types_mro_as_strings.<locals>.<listcomp>)rx   rW   r   r   r   get_object_types_mro_as_strings   s    r{   )r+   fully_qualified_types_namesr   c                 C   s    t | D ]}||v r dS qdS )z
    Returns `True` if the given object's class (or the object itself, if it's a class) has one of the
    fully qualified names in its MRO.
    TF)r{   )r+   r|   	type_namer   r   r   is_object_one_of_types  s    r~   )*rF   r   r   r   r   r   r   typingr   r	   r
   r   r   r   r   consoler   r   controlr   r,   r   Zjupyterr   Zpanelr   prettyr   tabler   textr   r   r2   r    r!   objectr3   rx   r{   rg   r~   r   r   r   r   <module>   s$    $ X$	