a
    _g                     @  s~   d Z ddlmZ ddlZddlZddlZddlmZ G dd dejZ	ddd	d
dZ
dddddZdddddddZdS )z4Utilities related to attribute docstring extraction.    )annotationsN)Anyc                      sV   e Zd Zdd fddZddd fdd	Zd
ddddZdddddZ  ZS )DocstringVisitorNone)returnc                   s    t    d | _i | _d | _d S N)super__init__targetattrsprevious_node_type)self	__class__ q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/pydantic/_internal/_docs_extraction.pyr	      s    
zDocstringVisitor.__init__zast.ASTr   )noder   c                   s   t  |}t|| _|S r   )r   visittyper   )r   r   Znode_resultr   r   r   r      s    
zDocstringVisitor.visitzast.AnnAssignc                 C  s   t |jtjr|jj| _d S r   )
isinstancer
   astNameid)r   r   r   r   r   visit_AnnAssign   s    z DocstringVisitor.visit_AnnAssignzast.Exprc                 C  sR   t |jtjrNt |jjtrN| jtju rNt|jj}| j	rH|| j
| j	< d | _	d S r   )r   valuer   Constantstrr   	AnnAssigninspectcleandocr
   r   )r   r   	docstringr   r   r   
visit_Expr   s    
zDocstringVisitor.visit_Expr)__name__
__module____qualname__r	   r   r   r!   __classcell__r   r   r   r   r      s   r   z	list[str]r   )sourcer   c                 C  s(   t d| }|dr$d| }|S )N ) 	zdef dedent_workaround():
)textwrapdedentjoin
startswith)r&   dedent_sourcer   r   r   _dedent_source_lines(   s    

r/   z	type[Any]zlist[str] | None)clsr   c           	      C  s   t  }|rt |t | u r|j}zt |\}}W n tyJ   Y n0 t ||d d  }t|}zt	|}W n t
y   Y nH0 |jd }t|tjr|jdkr|jd }t|tjr|j| jkr|S |j}qd S )N   r   Zdedent_workaround)r   currentframe	getmodulef_lineno
findsourceOSErrorgetblockr/   r   parseSyntaxErrorbodyr   FunctionDefnameClassDefr"   f_back)	r0   framelnumlines_Zblock_linesr.   Z
block_treestmtr   r   r   _extract_source_from_frame3   s(    

rD   Fboolzdict[str, str])r0   use_inspectr   c                 C  sd   |r0zt | \}}W q8 ty,   i  Y S 0 nt| }|s@i S t|}t }|t| |j	S )aX  Map model attributes and their corresponding docstring.

    Args:
        cls: The class of the Pydantic model to inspect.
        use_inspect: Whether to skip usage of frames to find the object and use
            the `inspect` module instead.

    Returns:
        A mapping containing attribute names and their corresponding docstring.
    )
r   getsourcelinesr6   rD   r/   r   r   r   r8   r   )r0   rF   r&   rB   r.   visitorr   r   r   extract_docstrings_from_clsQ   s    rI   )F)__doc__
__future__r   r   r   r*   typingr   NodeVisitorr   r/   rD   rI   r   r   r   r   <module>   s   