o
    fif                     @   s  g Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ 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 d dlZd dlZd dl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Z%dZ&d	Z'ej(d
kr<d dlm)Z) e)de*ee* dZ+e)de*eee*  eeee*e+f   dZ,e)dee* eee*e+f  ee, dZ-e)dee. ee* ee* dZ/e)de*ee* dZ0e)dee* ee* dZ1e)de.e2dZ3e)di de.de*de.dee* dee* d e.d!e.d"e-d#ee*e/f d$ee* d%ee. d&ee* d'ee* d(ee0 d)ee.e3f d*e.d+e.ee* e*e.e.e.ee2 ee* ee* e1d,	Z4neZ+eZ,eZ-eZ/eZ0eZ1eZ3eZ4G d-d. d.eZ5G d/d0 d0Z6G d1d2 d2Z7e7 Z8G d3d4 d4Z9G d5d6 d6Z:G d7d8 d8Z;d9efd:d;Z<d<ed=ed9efd>d?Z=d@e*d9dfdAdBZ>ddCdDe*dEee d9ee fdFdGZ?ddEee d9ee fdHdIZ@d9efdJdKZAdLed9e4fdMdNZBddEee d9efdOdPZCddQee d9ee* fdRdSZDdQedTedUee* d9ee* fdVdWZEdXee* d9ee* fdYdZZFdXeej d9ee* fd[d\ZGdd]e$d^e*dQe4d_ee d9e*f
d`daZHddce*ddee2 d9ee2e*f fdedfZIddgee* dhee d9ee* fdidjZJdQe4d9ee* fdkdlZKddmde#dee*ef dQe4dnee. d9e$f
dodpZLddQe4dgee* d9ee*e$f fdqdrZMdge*d]e*dsee: d9dfdtduZNd]e*dve*dwee9 d9e*fdxdyZO	zddge*d]e*d{e$dQe4d|ed}e5d~e.d9dfddZP		z	z	dd|ee d~e.de.de.d9ee* f
ddZQdd~e.d9dfddZRdS )    N)Enum)import_module)Path)MappingMutableMappingOptionalSequenceTupleUnion)
bump_versioncheck_versionConcernPatternserialize_pep440serialize_pvpserialize_semverStyleVcsVersion POETRY_DYNAMIC_VERSIONING_BYPASS"POETRY_DYNAMIC_VERSIONING_OVERRIDEPOETRY_DYNAMIC_VERSIONING_DEBUG)      )	TypedDict_SubstitutionPatternvaluemode_SubstitutionFolderpathfilespatterns_Substitutionr"   r#   folders_File)persistent-substitutioninitial-contentinitial-content-jinja_JinjaImport)moduleitem	_FromFilesourcepattern_Bumpenableindex_Configr4   vcsdirtyr1   pattern-prefix
latest-taghighest-tagsubstitutionr"   stylemetadataformatformat-jinjaformat-jinja-importsbumptagged-metadatafull-commit	
tag-branchtag-dirstrictfix-shallow-repositoryignore-untrackedcommit-lengthcommit-prefixescape-with	from-filec                   @   s   e Zd ZdZdZdS )_Modeclassicpep621N)__name__
__module____qualname__ClassicPep621 rW   rW   V/home/ubuntu/.local/lib/python3.10/site-packages/poetry_dynamic_versioning/__init__.pyrO      s    rO   c                   @   sN   e Zd Z	ddedee dededeejj	 dee
eef  ddfd	d
ZdS )_ProjectStateNr!   original_versionversionr   dynamic_arraysubstitutionsreturnc                 C   s:   || _ || _|| _|| _|| _|d u ri | _d S || _d S N)r!   rZ   r[   r   r\   r]   )selfr!   rZ   r[   r   r\   r]   rW   rW   rX   __init__   s   	z_ProjectState.__init__r_   )rR   rS   rT   r   r   strrO   tomlkititemsArrayr   ra   rW   rW   rW   rX   rY      s"    
rY   c                   @   s   e Zd ZdddZdS )_Stater^   Nc                 C   s   d| _ d| _i | _d S )NF)patched_core_poetry_createcli_modeprojects)r`   rW   rW   rX   ra         
z_State.__init__)r^   N)rR   rS   rT   ra   rW   rW   rW   rX   rf      s    rf   c                   @   sD   e Zd ZdedefddZedeeeef  ded  fddZ	d	S )
_SubPatternr   r   c                 C      || _ || _d S r_   r   )r`   r   r   rW   rW   rX   ra         
z_SubPattern.__init__configr^   c              	   C   sN   g }| D ] }t |tr|t|dd q|t|d |ddd q|S )Nrb   )r   r   r   )
isinstancerb   appendrk   get)rn   r#   xrW   rW   rX   from_config   s   
 z_SubPattern.from_configN)
rR   rS   rT   rb   ra   staticmethodr   r
   r   rs   rW   rW   rW   rX   rk      s    (rk   c                   @   sH   e Zd Zdedee dee fddZede	deded  fd	d
Z
dS )_FolderConfigr!   r"   r#   c                 C   s   || _ || _|| _d S r_   r    )r`   r!   r"   r#   rW   rW   rX   ra      rj   z_FolderConfig.__init__rn   rootr^   c                    sR   | d d  t | d d t } fdd| d d D }|g|S )Nr<   r"   r#   c              	      sN   g | ]#}t |d   |d dur|d n |d dur"t|d nqS )r!   r"   Nr#   )ru   rk   rs   ).0rr   r"   r#   rv   rW   rX   
<listcomp>   s    
z-_FolderConfig.from_config.<locals>.<listcomp>r&   )rk   rs   ru   )rn   rv   mainextrarW   rx   rX   rs      s   

	z_FolderConfig.from_configN)rR   rS   rT   r   r   rb   rk   ra   rt   r6   rs   rW   rW   rW   rX   ru      s     ru   c                   @   s<   e Zd ZdedefddZedeeef dd fddZ	d	S )
