o
    DDi/                     @   s  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZ erRd dlmZ d dlmZmZ d d	lm Z  ed
 Z!edddZ"eee" e"f Z#G dd de
Z$G dd deee" Z%G dd dee%e" Z&G dd dee%e" Z'dS )    )Path)MappingProxyType)
GenericListMappingMutableMappingOptionalProtocolTypeTYPE_CHECKINGTypeVarUnion)BatchableCSTVisitor)_T_UNDEFINED_DEFAULT	LazyValueMetadataDependent)
CSTVisitor)CSTNode)_ModuleSelfTModule)MetadataWrapperzBaseMetadataProvider[object]_ProvidedMetadataTT)	covariantc                   @   sB   e Zd Zddddedee dee dede	ee
f f
d	d
ZdS )GenCacheMethodNF)timeoutuse_pyproject_toml	root_pathpathsr   r   returnc                C   s   d S N )selfr   r   r   r   r!   r!   V/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/metadata/base_provider.py__call__,   s   zGenCacheMethod.__call__)__name__
__module____qualname__r   r   strr   intboolr   objectr$   r!   r!   r!   r#   r   +   s    
r   c                
       s   e Zd ZU dZedef ed< dZee	 ed< dde
ddf fdd	Zd
ddedef fddZdddZdddeddfddZefded dddeeee f def fddZ  ZS )BaseMetadataProvidera  
    The low-level base class for all metadata providers. This class should be
    extended for metadata providers that are not visitor-based.

    This class is generic. A subclass of ``BaseMetadataProvider[T]`` will
    provider metadata of type ``T``.
    r   	_computedN	gen_cachecacher   c                    s<   t    i | _| jr|d u rtd| jj d|| _d S )Nz#Cache is required for initializing .)super__init__r-   r.   	Exception	__class__r%   r/   )r"   r/   r4   r!   r#   r2   K   s   

zBaseMetadataProvider.__init__wrapperr   c                 C   sJ   i | _ | | | |j W d   n1 sw   Y  tt| j S )z
        Resolves and returns metadata mapping for the module in ``wrapper``.

        This method is used by the metadata resolver and should not be called
        directly.
        N)r-   resolve	_gen_implmoduler   dict)r"   r6   r!   r!   r#   _genU   s
   
zBaseMetadataProvider._genr9   r   c                 C      dS )zR
        Override this method with a metadata computation implementation.
        Nr!   r"   r9   r!   r!   r#   r8   g   s   zBaseMetadataProvider._gen_implnodevaluec                 C   s   || j |< dS )zA
        Record a metadata value ``value`` for ``node``.
        N)r-   )r"   r>   r?   r!   r!   r#   set_metadatam   s   z!BaseMetadataProvider.set_metadatakeyz BaseMetadataProvider[_MetadataT]defaultc                    sR   |t | u r!|tur| j||}n| j| }t|tr| S |S t |||S )z
        The same method as :func:`~libcst.MetadataDependent.get_metadata` except
        metadata is accessed from ``self._computed`` in addition to ``self.metadata``.
        See :func:`~libcst.MetadataDependent.get_metadata`.
        )typer   r-   get
isinstancer   r1   get_metadata)r"   rA   r>   rB   retr5   r!   r#   rF   s   s   

z!BaseMetadataProvider.get_metadatar    r9   r   r   N)r%   r&   r'   __doc__r   MaybeLazyMetadataT__annotations__r.   r   r   r+   r2   r   r;   r8   r@   r   r
   r   
_MetadataTrF   __classcell__r!   r!   r5   r#   r,   7   s0   
 




r,   c                   @      e Zd ZdZdddZdS )	VisitorMetadataProviderz
    The low-level base class for all non-batchable visitor-based metadata
    providers. Inherits from :class:`~libcst.CSTVisitor`.

    This class is generic. A subclass of ``VisitorMetadataProvider[T]`` will
    provider metadata of type ``T``.
    r9   _ModuleTr   Nc                 C   s   | |  d S r    )visitr=   r!   r!   r#   r8      s   z!VisitorMetadataProvider._gen_impl)r9   rP   r   Nr%   r&   r'   rI   r8   r!   r!   r!   r#   rO      s    rO   c                   @   rN   )	BatchableMetadataProvidera  
    The low-level base class for all batchable visitor-based metadata providers.
    Batchable providers should be preferred when possible as they are more
    efficient to run compared to non-batchable visitor-based providers.
    Inherits from :class:`~libcst.BatchableCSTVisitor`.

    This class is generic. A subclass of ``BatchableMetadataProvider[T]`` will
    provider metadata of type ``T``.
    r9   r   r   Nc                 C   r<   )z
        Batchables providers are resolved through _gen_batchable] so no
        implementation should be provided in _gen_impl.
        Nr!   r=   r!   r!   r#   r8      s   z#BatchableMetadataProvider._gen_implrH   rR   r!   r!   r!   r#   rS      s    
rS   N)(pathlibr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   libcst._batched_visitorr   libcst._metadata_dependentr   rL   r   r   r   libcst._visitorsr   libcst._nodes.baser   libcst._nodes.moduler   rP   r   libcst.metadata.wrapperr   	ProviderTr   rJ   r   r,   rO   rS   r!   r!   r!   r#   <module>   s&   0U
