o
    DDiI                  	   @   sx  d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ ded	ee d
efddZde	e de	e ded
e	e fddZde	e ded
e	e fddZde	e ded
efddZde	e de	e ded
e	e fddZde	e ded
e	e fddZde	e ded
efddZeddG d d! d!Z	"d)d#ed$ed%ed
efd&d'Zd(S )*    )	dataclass)islice)PathPurePath)ListOptional)Comment	EmptyLine
ImportFromModule)StrPath)get_full_name_for_nodenodecommentsreturnc                 C   sp   d}t | jD ]\}}|jdur|}qt| j|d }t| j|d d}dd |D }| jg |||R dS )a.  
    Insert comments after last non-empty line in header. Use this to insert one or more
    comments after any copyright preamble in a :class:`~libcst.Module`. Each comment in
    the list of ``comments`` must start with a ``#`` and will be placed on its own line
    in the appropriate location.
    N   c                 S   s   g | ]
}t t|d dqS ))value)comment)r	   r   ).0r    r   N/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/helpers/module.py
<listcomp>    s    z*insert_header_comments.<locals>.<listcomp>)header)	enumerater   r   r   with_changes)r   r   last_comment_indexilinecomment_linesempty_linesinserted_linesr   r   r   insert_header_comments   s   	
r"   current_modulemodule_namenum_dotsc                 C   s   |dkr|S | d u rd S |  d}t||k rd S d|d |  }|d ur6t|dkr4| d| n|}t|dkr>|S d S )Nr   .)splitlenjoin)r#   r$   r%   modulesbase_moduler   r   r   get_absolute_module&   s   
r,   import_nodec                 C   0   |j }|d urt|nd }t|j}t| ||S N)moduler   r(   relativer,   )r#   r-   r0   r$   r%   r   r   r   get_absolute_module_for_importC      
r2   c                 C   $   t | |}|d u rtd| |S Nz&Unable to compute absolute module for )r2   	Exception)r#   r-   r0   r   r   r   'get_absolute_module_for_import_or_raiseN      
r7   current_packagec                 C   s\   |dkr|S | d u s| dkrd S |  d|d }t||k r d S |d }|r,d||S |S )Nr    r&   r   z{}.{})rsplitr(   format)r9   r$   r%   bitsbaser   r   r    get_absolute_module_from_packageW   s   r?   c                 C   r.   r/   )r0   r   r(   r1   r?   )r9   r-   r0   r$   r%   r   r   r   +get_absolute_module_from_package_for_importl   r3   r@   c                 C   r4   r5   )r@   r6   )r9   r-   r0   r   r   r   4get_absolute_module_from_package_for_import_or_raisew   r8   rA   T)frozenc                   @   s   e Zd ZU eed< eed< dS )ModuleNameAndPackagenamepackageN)__name__
__module____qualname__str__annotations__r   r   r   r   rC      s   
 rC   F	repo_rootfilenameuse_pyproject_tomlc           	      C   s   |r/t |  }t | }|j}||kr)|d  rn||jkr"n|j}||ks||}nt|| }|d}|jdv rL|j}d|j	 }}nd|j	}d|j	d d }t
||S )Nzpyproject.tomlr:   )__init____main__r&   r   )r   resolveparentexistsrelative_tor   with_suffixstemr)   partsrC   )	rK   rL   rM   abs_repo_rootabs_filenamepackage_rootrelative_filenamerE   rD   r   r   r   calculate_module_and_package   s(   



r[   N)F)dataclassesr   	itertoolsr   pathlibr   r   typingr   r   libcstr   r	   r
   r   libcst._typesr   libcst.helpers.expressionr   rI   r"   intr,   r2   r7   r?   r@   rA   rC   boolr[   r   r   r   r   <module>   s   


	


	