_BumpConfigr4   r5   c                 C   rl   r_   r3   )r`   r4   r5   rW   rW   rX   ra      rm   z_BumpConfig.__init__rn   r^   c                 C   s&   t | tr
t| dS t| d | d S )Nr4   r5   )ro   boolr|   )rn   rW   rW   rX   rs      s   

z_BumpConfig.from_configN)
rR   rS   rT   r~   intra   rt   r
   r2   rs   rW   rW   rW   rX   r|      s     r|   r^   c                   C   s   ddi dddddddd d	d d
ddddg dddddgg ddi dd dd dd dd dg ddddddd ddddd d d d d dd	iiS )Ntoolpoetry-dynamic-versioningr4   Fr7   anyr8   r1   r9   r:   r;   r<   )z*.pyz*/__init__.pyz*/__version__.pyz*/_version.pyz1(^__version__\s*(?::.*?)?=\s*['\"])[^'\"]*(['\"])z/(^__version_tuple__\s*(?::.*?)?=\s*\()[^)]*(\))tupler   r%   r"   r=   r>   r?   r@   rA   rB   rC   rD   tagsr/   rE   rW   rW   rW   rW   rX   _default_config   st   r   baseadditionc                 C   s`   t t| }| D ]"\}}t|t r)|| v r)t| | t r)t| | |||< q|||< q|S r_   )dictcopydeepcopyrd   ro   _deep_merge_dicts)r   r   resultkeyr   rW   rW   rX   r     s    
r   messagec                 C   s*   t jtdk}|rt| tjd d S d S )N1file)osenvironrq   
_DEBUG_ENVprintsysstderr)r   enabledrW   rW   rX   _debug  s   r   startnamesr   c                 G   s`   | d u r	t  } n	t| t st | } | g| jD ]}|D ]}||  r,||     S qqd S r_   )r   cwdro   parentsis_file)r   r   levelnamerW   rW   rX   _find_higher_file%  s   

r   c                 C   s   t d| dS )Nzpyproject.tomlr   )r   r   rW   rW   rX   _get_pyproject_path3  s   r   c                 C   s0   t | dd }t | dd }|r|S |r|S td)Nr!   r   z<Unable to determine pyproject.toml path from Poetry instance)getattrRuntimeError)	pyprojectrecommendedlegacyrW   rW   rX   _get_pyproject_path_from_poetry7  s   r   localc                 C   s   dd }t | tjr|  } tt | d d }|d  D ]}||d ||d ||d q|d	 D ]}||d
 q4|d d D ]}||d ||d qB|d d D ]}||d qU|S )Nc                 S   s&   t | tr|| vrd | |< d S d S d S r_   )ro   r   )datar   rW   rW   rX   
initializeF  s   z_get_config.<locals>.initializer   r   r"   r)   r*   r(   rA   r-   r<   r&   r#   r   )ro   rc   TOMLDocumentunwrapr   r   values)r   r   mergedrr   rW   rW   rX   _get_configE  s    


r   c                 C   s>   t | }|d u rt d d S t| d}t|}|S )Nr   r   utf-8)r   r   rc   parse
read_bytesdecoder   )r   pyproject_pathr   r   rW   rW   rX   _get_config_from_path_  s   r   rn   c                 C   s\   | d u rt  }|d u rtdt| d} t| di di t d d ddgS )NUnable to find pyproject.tomlr   r   r   )	r   r   rc   r   r   r   _validate_config_sectionrq   r   )rn   r   rW   rW   rX   _validate_configh  s   r   defaultr!   c                 C   s   |sg S g }|   D ]@\}}||vr,d|vr|nd|}|ddg ||  q
t|trJt| |trJ|t| | || g || q
|S )N."{}"zUnknown key: )	rd   r?   rp   joinro   r   rq   extendr   )rn   r   r!   errorsr   r   escaped_keyrW   rW   rX   r   v  s   "r   r   c                 C   s   | d u rd S t dd| S )Nz[^a-zA-Z0-9] )resubr   rW   rW   rX   _escape_branch  s   r   c                 C   s   | d u rd S |  dS )Nz%Y%m%d%H%M%S)strftimer   rW   rW   rX   _format_timestamp  s   
r   r[   templater{   c                    sd  |d u ri }t |d }|jr jdkr j|jd dtdtf fdd}i d jd	 d
 jd j	d jd j
d jd jdt jdt jd|dd|dd|ddtjdtd jdtttd|}i }|d D ]$}d|v rt|d }	|d d urt|	|d ||d < q~|	||d < q~t|jdi ||}
|
S ) NrB   r   )r5   r5   r^   c                    s0    j d}zt||  W S  ty   Y dS w )Nr   r   )r   splitr   	Exception)r5   partsr[   rW   rX   	base_part  s   z _render_jinja.<locals>.base_partr   r[   stagerevisiondistancecommitr8   branchbranch_escaped	timestampmajorminor   patch   envr   tagged_metadatar   )r   r   rA   r,   r-   rW   )r|   rs   r4   r   rB   r5   r   r   r   r   r   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   jinja2Templaterender)r[   r   rn   r{   bump_configr   default_contextcustom_contextentryr,   
serializedrW   r   rX   _render_jinja  sp   
	

r   r   commandcodesc                 C   sT   t jt| t jt jd}|j  }|r%|j	|vr%t
d| |j	||j	|fS )N)stdoutr   z-The command '{}' returned code {}. Output:
{})
subprocessrunshlexr   PIPESTDOUTr   r   strip
returncoder   r?   )r   r   r   outputrW   rW   rX   _run_cmd  s   
r   r   r   c                 C   s   |d ur|nt j}| d ur9|t}|d ur9|d}|D ]}d|vr$q|dd\}}| | kr8|   S q|t}|d urD|S d S )N,=r   )r   r   rq   _OVERRIDE_ENVr   r   _BYPASS_ENV)r   r   raw_overridespairspairkvbypassrW   rW   rX   _get_override_version  s    


r   c                 C   s   | d d }| d d }|d u rd S t  }|d u rtd|j| d }|d u r0|S t||tj	}|d u rDt
d|||dS )NrN   r0   r1   r   r   z*File '{}' did not contain a match for '{}'r   )r   r   parentjoinpathr   r   r   r   search	MULTILINE
ValueErrorr?   group)rn   r0   r1   r   contentr   rW   rW   rX   _get_version_from_file  s   
r  rH   rH   c                C   sP   t j| ||d |d |d |d |d |d u r|d n||d |d |d	 d
S )Nr:   r;   rG   rF   rD   rH   r9   rJ   rK   )r7   r1   
latest_taghighest_tagtag_dir
tag_branchfull_commitrH   pattern_prefixignore_untrackedcommit_length)r   from_vcs)r7   r1   rn   rH   rW   rW   rX   _get_version_from_dunamai  s   r  c              	   C   s  t |}|d ur|t|fS t| }|d ur|t|fS t| d }| d d ur0t| d nd }| d d ur<| d ntj}| d rjt||| dd}| d }t	j
|jv ra|jtjkrad}td	 |rit||| }nt||| }|jD ]}td
| tjd qs| d rt|| d | }	|d urt|	| |	|fS t| d }
|
jr|j|
jdd}n|}|j| d | d | d || d | d | d d}	|	|fS )Nr7   r=   r1   rI   Fr  rH   Tzgit fetch --unshallowzWarning: {}r   r@   rB   )r5   smartr>   r8   r?   rC   rL   rM   )r>   r8   r?   r=   r   commit_prefixescape_with)r   r   r   r  r   r   r   Defaultr  r   ShallowRepositoryconcernsr7   Gitr   r   r?   r   r   r   r   r   r|   rs   r4   rB   r5   	serialize)rn   r   overrider7   r=   r1   r[   retryconcernr   r   updatedrW   rW   rX   _get_version  sP   


r  r&   c                 C   s   t j|  jrd S i }|D ]3}|jD ]-}d}|jt|D ]}|d7 }| }||v r,q|||< q|dkr>td	||j qq|
 D ].\}	}
|	 d}t|||
j}||krk|t j|  j|	< |	|d qDtd	|	 qDd S )Nr   r   z=No files found for substitution with glob '{}' in folder '{}'r   z0No changes made during substitution in file '{}')_stateri   r]   r"   r!   globrb   resolver   r?   rd   r   r   _substitute_version_in_textr#   write_bytesencode)r   r[   r&   r"   folder	file_globimatchresolvedr   rn   original_contentnew_contentrW   rW   rX   _substitute_versionD  s0   

r+  r  r#   c           	   
   C   s   |}|D ]s}|j dkr| }n[|j dkrag }| dd}g td|d |dd  }|D ]#}|dkr4q-z|tt| W q- tyP   |d| Y q-w d	|}t	|dkr`|d
