o
    !dm                      @   sX  d dl Z d dl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	m
Z
 d dlmZ eeZdd Zd	d
 Zdd Zdd Zdd Zdd ZdejdddfddZ		dBddZdCddZdDddZdd  Zd!d" Z		dEd#d$Zd%d& ZdFd(d)Zd*d+ Z d,d- Z!d.d/ Z"d0d1 Z#d2d3 Z$d4d5 Z%d6d7 Z&dGd:d;Z'd<d= Z(d>d? Z)d@dA Z*dS )H    N)CLIOperationCaller)	constants)
exceptions)WaiterErrorNoCredentialsError)
xform_namec                 C   sP   g }| r&| D ]}| ddkr|d}}n|dd\}}|||d q|S )N=    KeyValue)findsplitappend)Zraw_tags_listZtags_dict_listtagkeyvalue r   Fusr/lib/python3.10/site-packages/awscli/customizations/emr/emrutils.py
parse_tags   s   r   c                 C   sb   g }| d ur/|  d}|D ]}|ddkr|d}}n| dd\}}|||d q|S d S )N,r   r	   r
   r   r   )r   r   r   )Zkey_value_stringZkey_value_listZraw_key_value_listZkvr   r   r   r   r   parse_key_value_string)   s   
r   c                 C   s0   | r|rd| d | d }t || rdS dS )Nzaws: error: cannot use both z and z options together.TF)
ValueError)Ztrue_optionZtrue_option_nameZfalse_optionZfalse_option_nameZerror_messager   r   r   apply_boolean_options:   s   r   c                 C      |r|| |< | S Nr   paramsr   r   r   r   r   applyH      r    c                 C   r   r   r   r   r   r   r   
apply_dictO   r!   r"   c                 C   s$   ||   v r| | r| | ||< |S r   )keys)Z
src_paramsZsrc_keyZdest_paramsZdest_keyr   r   r   apply_paramsV   s   r$   ZStepc                 C   sf   t dd| d i }t|d| t|d| i }| |d< t|d| t|d| t|d| ||d< |S )	NZHadoopJarStepZJarZ	structurenamer   NameZActionOnFailureArgsZ	MainClassZ
Properties)check_required_fieldr"   )Zjarr&   Zaction_on_failureargsZ
main_classZ
propertiesstepZ
jar_configr   r   r   
build_step]   s   r,   Bootstrap Actionc                 C   sN   | d u rt jdddi }t|d| i }t|d| | |d< t|d| |S )NZScriptBootstrapActionConfigPathZobject_namemissingr'   r(   ZScriptBootstrapAction)r   MissingParametersErrorr"   )pathr&   r*   Z	ba_configZscript_configr   r   r   build_bootstrap_actions   s   r3   r
   	us-east-1c                 C   s   |d u rd}d || S )Nr4   zs3://{0}.elasticmapreduce{1})formatZrelative_pathregionr   r   r   build_s3_link   s   r8   c                 C   s   | d u rd} t tj| dS )Nr4   r6   )r8   r   ZSCRIPT_RUNNER_PATH)r7   r   r   r   get_script_runner   s
   r9   c                 C   s   |s	t j| |dd S )Nr/   )r   r1   r%   r   r   r   r)      s
   r)   c                 C   s4   |rt |dkr|d  dkrtj| dd S d S )Nr   r   r
   )param)lenstripr   ZEmptyListError)r&   r   r   r   r   check_empty_string_list   s    r=   c                 C   sJ   |   d u r	t | jd|||d}tdt|  t||di |S )Nemrregion_nameendpoint_urlverifyzCalling r   )Zget_credentialsr   create_clientLOGdebugstrgetattr)sessionoperation_name
parametersr@   rA   rB   clientr   r   r   call   s   rL   c                 C   s   t d|  d S )Nzawscli/examples/emr/z.rst)open)commandr   r   r   get_example_file   s   rO      c                 C   s   t j| |dS )N)indent)jsondumps)dictrQ   r   r   r   dict_to_string   s   rU   c                 C   s   | j dt| ||j|jdS )Nr>   r?   )rC   
get_regionrA   
verify_ssl)rH   parsed_globalsr   r   r   
get_client   s   rY   c                 C   s&   t | |}|j|d}|d d d S )N	ClusterIdClusterZStatusStaterY   describe_clusterrH   rX   
cluster_idrK   datar   r   r   get_cluster_state   s   
rc   c                 C   s"   t | |}|j|d}|d d S )z8
    Returns the master_instance's 'PublicDnsName'.
    rZ   r\   ZMasterPublicDnsNamer^   r`   r   r   r   find_master_dns   s   
rd   c                 C   sV   t jd t jD ]}|d}t j|| }t j|r(t |t j	r(|  S q	d S )NPATH")
osenvironr   pathsepr<   r2   joinisfileaccessX_OK)programr2   Zexe_filer   r   r   which   s   
ro   c                 C   s   t | }|d||| d S )Nr>   )r   Zinvoke)rH   rI   rJ   rX   cli_operation_callerr   r   r   call_and_display_response   s
   rq   c                 C   s   t | }|||| d S r   )r   Z_display_response)rH   rI   resultrX   rp   r   r   r   display_response   s   rs   c                 C   s   |j }|d u r| d}|S )Nr7   )r7   Zget_config_variable)rH   rX   r7   r   r   r   rV      s   
rV   r   andc                 C   s\   dd | D } t | dk rdS t | dkr| d S d| }d|| dd	 || d	 gS )
zM
    Helper method to print a list of values
    [1,2,3] -> '1, 2 and 3'
    c                 S   s   g | ]}t |qS r   )rF   ).0xr   r   r   
<listcomp>   s    zjoin.<locals>.<listcomp>r   r
   r   z%s  Nr	   )r;   rj   )values	separatorZlastSeparatorr   r   r   rj      s   rj   c                 C   s"   |  ddkr| dfS | ddS )Nr   r	   r
   r   )r   r   )stringr   r   r   split_to_key_value   s   r|   c                 C   s0   d| i}t |d||||}|d ur|dS d S )Nr[   r_   r\   )rL   get)ra   rH   r7   rA   rW   Zdescribe_cluster_paramsZdescribe_cluster_responser   r   r   get_cluster  s   
r~   c                 C   s&   t | ||||}|d ur|dS d S )NZReleaseLabel)r~   r}   )ra   rH   r7   rA   rW   Zclusterr   r   r   get_release_label  s   
r   )r-   N)r
   r4   )r4   )NNN)rP   )r   rt   )+rR   loggingrg   Zawscli.clidriverr   Zawscli.customizations.emrr   r   Zbotocore.exceptionsr   r   Zbotocorer   	getLogger__name__rD   r   r   r   r    r"   r$   ZDEFAULT_FAILURE_ACTIONr,   r3   r8   r9   r)   r=   rL   rO   rU   rY   rc   rd   ro   rq   rs   rV   rj   r|   r~   r   r   r   r   r   <module>   sX   






	

