o
    iK                     @  sN   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G dd dZ
dS )    )annotations)	dataclassfield)NormalizedNamecanonicalize_name)CommandErrorc                   @  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'   ^/home/kim/smarthome/.venv/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_prereleasesK   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   Zpip._vendor.packaging.utilsr   r   pip._internal.exceptionsr   r   r'   r'   r'   r(   <module>   s    