o
    :Fde3                     @   s   d dl mZmZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZ dd	 ZG d
d deZdd Zdd Zdd Zdd Zdd Zdd ZdS )    )	Completer
Completion)get_oci_resourcesN)dynamic_loader)service_mapping)parameters_to_excludestyles_dict)get_error_messagec                 C   sF   |  drdnd}t| dkrdS | dd  D ]	}||kr  dS qdS )N'"   FT)
startswithlen)s
quote_typec r   Cusr/lib/python3.10/site-packages/interactive/oci_shell_completer.pyis_matching_quotes   s   r   c                   @   sn   e Zd ZdddZdd Z			dd	d
Zdd Zdd Ze dfddZ	dd Z
dd Zdd Zdd ZdS )OciShellCompleterTNc                 C   sJ   || _ |jj| _| jjdd d |  | _|| _|| _t	 | _
d| _d S )Nc                 S      | j S Nnameparamr   r   r   <lambda>       z,OciShellCompleter.__init__.<locals>.<lambda>keyr   )ctxcommandparamstop_level_paramssortget_top_level_commandstop_level_commandscolors_enabledbottom_toolbarsetlist_of_required_paramssize)selfr    r'   r(   r   r   r   __init__   s   


zOciShellCompleter.__init__c                 C   s`   i }t | jjdi }| D ]	\}}|j||< qtD ]
}t| d ||< qtt| }|S )Ncommandsr   )	getattrr    r!   itemshelpr   collectionsOrderedDictsorted)r,   r&   Zinitial_oci_commandscmd_nameZ
cmd_objectZservicer   r   r   r%   (   s   z(OciShellCompleter.get_top_level_commands Fc                 C   sB   |  dks||rt|t| |||r|d dS |dS d S )Nr6   z (*))styledisplay_metaZdisplay)stripr   r   r   )r,   tokenr   word_before_cursorr7   r8   required_fieldr   r   r   add_completion5   s   	
z OciShellCompleter.add_completionc                    sb   dd t dd |D  dd t  fdd|D | j } jdd d |jd	d d  |fS )
Nc                 S      g | ]}|qS r   r   .0r   r   r   r   
<listcomp>J   s    zFOciShellCompleter.get_required_and_optional_params.<locals>.<listcomp>c                 S   s   | j dS )Nz [required])r1   endswithr   r   r   r   r   M   s    zDOciShellCompleter.get_required_and_optional_params.<locals>.<lambda>c                 S   r>   r   r   r?   r   r   r   rA   P   s    c                    s   |  vS r   r   r   
req_paramsr   r   r   Q   s    c                 S   r   r   r   r   r   r   r   r   S   r   r   c                 S   r   r   r   r   r   r   r   r   T   r   )filterr#   r$   )r,   r"   
opt_paramsr   rC   r    get_required_and_optional_paramsI   s   z2OciShellCompleter.get_required_and_optional_paramsc                 C   s:   |  |j\}}|D ]}|jd }| jt|j q
d S )Nr   )rG   r"   optsr*   addtuple)r,   r!   rD   rF   r   
param_namer   r   r   get_list_of_req_paramX   s
   
z'OciShellCompleter.get_list_of_req_paramc              	   C   s   g }|  |j\}}|D ]-}	|	jd }
|
|v s||
vrq| j||	jd || jr+td nd|	jdd}|r9|| q|D ](}	|	jd }
|
|v sO|
tv sO||
vrPq<| j||	jd ||	jd}|rd|| q<|S )Nr   zrequired-parameterr6   T)r8   r<   r8   )	rG   r"   rH   r=   r'   r   r1   appendr   )r,   r!   r;   r:   already_chosen_parametersremaing_sub_stringcompletionsrD   rF   r   rK   
completionr   r   r   append_parameter_completions_   sD   



z.OciShellCompleter.append_parameter_completionsc                 C   s:   g }|D ]}| j |||d|| jd}|r|| q|S Nr6   rM   )r=   r1   rN   )r,   Zsorted_sub_commandsr;   r:   rQ   ZtlprR   r   r   r   append_command_completions   s   
z,OciShellCompleter.append_command_completionsc                 C   s>   g }| j  D ]\}}| j|||d|d}|r|| q|S rT   )r&   r0   r=   rN   )r,   r;   r:   rQ   r5   Zcmd_helprR   r   r   r   $append_top_level_command_completions   s   

z6OciShellCompleter.append_top_level_command_completionsc                 C   sX   t  }|| |r|j}n| j}|D ]}||jks||jv r)||j |  S q|S r   )r)   rI   r"   r#   r   rH   update)r,   r!   Zparameter_nameZparam_namesr"   r   r   r   r   list_all_parameter_names   s   
z*OciShellCompleter.list_all_parameter_namesc                 C   s  d}d}g }d| _ | j  |jdd}tt|j}d}| j}	g }
|j	dr/|d d  n|d d }|d d  }d }t
 }d }d}t|D ]\}}|drsd	d
 |jD }t|}||sk|| || |}|| qH|dkr||	v rt| t| jjdi }|| }t|di }
tt|
 }
d}n]|
r||
v r|
| }t|di }
|
sd}tt|
 }
n?|s| jjtd|dd |  S |r|ds|ds|r|ds|dr||7 }n|r||7 }t|rd }d}nd }|| qHt |dkr
dn|d }|r| !| |r | "||}n.t |
dkr/| #|
||}n|r8t$||rB| %||d||}nt&| j||| j|}d}|rXt'||| j t || _ |S )NFTr   )ZWORD r6   -c                 S   s   i | ]}|j |jqS r   )r   Zmultiple)r@   xr   r   r   
<dictcomp>   s    z5OciShellCompleter.get_completions.<locals>.<dictcomp>r.   invalid_inputZis_errorr   r
   )(r+   r*   clearZget_word_before_cursorshlexsplithandle_invalid_charstextr&   rB   r)   	enumerater   r"   convert_to_snake_casegetrW   rX   remover   Zload_servicer/   r    r!   r2   r3   r4   r0   r(   set_toolbar_textr	   r   r   rL   rV   rU   check_param_is_flagrS   r   validate_incorrect_input)r,   Zdocument_Zis_leaf_command_metvalidaterQ   r;   tokensZonly_at_top_levelr&   Zservice_subcommandsZtoken_checkZremaining_command_tokensr!   rO   	parameterparam_valueZtoken_indexr:   Zmultiple_dictZtoken_snakeZoci_subcommandsrP   r   r   r   get_completions   s   
$









	
z!OciShellCompleter.get_completions)TN)r6   r6   F)__name__
__module____qualname__r-   r%   r=   rG   rL   r)   rS   rU   rV   rX   rq   r   r   r   r   r      s     


/
r   c                 C   s   |  dddS )Nr[   rl   )r9   replace)Z	token_strr   r   r   rf   9  s   rf   c                 C   s$   | j D ]}||jv r|j  S qdS )NF)r"   rH   Zis_flag)r!   r   pr   r   r   rj   =  s
   


rj   c                 C   s   |  ddS )N\r6   ru   r   r   r   r   remove_backslashesD  s   rz   c                 C   s   |  dd ddS )Nr
   z\'r   z\"rx   ry   r   r   r   escape_quotesH  s   r{   c                 C   s   t | } t| } | S r   )rz   r{   ry   r   r   r   rc   L  s   rc   c                 C   s$   | st d|}|j|dd d S d S )Nr^   Tr_   )r	   ri   )rQ   r;   r(   Zerror_messager   r   r   rk   R  s   
rk   )Zprompt_toolkit.completionr   r   Z%interactive.oci_resources_completionsr   r2   ra   oci_clir   Zoci_cli.service_mappingr   Zinteractive.utilsr   r   Zinteractive.error_messagesr	   r   r   rf   rj   rz   r{   rc   rk   r   r   r   r   <module>   s$   
   