o
    Vh?&                     @  st   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
e
ZdS )    )annotationsN)TYPE_CHECKING)Any)CleoNoSuchOptionError)CleoRuntimeError)Input)
Definitionc                      s   e Zd ZdZ	d2d3 fd	d
Zed4ddZed4ddZ	d5d6ddZ		d7d8ddZ	d9ddZ
d:dd Zd;d#d$Zd<d&d'Zd;d(d)Zd;d*d+Zd=d.d/Zd>d0d1Z  ZS )?	ArgvInputz;
    Represents an input coming from the command line.
    Nargvlist[str] | None
definitionDefinition | NonereturnNonec                   sb   |d u rt j}|d d  }z|d| _W n ty!   d | _Y nw || _g | _t j|d d S )Nr   )r   )	sysr
   pop_script_name
IndexError_tokens_parsedsuper__init__)selfr
   r   	__class__ m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/io/inputs/argv_input.pyr      s   
zArgvInput.__init__
str | Nonec                 C  s   d}t | jD ]Y\}}|drXd|v st| j|d krq|dr)|dd  n|d }|| jv s9| j|s9q|| jvrD| j|}|| jv rW| j|d  | j| krWd}q|r]d}q|  S d S )	NF-=   --   T)	enumerater   
startswithlen_options_definitionhas_shortcutshortcut_to_name)r   	is_optionitokennamer   r   r   first_argument)   s$   

"zArgvInput.first_argumentc                 C  s   | j S N)r   )r   r   r   r   script_nameM   s   zArgvInput.script_nameFvaluesstr | list[str]only_paramsboolc                 C  st   t |ts|g}| jD ],}|r|dkr dS |D ]}|dr#|d n|}||ks2|dkr6||r6  dS qqdS )zR
        Returns true if the raw parameters (not parsed) contain a value.
        r!   Fr    T)
isinstancelistr   r%   )r   r2   r4   r-   valueleadingr   r   r   has_parameter_optionQ   s   

	zArgvInput.has_parameter_optiondefaultr   c              	   C  s   t |ts|g}| jd d  }|r]|d}|r|dkr|S |D ]:}||kr:z|dW   S  ty9   Y  d S w |drC|d n|}||ksR|dkrZ||rZ|t|   S q |sdS )Nr   r!   r   r6   F)r7   r8   r   r   r   r%   r&   )r   r2   r<   r4   tokensr-   r9   r:   r   r   r   parameter_optioni   s(   

zArgvInput.parameter_optionr=   	list[str]c                 C  s
   || _ d S r0   )r   )r   r=   r   r   r   _set_tokens   s   
zArgvInput._set_tokensc                 C  s   d}| j d d  | _z| jd}W n
 ty   Y d S w |d urr|r-|dkr-| | n,|r6|dkr6d}n#|rC|drC| | n|rT|drT|dkrT| | n| | z| jd}W n
 tyk   Y d S w |d us!d S d S )NTr   r6   r!   Fr   )r   r   r   r   _parse_argumentr%   _parse_long_option_parse_short_option)r   parse_optionsr-   r   r   r   _parse   s.   
zArgvInput._parser-   strc                 C  sr   |dd  }t |dkr1|d }| j|r*| j| r*| ||dd   d S | | d S | |d  d S )Nr    r   )r&   r(   r)   option_for_shortcutaccepts_value_add_short_option_parse_short_option_set)r   r-   r.   shortcutr   r   r   rC      s   
zArgvInput._parse_short_optionr.   c                 C  s   t |}t|D ]?}|| }| j|std||  d| j|}| r@| |j||d k r:||d d  nd   d S | |jd  qd S )NzThe option "" does not existr    )	r&   ranger(   r)   r   rG   rH   _add_long_optionr.   )r   r.   lengthr,   rK   optionr   r   r   rJ      s   "z!ArgvInput._parse_short_option_setc                 C  sh   |dd  }| d}|dkr,||d d  }|s | jd| | |d | | d S | |d  d S )Nr"   r   r#   r    r   )findr   insertrN   )r   r-   r.   posr9   r   r   r   rB      s   
zArgvInput._parse_long_optionc           	      C  s6  t | j}|d }| j|r$| j|}| r|gn|| j|j< d S | j|rC| j| rC| j|}| j|j | d S | jj	 }d }|d }|r_|jdkr_| j
d}|d= |rddd |D }|ryd| d| }t|d	| }t||rd
| d| d}t|d| d}t|)Nr    r   command c                 s  s    | ]	}|j d V  qdS )z""N)r.   join).0ar   r   r   	<genexpr>   s    z,ArgvInput._parse_argument.<locals>.<genexpr>zToo many arguments to "z" command, expected arguments z'Too many arguments, expected arguments zNo arguments expected for "z" command, got ""zNo arguments expected, got ")r&   
_argumentsr(   has_argumentargumentis_listr.   append	argumentscopygetrV   r   )	r   r-   next_argumentlast_argumentr]   all_argumentscommand_name	all_namesmessager   r   r   rA      sF   


	zArgvInput._parse_argumentrK   r9   c                 C  s6   | j |std| d| | j |j| d S )NzThe option "-rL   )r(   r)   r   rN   rG   r.   )r   rK   r9   r   r   r   rI      s
   zArgvInput._add_short_optionc                 C  s  | j |std| d| j |}|d u s$| s$td| d|dv rH| rH| jrH| jd}|dr>|dv rA|}n| j	d| |d u rb|
 rXtd| d| sb| rbd	}| rz|| jvrpg | j|< | j| | d S || j|< d S )
NzThe option "--rL   zThe "--z " option does not accept a value)r6   Nr   r   z" option requires a valueT)r(   
has_optionr   rP   rH   r   r   r   r%   rR   requires_valuer^   is_flagr'   r_   )r   r.   r9   rP   
next_tokenr   r   r   rN     s(   

zArgvInput._add_long_option)NN)r
   r   r   r   r   r   )r   r   )F)r2   r3   r4   r5   r   r5   )FF)r2   r3   r<   r   r4   r5   r   r   )r=   r?   r   r   )r   r   )r-   rF   r   r   )r.   rF   r   r   )rK   rF   r9   r   r   r   )r.   rF   r9   r   r   r   )__name__
__module____qualname____doc__r   propertyr/   r1   r;   r>   r@   rE   rC   rJ   rB   rA   rI   rN   __classcell__r   r   r   r   r	      s*    #
 





+r	   )
__future__r   r   typingr   r   cleo.exceptionsr   r   cleo.io.inputs.inputr   cleo.io.inputs.definitionr   r	   r   r   r   r   <module>   s    