o
    Vh                     @  sr   d dl m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 d dl	m
Z
 er0d dlmZ G d	d
 d
ZdS )    )annotationsN)TYPE_CHECKING)Any)Sequence)CleoLogicError)Option)Argumentc                   @  s  e Zd ZdZdEdFddZedGd
dZedHddZedHddZedIddZ	edJddZ
edIddZdKddZdLddZdLdd ZdMd#d$ZdNd'd(ZdOd*d+ZdPd-d.ZdPd/d0ZdQd3d4ZdRd6d7ZdSd8d9ZdTd;d<ZdUd=d>ZdVd?d@ZdWdXdCdDZdS )Y
DefinitionzN
    A Definition represents a set of command line arguments and options.
    N
definition"Sequence[Argument | Option] | NonereturnNonec                 C  s6   i | _ d| _d| _d| _i | _i | _| |pg  d S Nr   F)
_arguments_required_count_has_list_argument_has_optional_options
_shortcutsset_definition)selfr
    r   m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/io/inputs/definition.py__init__   s   zDefinition.__init__list[Argument]c                 C     t | j S N)listr   valuesr   r   r   r   	arguments       zDefinition.argumentsintc                 C  s   | j rtjS t| jS r   )r   sysmaxsizelenr   r   r   r   r   argument_count$   s   
zDefinition.argument_countc                 C  s   | j S r   )r   r   r   r   r   required_argument_count+   s   z"Definition.required_argument_countdict[str, Any]c                 C  s$   i }| j  D ]}|j||j< q|S r   )r   r   defaultname)r   r   argumentr   r   r   argument_defaults/   s   zDefinition.argument_defaultslist[Option]c                 C  r   r   )r   r   r   r   r   r   r   options8   r!   zDefinition.optionsc                 C  s   dd | j  D S )Nc                 S  s   i | ]}|j |jqS r   )r*   r)   ).0or   r   r   
<dictcomp>>   s    z.Definition.option_defaults.<locals>.<dictcomp>)r   r   r   r   r   r   option_defaults<   s   zDefinition.option_defaultsSequence[Argument | Option]c                 C  sJ   g }g }|D ]}t |tr|| q|| q| | | | d S r   )
isinstancer   appendset_argumentsset_options)r   r
   r    r.   itemr   r   r   r   @   s   

zDefinition.set_definitionr    c                 C  s&   i | _ d| _d| _d| _| | d S r   )r   r   r   r   add_arguments)r   r    r   r   r   r6   M   s
   zDefinition.set_argumentsc                 C     |D ]}|  | qd S r   )add_argument)r   r    r+   r   r   r   r9   T      zDefinition.add_argumentsr+   r   c                 C  s~   |j | jv rtd|j  d| jrtd| r!| jr!td| r(d| _| r4|  jd7  _nd| _|| j|j < d S )NzAn argument with name "" already existsz,Cannot add an argument after a list argumentz4Cannot add a required argument after an optional oneT   )r*   r   r   r   is_requiredr   is_listr   )r   r+   r   r   r   r;   X   s   zDefinition.add_argumentr*   	str | intc                 C  sD   |  |std| dt|trt| j }|| S | j| S )NzThe "z" argument does not exist)has_argument
ValueErrorr4   r"   r   r   r   )r   r*   r    r   r   r   r+   n   s   


zDefinition.argumentboolc                 C  s.   t |trt||dk  t| jk S || jv S )Nr   )r4   r"   absr%   r   r   r*   r   r   r   rB   x   s   

zDefinition.has_argumentr.   c                 C  s   i | _ i | _| | d S r   )r   r   add_options)r   r.   r   r   r   r7      s   zDefinition.set_optionsc                 C  r:   r   )
add_option)r   r.   optionr   r   r   rG      r<   zDefinition.add_optionsrI   r   c                 C  s   |j | jv r|| j|j  krtd|j  d|jr8|jdD ]}|| jv r7|j | j| kr7td| dq || j|j < |jrP|jdD ]
}|j | j|< qGd S d S )NzAn option named "r=   |zAn option with shortcut ")r*   r   r   shortcutsplitr   )r   rI   rK   r   r   r   rH      s    

zDefinition.add_optionstrc                 C  s$   |  |std| d| j| S )NzThe option "--" option does not exist)
has_optionrC   r   rF   r   r   r   rI         

zDefinition.optionc                 C  
   || j v S r   )r   rF   r   r   r   rO         
zDefinition.has_optionrK   c                 C  rQ   r   )r   r   rK   r   r   r   has_shortcut   rR   zDefinition.has_shortcutc                 C  s   | j | | S r   )r   shortcut_to_namerS   r   r   r   option_for_shortcut   s   zDefinition.option_for_shortcutc                 C  s$   || j vrtd| d| j | S )NzThe "-rN   )r   rC   rS   r   r   r   rU      rP   zDefinition.shortcut_to_nameFshortc           
   	   C  s  g }|r| j r|d nB|sO| j  D ]:}d}| r3| r%|j nd|j  d}d| }d}|jr?d|j d}|d| d|j | d q|rY| jrY|d	 d}| j D ]"}d
|j d}	|	 rq|	d7 }	|
 s}d|	 }	|d7 }||	 q`d|| S )Nz	[options] [] -rJ   z--z[--]<>z...)r   r5   r   accepts_valuerequires_valuer*   upperrK   r   r@   r?   join)
r   rW   elementsrI   value	formattedrK   tailr+   elementr   r   r   synopsis   s8   

 

zDefinition.synopsisr   )r
   r   r   r   )r   r   )r   r"   )r   r(   )r   r-   )r
   r3   r   r   )r    r   r   r   )r+   r   r   r   )r*   rA   r   r   )r*   rA   r   rD   )r.   r-   r   r   )rI   r   r   r   )r*   rM   r   r   )r*   rM   r   rD   )rK   rM   r   rD   )rK   rM   r   r   )rK   rM   r   rM   )F)rW   rD   r   rM   )__name__
__module____qualname____doc__r   propertyr    r&   r'   r,   r.   r2   r   r6   r9   r;   r+   rB   r7   rG   rH   rI   rO   rT   rV   rU   rh   r   r   r   r   r	      s<    















r	   )
__future__r   r#   typingr   r   r   cleo.exceptionsr   cleo.io.inputs.optionr   cleo.io.inputs.argumentr   r	   r   r   r   r   <module>   s    