o
    ~j6h                     @  sj   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Z
dddZddddZdS )z4Utilities related to attribute docstring extraction.    )annotationsN)Anyc                      s@   e Zd Zd fddZd fdd	ZdddZdddZ  ZS )DocstringVisitorreturnNonec                   s    t    d | _i | _d | _d S N)super__init__targetattrsprevious_node_type)self	__class__ r/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/pydantic/_internal/_docs_extraction.pyr	      s   

zDocstringVisitor.__init__nodeast.ASTr   c                   s   t  |}t|| _|S r   )r   visittyper   )r   r   node_resultr   r   r   r      s   
zDocstringVisitor.visitast.AnnAssignc                 C  s    t |jtjr|jj| _d S d S r   )
isinstancer
   astNameid)r   r   r   r   r   visit_AnnAssign   s   z DocstringVisitor.visit_AnnAssignast.Exprc                 C  s^   t |jtjr)t |jjtr+| jtju r-t|jj}| j	r$|| j
| j	< d | _	d S d S d S d S r   )r   valuer   Constantstrr   	AnnAssigninspectcleandocr
   r   )r   r   	docstringr   r   r   
visit_Expr   s   
zDocstringVisitor.visit_Expr)r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )__name__
__module____qualname__r	   r   r   r%   __classcell__r   r   r   r   r      s
    
r   source	list[str]r   r    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   

r4   cls	type[Any]list[str] | Nonec           	      C  s   t  }|rpt |t | u ri|j}z	t |\}}W n	 ty%   Y nDw t ||d d  }t|}zt	|}W n	 t
yE   Y n$w |jd }t|tjr[|jdkr[|jd }t|tjri|j| jkri|S |j}|sd S d S )N   r   dedent_workaround)r"   currentframe	getmodulef_lineno
findsourceOSErrorgetblockr4   r   parseSyntaxErrorbodyr   FunctionDefnameClassDefr&   f_back)	r5   framelnumlines_block_linesr3   
block_treestmtr   r   r   _extract_source_from_frame3   s.   

rN   Fuse_inspectbooldict[str, str]c                 C  sb   |rz	t | \}}W n ty   i  Y S w 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"   getsourcelinesr>   rN   r4   r   r   r   r@   r   )r5   rO   r*   rJ   r3   visitorr   r   r   extract_docstrings_from_clsQ   s   rT   )r*   r+   r   r    )r5   r6   r   r7   )F)r5   r6   rO   rP   r   rQ   )__doc__
__future__r   r   r"   r/   typingr   NodeVisitorr   r4   rN   rT   r   r   r   r   <module>   s    

