o
    ­—Žj%  ã                   @  sT   d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 edd�G dd„ dƒƒZ
d	S )
é    )Úannotations)Ú	dataclassÚfield)ÚNormalizedNameÚcanonicalize_name)ÚCommandErrorT)Úslotsc                   @  sl   e Zd ZU dZeed�Zded< eed�Zded< ede	ddd�Z
ded	< ddd„Zddd„Zddd„ZdS )ÚReleaseControlz9Helper for managing which release types can be installed.)Údefault_factoryúset[str]Úall_releasesÚ
only_finalF)Úinitr
   ÚcompareÚreprúlist[tuple[str, str]]Ú_orderÚvalueÚstrÚtargetÚotherÚ	attr_nameÚreturnÚNonec                 C  sÒ   |  d¡r	tdƒ‚| d¡}d|v r;| ¡  | ¡  | d¡ | j |df¡ |d| d¡d …= d|vr7dS d|v s|D ])}|dkrP| ¡  | j |df¡ q=t|ƒ}| 	|¡ | |¡ | j ||f¡ q=dS )aÈ  Parse and apply release control option value.

        Processes comma-separated package names or special values `:all:` and `:none:`.

        When adding packages to target, they're removed from other to maintain mutual
        exclusivity between all_releases and only_final. All operations are tracked in
        order so that the original command-line argument sequence can be reconstructed
        when passing options to build subprocesses.
        ú-z9--all-releases / --only-final option requires 1 argument.ú,ú:all:Né   z:none:)
Ú
startswithr   ÚsplitÚclearÚaddr   ÚappendÚindexr   Údiscard)Úselfr   r   r   r   ÚnewÚname© r(   úa/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pip/_internal/models/release_control.pyÚhandle_mutual_excludes   s0   
ÿ

÷


öz%ReleaseControl.handle_mutual_excludesc                 C  s   | j dd… S )a¼  
        Get ordered list of (flag_name, value) tuples for reconstructing CLI args.

        Returns:
            List of tuples where each tuple is (attribute_name, value).
            The attribute_name is either 'all_releases' or 'only_final'.

        Example:
            [("all_releases", ":all:"), ("only_final", "simple")]
            would be reconstructed as:
            ["--all-releases", ":all:", "--only-final", "simple"]
        N)r   )r%   r(   r(   r)   Úget_ordered_args;   s   zReleaseControl.get_ordered_argsÚcanonical_namer   úbool | Nonec                 C  s<   || j v rdS || jv rdS d| j v rdS d| jv rdS dS )a   
        Determine if pre-releases are allowed for a package.

        Returns:
            True: Pre-releases are allowed (package in all_releases)
            False: Only final releases allowed (package in only_final)
            None: No specific setting, use default behavior
        TFr   N)r   r   )r%   r,   r(   r(   r)   Úallows_prereleasesJ   s   
	


z!ReleaseControl.allows_prereleasesN)
r   r   r   r   r   r   r   r   r   r   )r   r   )r,   r   r   r-   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úsetr   Ú__annotations__r   Úlistr   r*   r+   r.   r(   r(   r(   r)   r	   
   s   
 ÿ

'r	   N)Ú
__future__r   Údataclassesr   r   Úpip._vendor.packaging.utilsr   r   Úpip._internal.exceptionsr   r	   r(   r(   r(   r)   Ú<module>   s    