U
    6e                      @   s\   d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
mZ G dd dZeG dd dZdS )	z+
Data transfer objects for internal usage.
    )	dataclassfield)AnyCallableDictListOptionalTypeUnionc                   @   s   e Zd ZdZdS )
NotDefinedzl
    Specifies that an argument should not be passed to
    ArgumentParser.add_argument(), even as None
    N)__name__
__module____qualname____doc__ r   r   'lib/python3.8/site-packages/argh/dto.pyr      s   r   c                   @   s   e Zd ZU dZee ed< ee ed< eZ	e
eee f ed< eZeed< dZee ed< eedZeeef ed	< dZee ed
< d ddddZeeef dddZeeeef d dddZdS )ParserAddArgumentSpecza
    DTO, maps CLI arg(s) onto a function arg.
    Ends up in ArgumentParser.add_argument().
    func_arg_namecli_arg_namesis_requireddefault_valueNnargs)default_factoryother_add_parser_kwargs	completer)otherreturnc                 C   st   |j D ]}|| j kr| j | q|jtkr4|j| _|jtkrF|j| _|jrT|j| _|jrb|j| _| j|j d S )N)	r   appendr   r   r   r   r   r   update)selfr   namer   r   r   r       s    



zParserAddArgumentSpec.update)r   c                 C   sJ   i }| j tkr| j |d< | jtkr,| j|d< | jr<| j|d< t|f| jS )Nrequireddefaultr   )r   r   r   r   dictr   )r   kwargsr   r   r   get_all_kwargs3   s    




z$ParserAddArgumentSpec.get_all_kwargs)parser_add_argument_kwargsr   c                 C   s^   |  }| ||d}d|kr(|d|_d|kr<|d|_d|krP|d|_|rZ||_|S )z
        Constructs and returns a `ParserAddArgumentSpec` instance
        according to keyword arguments according to the
        `ArgumentParser.add_argument()` signature.
        )r   r   r!   r   r"   )copypopr   r   r   r   )clsr   r   r&   Zkwargs_copyinstancer   r   r   make_from_kwargsA   s    	z&ParserAddArgumentSpec.make_from_kwargs)r   r   r   r   r   str__annotations__r   r   r   r
   boolr	   r   r   r   r   r#   r   r   r   r   r   r%   classmethodr+   r   r   r   r   r      s   

r   N)r   Zdataclassesr   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   <module>   s
   $