7 }ntd|j tj
|jd||tjd}q|S )Nrb   r   +r   z[-.]r   r   r   z, r   zInvalid substitution mode: {}z\g<1>{}\g<2>)flags)r   r   r   rp   rb   r   r  r?   r   lenr   r   r  )	r[   r  r#   r*  r1   insertr   r   partrW   rW   rX   r!  c  s.   

 
r!  Finstancer   r   retainc              	   C   s  t | d}|tjkr||d d d< n-|tjkrEd|d d v r.|d d d ||d d< d|d d v rE|d d d |sRt	j
sRd|d d d	< |t |d |d
  D ]P\}}	|j|}
|	d d ur|
j s}|
j  tt||	d |d|i}|
|d qc|	d d ur|
j s|
j  t|	d }|
|d qct| |t||j d S )Nr   r   poetryr[   projectdynamicFr   r4   r"   r*   formatted_versionr)   )rc   r   r   r   rO   rU   rV   removepopr  rh   r"  dumpsr#  rd   r   r   existsmkdirtextwrapdedentr   r+  ru   rs   )r   r[   r1  rn   r   r   r2  r   	file_name	file_info	full_fileinitialrW   rW   rX   _apply_version  sJ   	






rB  Tforceioc              
   C   s*  | d u rt  } | d u rtdt|  d}d|v o*d|d v o*d|d d v }d|v oZd|d v oZd|d v oZd|d d v oZd|d voZd|v oZd|d v oZd|d d v }|rp|d d d }|d d d }d }	n|r|d d }|d d d }|d d }	nd S |tjv r|S t|}
