o
    .&ßa  ã                   @   s”   d 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	 e 
e¡Zeƒ Zdd„ Zd	d
„ Zdd„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZdS )au  
Top Level Boolean Parameters
----------------------------

This customization will take a parameter that has
a structure of a single boolean element and allow the argument
to be specified without a value.

Instead of having to say::

    --ebs-optimized '{"Value": true}'
    --ebs-optimized '{"Value": false}'

You can instead say `--ebs-optimized/--no-ebs-optimized`.


é    N)Úpartial)Údetect_shape_structure)Ú	arguments)Ú#validate_mutually_exclusive_handlerc                 C   s   |   dtt| d�¡ d S )Nzbuilding-argument-table.ec2.*©Úevent_handler)Úregisterr   Úpull_up_boolr   © r
   úD/usr/lib/python3/dist-packages/awscli/customizations/toplevelbool.pyÚregister_bool_params#   s
   ÿÿr   c                 C   sP   t | ƒdkr&| j}t|ƒdkr&t| ¡ ƒd dkr&t| ¡ ƒd jdkr&dS dS )Nzstructure(scalar)é   r   ÚValueÚbooleanTF)r   ÚmembersÚlenÚlistÚkeysÚvaluesÚ	type_name)Ú	arg_modelr   r
   r
   r   Ú_qualifies_for_simplification)   s   r   c           
      K   s¸   g }|  dtt|d�¡ t|  ¡ ƒD ]G\}}t|dƒrY|j}t|ƒrYt|j	||j
|j|j	|jd�}|| |j	< d|j	 }t|||j
|jdd|j |j	|jd�}	|	| |< | ||	f¡ qd S )	Nzoperation-args-parsed.ec2.*)Úboolean_pairsÚargument_model)Ú
group_nameÚserialized_namezno-%sÚ
store_truezno_%s)ÚactionÚdestr   r   )r   r   Úvalidate_boolean_mutex_groupsr   ÚitemsÚhasattrr   r   ÚPositiveBooleanArgumentÚnameÚ_operation_modelÚ_event_emitterÚ_serialized_nameÚNegativeBooleanParameterÚpy_nameÚappend)
Úargument_tabler   Úkwargsr   ÚkeyÚvaluer   Únew_argÚnegative_nameÚnegative_argr
   r
   r   r	   3   s<   ÿþ

ü


û€ær	   c                 K   sF   | D ]\}}t ||jƒtur t ||jƒtur td|j|jf ƒ‚qd S )Nz8Cannot specify both the "%s" option and the "%s" option.)Úgetattrr(   Ú_NOT_SPECIFIEDÚ
ValueErrorÚcli_name)r   Úparsed_argsr+   ÚpositiveÚnegativer
   r
   r   r   Y   s   
ÿÿ€ýr   c                       s8   e Zd Z‡ fdd„Zedd„ ƒZdd„ Zdd„ Z‡  ZS )	r"   c                    s$   t t| ƒj|||||d� || _d S )N)r   )Úsuperr"   Ú__init__Ú_group_name)Úselfr#   r   Úoperation_modelÚevent_emitterr   r   ©Ú	__class__r
   r   r9   d   s
   
þ
z PositiveBooleanArgument.__init__c                 C   s   | j S )N)r:   )r;   r
   r
   r   r   k   s   z"PositiveBooleanArgument.group_namec                 C   s   |j | j| jdtdd� d S )NÚstoreú?)Úhelpr   ÚdefaultÚnargs)Úadd_argumentr4   Údocumentationr2   )r;   Úparserr
   r
   r   Úadd_to_parsero   s   
üz%PositiveBooleanArgument.add_to_parserc                 C   s:   |t u rd S |d u rddi|| j< d S |  |¡|| j< d S )Nr   T)r2   r&   Ú_unpack_argument©r;   Ú
parametersr-   r
   r
   r   Úadd_to_paramsy   s   ÿz%PositiveBooleanArgument.add_to_params)	Ú__name__Ú
__module__Ú__qualname__r9   Úpropertyr   rH   rL   Ú__classcell__r
   r
   r>   r   r"   c   s    

r"   c                       s*   e Zd Z		d‡ fdd„	Zdd„ Z‡  ZS )r'   r   Nc	           	         s&   t t| ƒj||||t|d� || _d S )N)rC   r   )r8   r'   r9   r2   r:   )	r;   r#   r   r<   r=   r   r   r   r   r>   r
   r   r9   Š   s
   
þ
z!NegativeBooleanParameter.__init__c                 C   s&   |t ur|rddi|| j< d S d S d S )Nr   F)r2   r&   rJ   r
   r
   r   rL   ’   s   ÿz&NegativeBooleanParameter.add_to_params)r   NN)rM   rN   rO   r9   rL   rQ   r
   r
   r>   r   r'   ‰   s
    þr'   )Ú__doc__ÚloggingÚ	functoolsr   Úawscli.argprocessr   Úawsclir   Úawscli.customizations.utilsr   Ú	getLoggerrM   ÚLOGÚobjectr2   r   r   r	   r   ÚCLIArgumentr"   ÚBooleanArgumentr'   r
   r
   r
   r   Ú<module>   s   

&
&