a
    b3jK                     @  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                   @  s   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d
ddddZddddZdddddZdS )ReleaseControlz9Helper for managing which release types can be installed.)default_factoryzset[str]all_releases
only_finalF)initr	   comparereprzlist[tuple[str, str]]_orderstrNone)valuetargetother	attr_namereturnc                 C  s   | drtd|d}d|v rp|  |  |d | j|df |d|dd = d|vrdS q|D ]R}|dkr|  | j|df qtt|}|	| || | j||f qtd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%   /www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/pip/_internal/models/release_control.pyhandle_mutual_excludes   s,    




z%ReleaseControl.handle_mutual_excludes)r   c                 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_argsr   zbool | None)canonical_namer   c                 C  s<   || j v rdS || jv rdS d| j v r*dS d| jv r8d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)__name__
__module____qualname____doc__r   setr
   __annotations__r   listr   r'   r(   r*   r%   r%   r%   r&   r      s   
'r   N)
__future__r   Zdataclassesr   r   pip._vendor.packaging.utilsr   r   pip._internal.exceptionsr   r   r%   r%   r%   r&   <module>   s
   