o
    !d                     @   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
   Fusr/lib/python3.10/site-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   ValueZ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 ]E}t|drW|j}t|rWt|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   r   hasattrr   r   PositiveBooleanArgumentnameZ_operation_modelZ_event_emitter_serialized_nameNegativeBooleanParameterpy_nameappend)	Zargument_tabler   kwargsr   valuer   Znew_argZnegative_nameZ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   Zparsed_argsr&   Z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   r.   d   s
   

z PositiveBooleanArgument.__init__c                 C   s   | j S )N)r/   )r0   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_argumentr+   documentationr)   )r0   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)r)   r"   Z_unpack_argumentr0   
parametersr'   r
   r
   r   add_to_paramsy   s   z%PositiveBooleanArgument.add_to_params)	__name__
__module____qualname__r.   propertyr   r=   r@   __classcell__r
   r
   r3   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)r8   r   )r-   r#   r.   r)   r/   )	r0   r!   r   r1   r2   r   r   r   r   r3   r
   r   r.      s
   

z!NegativeBooleanParameter.__init__c                 C   s&   |t ur|rddi|| j< d S d S d S )Nr   F)r)   r"   r>   r
   r
   r   r@      s   z&NegativeBooleanParameter.add_to_params)r   NN)rA   rB   rC   r.   r@   rE   r
   r
   r3   r   r#      s
    r#   )__doc__logging	functoolsr   Zawscli.argprocessr   awsclir   Zawscli.customizations.utilsr   	getLoggerrA   ZLOGobjectr)   r   r   r	   r   ZCLIArgumentr    ZBooleanArgumentr#   r
   r
   r
   r   <module>   s   

&
&