o
    !d#                     @   s   d dl mZ d dl mZ d dl mZ d dlmZ ddgZdgZdd	gZej	ej
gZejejgZd
ZdZdZdZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z d*d+ Z!d,S )-    )	constants)emrutils)
exceptions)OrderedDict
RetryCountRetryPeriodKMSKeyIdCustomProviderLocationCustomProviderClassz--emrfs Consistent=true/falsez--emrfs Encryption=ClientSidez.--emrfs Encryption=ClientSide,ProviderType=KMSz1--emrfs Encryption=ClientSide,ProviderType=Customc              
   C   sx   g }t | t|dr$|tjtjtjtj|	dtj
tjtjgd t|}|tjtjtj| dtj|d |S )NCUSTOMr	   )pathnameargs)Zrelative_pathregion)_verify_emrfs_args_need_to_configure_cseappendr   Zbuild_bootstrap_actionr   ZEMRFS_CSE_CUSTOM_S3_GET_BA_PATHZS3_GET_BA_NAMEZS3_GET_BA_SRCgetZS3_GET_BA_DESTZEMRFS_CUSTOM_DEST_PATHZS3_GET_BA_FORCE_build_ba_args_to_setup_emrfsZbuild_s3_linkZCONFIG_HADOOP_PATHZEMRFS_BA_NAME)r   
emrfs_argsZbootstrap_actionsZemrfs_setup_ba_args r   Husr/lib/python3.10/site-packages/awscli/customizations/emr/emrfsutils.pybuild_bootstrap_action_configs    s6   

r   c                 C   s:   t |  t| }t| dr| d|tj< tj|d}|S )Nr   r	   )ZClassificationZ
Properties)r   _build_emrfs_propertiesr   r   r   Z!EMRFS_CSE_CUSTOM_PROVIDER_URI_KEYZ
EMRFS_SITE)r   emrfs_propertiesZemrfs_configurationr   r   r   build_emrfs_confiuration=   s   
r   c                 C   s4  d| v r| d   tvrtj| d dd| v r'd| v r'tj| d | d dd| v rp| d   tjkrpd| vr?tjtdd| d   t	vrOtj
| d d| d   dkr`t|  tt n| d   d	krpt|  tt d
| vr|t|  tt t| dst|  tt t| d	st|  tt d S d S )N
Encryption)
encryptionSSE)Zsser   ProviderTypeobject_namemissing)Zprovider_typeKMSr   
Consistent)upperENCRYPTION_TYPESr   ZUnknownEncryptionTypeErrorZ#BothSseAndEncryptionConfiguredErrorr   EMRFS_CLIENT_SIDEMissingParametersErrorCSE_OPTION_NAMECSE_PROVIDER_TYPESZUnknownCseProviderTypeError_verify_required_argskeysCSE_KMS_REQUIRED_KEYSCSE_KMS_OPTION_NAMECSE_CUSTOM_REQUIRED_KEYSCSE_CUSTOM_OPTION_NAME_verify_child_argsCONSISTENT_OPTIONAL_KEYSCONSISTENT_OPTION_NAMEr   r   r   r   r   r   L   sP   






r   c                    sH   t  fdd|D r"ttt|t }tj|t|dd S )Nc                 3   s    | ]}| vV  qd S Nr   .0xactual_keysr   r   	<genexpr>x       z(_verify_required_args.<locals>.<genexpr>r    )	anylistsortedset
differencer   r(   r   join)r:   required_keysr!   Zmissing_keysr   r9   r   r+   w   s   
r+   c                    sH   t  fdd|D r"ttt|t }tjt||dd S )Nc                 3   s    | ]}| v V  qd S r5   r   r6   r9   r   r   r;      r<   z%_verify_child_args.<locals>.<genexpr>)invalidparent_object_name)	r=   r>   r?   r@   intersectionr   ZInvalidEmrFsArgumentsErrorr   rB   )r:   Z
child_keysrE   Zinvalid_keysr   r9   r   r1      s   r1   c                 C   s   t | }t|S r5   )r   _create_ba_args)r   r   r   r   r   r      s   r   c                 C   s   t  }t| rt||  t| rt||  t| dr t|| d t| dr+t|| d d| v rB| dD ]}t	|\}}|||< q4|S )zR
    Assumption: emrfs_args is valid i.e. all required attributes are present
    r#   r   ZArgs)
r   "_need_to_configure_consistent_view&_update_properties_for_consistent_view_need_to_configure_sse_update_properties_for_sser   _update_properties_for_cser   r   Zsplit_to_key_value)r   r   	arg_valuekeyvaluer   r   r   r      s   




r   c                 C   s   d| v S )Nr$   r   r4   r   r   r   rH      s   rH   c                 C   s"   d| v pd| v o| d   tjkS )Nr   r   )r%   r   EMRFS_SERVER_SIDEr4   r   r   r   rJ      s   rJ   c                 C   s2   d| v o| d   tjkod| v o| d   |kS )Nr   r   )r%   r   r'   )r   cse_typer   r   r   r      s   r   c                 C   sR   t |d  | tj< d|v rt |d | tj< d|v r't |d | tj< d S d S )Nr$   r   r   )strlowerr   ZEMRFS_CONSISTENT_KEYZEMRFS_RETRY_COUNT_KEYZEMRFS_RETRY_PERIOD_KEY)r   r   r   r   r   rI      s   

rI   c                 C   s*   d|v r|d nd}t | | tj< d S )Nr   T)rR   rS   r   ZEMRFS_SSE_KEY)r   r   Z	sse_valuer   r   r   rK      s   rK   c                 C   sN   d| t j< |dkrt j| t j< |d | t j< d S |dkr%|d | t j< d S d S )Ntruer#   r   r   r
   )r   ZEMRFS_CSE_KEYZ&EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAMEZ+EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEYZEMRFS_CSE_KMS_KEY_ID_KEY)r   r   rQ   r   r   r   rL      s   
rL   c                 C   s   |  tj |  | d S r5   )r   r   ZEMRFS_BA_ARG_KEY)ba_args	key_valuer   r   r   _update_emrfs_ba_args   s   rW   c                 C   s8   g }|   D ]\}}|}|r|d | }t|| q|S )N=)itemsrW   )r   rU   rN   rO   rV   r   r   r   rG      s   rG   N)"Zawscli.customizations.emrr   r   r   Zbotocore.compatr   r2   r-   r/   Z	EMRFS_KMSZEMRFS_CUSTOMr*   r'   rP   r&   r3   r)   r.   r0   r   r   r   r+   r1   r   r   rH   rJ   r   rI   rK   rL   rW   rG   r   r   r   r   <module>   s8   +	