o
    .&ßa’#  ã                   @   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)Úrelative_pathÚregion)Ú_verify_emrfs_argsÚ_need_to_configure_cseÚappendr   Úbuild_bootstrap_actionr   ÚEMRFS_CSE_CUSTOM_S3_GET_BA_PATHÚS3_GET_BA_NAMEÚS3_GET_BA_SRCÚgetÚS3_GET_BA_DESTÚEMRFS_CUSTOM_DEST_PATHÚS3_GET_BA_FORCEÚ_build_ba_args_to_setup_emrfsÚbuild_s3_linkÚCONFIG_HADOOP_PATHÚEMRFS_BA_NAME)r   Ú
emrfs_argsÚbootstrap_actionsÚemrfs_setup_ba_args© r#   úF/usr/lib/python3/dist-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	   )ÚClassificationÚ
Properties)r   Ú_build_emrfs_propertiesr   r   r   Ú!EMRFS_CSE_CUSTOM_PROVIDER_URI_KEYÚ
EMRFS_SITE)r    Úemrfs_propertiesÚ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ƒs‰t|  ¡ ttƒ t| d	ƒs˜t|  ¡ ttƒ d S d S )NÚ
Encryption)Ú
encryptionÚSSE)Ússer/   ÚProviderType©Úobject_nameÚmissing)Úprovider_typeÚKMSr   Ú
Consistent)ÚupperÚENCRYPTION_TYPESr   ÚUnknownEncryptionTypeErrorÚ#BothSseAndEncryptionConfiguredErrorr   ÚEMRFS_CLIENT_SIDEÚMissingParametersErrorÚCSE_OPTION_NAMEÚCSE_PROVIDER_TYPESÚ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>r3   )	ÚanyÚlistÚsortedÚsetÚ
differencer   r>   r   Újoin)rQ   Úrequired_keysr4   Úmissing_keysr#   rP   r$   rB   w   s   ÿ
ÿýrB   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 rL   r#   rM   rP   r#   r$   rR   €   rS   z%_verify_child_args.<locals>.<genexpr>)ÚinvalidÚparent_object_name)	rT   rU   rV   rW   Úintersectionr   ÚInvalidEmrFsArgumentsErrorr   rY   )rQ   Ú
child_keysr]   Úinvalid_keysr#   rP   r$   rH      s   ÿþýrH   c                 C   s   t | ƒ}t|ƒS rL   )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
    r7   r   Ú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   Úsplit_to_key_value)r    r+   Ú	arg_valueÚkeyÚvaluer#   r#   r$   r(   Ž   s   




r(   c                 C   s   d| v S )Nr8   r#   rK   r#   r#   r$   rd   ¨   s   rd   c                 C   s"   d| v pd| v o| d   ¡ tjkS )Nr0   r.   )r9   r   ÚEMRFS_SERVER_SIDErK   r#   r#   r$   rf   ¬   s   þrf   c                 C   s2   d| v o| d   ¡ tjkod| v o| d   ¡ |kS )Nr.   r2   )r9   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 )Nr8   r   r   )ÚstrÚlowerr   ÚEMRFS_CONSISTENT_KEYÚEMRFS_RETRY_COUNT_KEYÚEMRFS_RETRY_PERIOD_KEY)r+   r    r#   r#   r$   re   ¹   s   ÿ
ÿ
ÿÿre   c                 C   s*   d|v r|d nd}t |ƒ ¡ | tj< d S )Nr0   T)ro   rp   r   ÚEMRFS_SSE_KEY)r+   r    Ú	sse_valuer#   r#   r$   rg   Æ   s   rg   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Útruer7   r   r   r
   )r   ÚEMRFS_CSE_KEYÚ&EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAMEÚ+EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEYÚEMRFS_CSE_KMS_KEY_ID_KEY)r+   r    rn   r#   r#   r$   rh   Í   s   
þÿÿþÿÿrh   c                 C   s   |   tj¡ |   |¡ d S rL   )r   r   ÚEMRFS_BA_ARG_KEY)Úba_argsÚ	key_valuer#   r#   r$   Ú_update_emrfs_ba_argsÝ   s   r~   c                 C   s8   g }|   ¡ D ]\}}|}|r|d | }t||ƒ q|S )Nú=)Úitemsr~   )r+   r|   rk   rl   r}   r#   r#   r$   rb   â   s   rb   N)"Úawscli.customizations.emrr   r   r   Úbotocore.compatr   rI   rD   rF   Ú	EMRFS_KMSÚEMRFS_CUSTOMr@   r=   rm   r:   rJ   r?   rE   rG   r%   r-   r   rB   rH   r   r(   rd   rf   r   re   rg   rh   r~   rb   r#   r#   r#   r$   Ú<module>   s8   +	