|
d	 s|s|tjv r|S d S t	
 }| j}tt| zt|
|\}}W tt| ntt| w |r|d ur|d urtj}t| ||||	tj|< |rt||||
| || |S |r|d urtj}t| ||||	tj|< |rt||||
| || |S )
Nr   r   r   r3  r   r4  r5  r[   r4   )r   r   rc   r   r   r   r  ri   r   r   r   r   r   chdirrb   r  rO   rU   rY   rB  rV   )r   r2  rC  rD  r   rP   rQ   r   originalr\   rn   initial_dir
target_dirr[   r1  r   rW   rW   rX   _get_and_apply_version  sj   $




 rI  c           	      C   sz  t j D ]\}}t|j d}|jrZt	|}g }|d  D ]\}}|d r7|
|jj|  q#|j D ]\}}||v rFq=||d q=t|j d}|jtjkro|jd urn|j|d d d< n-|jtjkr|jd ur|j|d d< d|d v r|d d |jd ur|j|d d d< | st jsd	|d d
 d< |jt|d qt j  d S )Nr   r"   r(   r   r3  r[   r4  r5  Tr   r4   )r  ri   rd   rc   r   r!   r   r   r]   r   rp   r   r   r   r"  r#  r   rO   rU   rZ   rV   r\   r8  rh   r9  clear)	r2  r4  stater   rn   
persistentr   r?  r  rW   rW   rX   _revert_version  s:   



rM  r_   )r   )F)NFFT)S__all__r   datetimedtr   r   r   r   r   r<  enumr   	importlibr   pathlibr   typingr   r   r   r   r	   r
   r   rc   tomlkit.itemsdunamair   r   r   r   r   r   r   r   r   r   r   r   r   version_infor   rb   r   r   r$   r~   r'   r+   r.   r   r2   r6   rO   rY   rf   r  rk   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r+  r!  rB  rI  rM  rW   rW   rW   rX   <module>   s    0
				
 0
$	"$$2$

$7#
9
C