o
    :Fd                 
   @   sr  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ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# 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- d dl.m/Z/ d dl0m1Z1m2Z2 d dlm3Z3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl.m=Z= d dl.m>Z> d dl.m?Z? d dl.m@Z@ d dl.mAZA d dlBmCZC ddddddZDeE ZFh dZGi ZHg ZIi ZJi ZKdZLdZMg dZNdZOe2Z2dZPdQe?jRZSd ZTd!ZUd"ZVd#ZWd$ZXd%ZYd&ZZd'Z[d(Z\e]d)Qe^Z_e_`ea  e_bejc G d*d+ d+eEZdd,d- Zedd/d0Zfd1d2 ZgG d3d4 d4eEZhd5d6 Zid7d8 Zjd9d: Zkd;d< Zldd>d?Zmd@dA ZndBdC ZodDdE ZpdFdG ZqdHdI ZrddKdLZsdMdN ZtdOdP ZudQdR ZvdSdT ZwdUdV ZxdWdX ZyddYdZZzdd[d\Z{dd]d^Z|d_d` Z}dadb Z~ddcddZd	dedfZdgdh Zdidj Zdkdl Zdmdn Zdodp Z	 ejdqdrdsd=dtdJd=eduZ	 ejdqdrdsd=dtdJdJeduZdvdw Zejdxd=edJdydzZd
d|d}Zdd~dZdd Zg d=d=fddZdd Zdd ZdeddifiZdd Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zi d=fddZdddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdd Zdd Zdd ZdddĄZddƄ ZdddȄZddʄ Zdd̄ Zdd΄ ZddЄ Zdd҄ ZddԄ Zddք Zdd؄ Zddڄ Zdd܄ Zddބ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdefddZdd ZG dd dZG d d dZdS (      )print_functionN)render_config_errors)chain)
AsciiTable)default_timer)pymd5)default_backend)rsa)serialization)cli_exceptions)
CLIENT_MAPMODULE_TO_TYPE_MAPPINGS)
exceptionsconfigResponse)RetryStrategyBuilderretry_checkers)requests)__version__)string_utils)help_text_producer)cli_constants)cli_metrics)dynamic_loadercorevault)ZbvZnetworkcomputezcompute-managementr   >   Zetagzopc-next-cursorzopc-total-itemsopc-next-pagezopc-work-request-idzLThis must be provided in JSON format. See API reference for additional help. )1ytyestrueon   zWARNING: This operation supports pagination and not all resources were returned.  Re-run using the --all option to auto paginate and list all resources.zWARNING: The active profile contains a value for 'security_token_file' which is not being used. To authenticate using the token, specify --auth {}OCI_CLI_IN_INTERACTIVE_MODEOCI_CLI_CLOUD_SHELLZIMAGE_VERSIONZadditional_user_agentzOracle-PythonCLI/{}z Oracle-Interactive z Oracle-Interactive-CloudShell z Oracle-Container-Image z$ Oracle-Interactive-Container-Image {}c                   @   sH   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zed
d Zedd ZdS )FilePermissionCheckerz1WARNING: Permissions on {filepath} are too open. zYThe following users  / groups have permissions to the file and should not: {identities}. z8To fix this please try executing the following command: z4oci setup repair-file-permissions --file {filepath} zuAlternatively to hide this warning, you may set the environment variable, OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING: zqAlternatively to hide this warning, you may set an environment variable; Windows and PowerShell commands follow: z5export OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=Truez5$Env:OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING="True"z2SET OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=Truec                 C   s  zdj d| d d}tjdd |gdd }W n
 ty$   Y d S w t|dkr-d S zdd	d
 t| D }tj	j |d}tj
j d|d}tjtj|d | d tj ddtjd tjtjj |dtjd tjtjtjddtjd tjtjtjd tjtjd tjd W d S  ty   tj	j |d}tjtj|d tj ddtjd tjtjj |dtjd tjtjtjddtjd tjtjtjd tjtjd tjd Y d S w )Na  $ex_perms=@();$defaults=@();$macls=(Get-Acl {filename}).Access.IdentityReference;$defaults+=[wmi]"win32_SID.SID='S-1-5-32-544'"|%{{$_.ReferencedDomainName + "\" + $_.AccountName}};$defaults+=[wmi]"win32_SID.SID='S-1-5-18'"|%{{$_.ReferencedDomainName + "\" + $_.AccountName}};$defaults+="$env:USERDOMAIN" + "\" + "$env:USERNAME";foreach ($i in $macls){{foreach ($m in $defaults){{if($i -eq $m){{$found=$true;}}}};if(!$found){{$ex_perms+=$i}};$found=$false;}};"$ex_perms";")filenamezpowershell.exer(   T)shellr   c                 S   s   g | ]}|r|  qS  )strip).0liner-   r-   4usr/lib/python3.10/site-packages/oci_cli/cli_util.py
<listcomp>       zRFilePermissionChecker.windows_warn_on_invalid_file_permissions.<locals>.<listcomp>filepathz, )Z
identities
redZfgfile)format
subprocesscheck_outputr.   	Exceptionlen_try_decode_using_stdout
splitlinesr)   WARNING_MESSAGEIDENTITY_WARNINGjoinclickechostyleFIX_SUGGESTIONsysstderr
REPAIR_CMDALTERNATE_SUGGESTION_WINDOWSALTERNATE_WINDOWS_CMDALTERNATE_POWERSHELL_CMD
ValueError)clsr+   cmdoutputZdisallowed_identitieswarningZidentity_warningr-   r-   r1   (windows_warn_on_invalid_file_permissions   s8    
,$z>FilePermissionChecker.windows_warn_on_invalid_file_permissionsc                 C   s   t jd}|dkrd S t j| } t rt|  d S d}t	t 
| j|@ rjtjj| d}tjtj|d tj ddtjd tjtjj| dtjd tjtjtjddtjd tjtjd tjd d S d S )	NZ)OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNINGTrue   r4   r6   r7   r8   r9   )osenvirongetpath
expanduser
is_windowsr)   rT   statS_IMODElstatst_moderB   r;   rE   rF   rG   rH   rI   rJ   rK   ALTERNATE_SUGGESTIONALTERNATE_BASH_CMD)r5   suppress_warningZunwanted_permsrS   r-   r-   r1    warn_on_invalid_file_permissions   s   $z6FilePermissionChecker.warn_on_invalid_file_permissionsN)__name__
__module____qualname__rB   rC   rH   rK   ra   rL   rb   rN   rM   classmethodrT   staticmethodrd   r-   r-   r-   r1   r)      s    
*r)   c                 C   s   |r|j |jv r|j|j  t| D ]}|dr!tdd|}qz|t|d |jj	 d < W n	 t
y9   Y nw ||_ |rF|| d S d S )NZ_root_groupz_root_group$r   .z.command_name)namecommandspopdirendswithresub	OVERRIDEScallbackre   r>   Zadd_command)Zcli_packageZparent_groupcommandnew_nameZpackage_commandservice_namer-   r-   r1   rename_command   s   
rw   Bc                 C   s>   dD ]}t | dk rd| ||f   S | d } qd| d|f S )N)r   ZKiZMiZGiZTiPiZEiZZig      @z	%3.1f%s%sz%.1f%s%sZYi)abs)numsuffixZunitr-   r-   r1   
sizeof_fmt   s
   
r}   c                 C   sH   t  s"dd l}||jj}ttj	 |  d
t||  d S d S )Nr   z{} ({}))r\   resourceZ	getrusageZRUSAGE_SELFZ	ru_maxrssloggerdebugocibase_clientutc_nowr;   r}   )msgr~   Zmemory_usager-   r-   r1   output_memory   s
   (r   c                   @   s   e Zd ZdddZdS )ConfigAndSignerNFc                 C   s   || _ || _|| _d S Nr   signeruses_instance_principals_auth)selfr   r   r   r-   r-   r1   __init__   s   
zConfigAndSigner.__init__)NNFre   rf   rg   r   r-   r-   r-   r1   r      s    r   c                 C   sf   d|v r-d}|  ds|  drt|d| }n|  ds$|  dr-t|d| }t| |S )	NZAPIzAPI(s?)(?! Gateway)z_root_group.helpz_service_group.helpZCLIz_root_group.short_helpz_service_group.short_helpr   )ro   rp   rq   r.   rr   rY   )keydefaultpatternr-   r-   r1   override   s   r   c           
   
   C   s  d }zi }| j d r| j d |d< | j d r| j d |d< d|v r}|d tjkr}d }|d}|d u r7tdtj|}tj|sIt	d| t
|d}|  }W d    n1 s_w   Y  ||d	< |d u rptd
tjjjdi |}W |S d|v r|d d ur|d  |d< tjjjdi |}W |S  tt	fy } zt| W Y d }~|S d }~w ty }	 ztdt|	 W Y d }	~	|S d }	~	ww )Ncert_bundleZ$federation_client_cert_bundle_verifyregion	auth_typedelegation_token_filezNERROR: Please specify the location of the delegation_token_file in the config.z*ERROR: delegation_token_file not found at rdelegation_tokenz)ERROR: delegation_token was not provided.auth_purposeZpurposezERROR: Failed retrieving certificates from localhost. Instance principal auth is only possible from OCI compute instances. 
Exception: {}r-   )objr   OCI_CLI_AUTH_INSTANCE_OBO_USERrY   rO   rW   rZ   r[   existsIOErroropenreadr.   r   authsignersZ'InstancePrincipalsDelegationTokenSignerupperZ%InstancePrincipalsSecurityTokenSignerrI   exitr>   r;   str)
ctxclient_configr   Zsigner_kwargsr   Zdelegation_token_locationZ"expanded_delegation_token_locationr   exer-   r-   r1   get_instance_principal_signer  sH   



r   c              	   C   s  d }|  d}|stdtj tj|}tj	|s&td| t
| t|d}| }W d    n1 s?w   Y  ztj|  d|  d}W n tjyo   t | d< tj|  d|  d}Y nw tjjd |}| std tjdd	d
rt }ddlm}	 | d d u}
|j|	|jd tj|jd |
d td|jd  td td ntd tjj !||}|S )Nsecurity_token_filezTERROR: Config value for 'security_token_file' must be specified when using --auth {}zAERROR: File specified by 'security_token_file' does not exist: {}r   key_filepass_phrasezSERROR: This CLI session has expired, so it cannot currently be used to run commandsz8Do you want to re-authenticate your CLI session profile?Tr   r   authenticateprofileconfig_file)profile_nameconfig_locationZuse_passphrasez9Successfully re-authenticated your CLI session profile {}zDYou can now re-run your command to use your re-authenticated profile   )"rY   rI   r   r;   r   OCI_CLI_AUTH_SESSION_TOKENrW   rZ   r[   r   r)   rd   r   r   r   r   Zload_private_key_from_filer   MissingPrivateKeyPassphraseprompt_for_passphraser   security_token_containerZSecurityTokenContainervalidrE   rF   confirmget_current_contextoci_cli.cli_sessionr   invoker   r   ZSecurityTokenSigner)r   r   Zsecurity_token_locationZ expanded_security_token_locationr   tokenprivate_keyr   r   r   Zpassphrase_promptr-   r-   r1   get_session_token_signer/  s>   




&

r   c                 C   s  | j d stt dd | j d< d| j v o | j d tjk}d| j v o-| j d tjk}d| j v o:| j d tj	k}d| j v oG| j d tj
k}d }i }i }zt| j }W n tjy } z|s|stdtj| j d  |rtjdtj	dd	rd
dlm}	 | j|	| j d tj| j d d tdtj| j d | j d  td td
 nG|stjddd	rt }
dt|
jv rdt|
jv r| j|
| j d tj| j d d n| |
 td td td
 ntd t| | j d r
d|d< W Y d }~nd }~ww |s|rK|r$tj
|d< nd| j v r1| j d |d< | j d rE|r@td ntd t| |}n5|r^| j d rYtd t |}n"|r| j d rn| j d |d< | j d rytd t!j"j#j$% }||d< zt&j'|fi | W n3 tj(y } z%t)|j*tkrt+|}n|j*}d }t|j| j d |d! W Y d }~nd }~ww t,|||d"S )#N
request_id-r   r   z'ERROR: Could not find config file at {}r   zcDo you want to create a new config file with a CLI session profile that can be used with --auth {}?Tr   r   r   r   )r   r   zHSuccessfully created config file {} with your new CLI session profile {}z?You can now re-run your command to use your new session profilez(Do you want to create a new config file?r   r   z?Successfully created config file with your new CLI user profilezyOnce your public key is uploaded in the console, you can re-run your command to use your new config file and user profiler   r   log_requestsr   r   zauth: instance_principalzauth: delegation_tokenzauth: session_tokenr   zauth: resource_principalr   z=ERROR: The config file at {config_file} is invalid:

{errors})r   errorsr   )-r   r   uuiduuid4replacer   r   ZOCI_CLI_AUTH_INSTANCE_PRINCIPALZOCI_CLI_AUTH_RESOURCE_PRINCIPALr   r   build_configr   ZConfigFileNotFoundrE   rF   r;   rW   rZ   r[   r   r   r   r   rI   r   get_config_setup_functionparamsadd_additional_user_agentsr   r   r   r   r   r   r   Zresource_principals_signerZget_resource_principals_signerr   Zvalidate_configZInvalidConfigtyper   r   r   )r   Zinstance_principal_authZresource_principal_authZsession_token_authZdelegation_token_authr   kwargsr   r   r   Z
setup_funcZ
bad_configtabletemplater-   r-   r1   /create_config_and_signer_based_on_click_contextX  s   
$&
&



!




r   Tc                 C   s   |j d }|r tj|}tj|stjdd|d|| _|j 	di 	drH|j d }|s8|j d d }|rAd|i| _
d S d|i| _
d S d S )Nr    Cannot find cert_bundle file: {}Z
param_hintmessagesettingsproxyhttpshttp)r   rW   rZ   r[   isfilerE   BadParameterr;   verifyrY   Zproxies)sessionr   Zuses_sslr   Zproxy_to_user-   r-   r1   +set_request_session_properties_from_context  s   

r   c              
   C   s  t | }|j}|j}d|v rttj|d  |d u r%|jr%t	
dzE|d u rHztj|}W n tjyG   t |d< tj|}Y nw t }||_| jd |jd< tjj|t d|jd< t||  |W S  tjy } ztt| W Y d }~d S d }~ww )Nr   ziInvalid configuration detected: instance principals authentication is being used without a created signerr   r   zopc-request-id)extraz
user-agent)r   r   r   r)   rd   rW   rZ   r[   r   rE   ZClickExceptionr   ZSignerZfrom_configr   r   r   r   ZSessionr   r   headersr   Zbuild_user_agentADDITIONAL_USER_AGENTr   InvalidPrivateKeyrI   r   r   )r   config_and_signerr   r   r   bad_keyr-   r-   r1   build_raw_requests_session  s2   


r   c              
   C   s  dt jv r
tj  t|}|j}|j}i }|jr||d< d|v r,t	t j
|d  ||jd< d|jv r=|jd |d< |jd sQtt dd |jd< |jd	 stjj|d
< d|jv r~|jd r~t j|jd djddjtjdd |d
< ntj |d
< z| tvrt|  t|  | }|tv r|j d|d< |jd |d< z
||fi |}W n t!j"y   t# |d< ||fi |}Y nw |jd r|jd |j$_%|jd r|jd r|jd |jd f|j$_&n!|jd |j$j&d f|j$_&n|jd r|j$j&d |jd f|j$_&|jd }	|	r3t j
|	}	t j
'|	s.t(j)dd*|	d|	|j$j+_,t-j./ rgt0 |jd  }
|jd rUt12tj$3 d t|
  |
t-j.4 krgt-j.5d |jd  |W S  t!j6y } zt78t| W Y d }~d S d }~ww )!NZ%OCI_CLI_USE_INSTANCE_METADATA_SERVICEr   r   r   skip_deserializationr   r   r   no_retryZretry_strategymax_attempts)r   iX  )Ztotal_elapsed_time_secondsT)Zservice_error_retry_configZservice_error_retry_on_any_5xxendpointZservice_endpointrealm_specific_endpointZ5client_level_realm_specific_endpoint_template_enabledr   Zconnection_timeoutZread_timeoutr   r   r   r   r   Z
start_timer   zInvocation time: ZNUM_SLOW_INVOCATIONS)9rW   rX   r   regionsZ enable_instance_metadata_servicer   r   r   r)   rd   rZ   r[   r   r   r   r   r   r   retryZDEFAULT_RETRY_STRATEGYr   Zadd_max_attemptsZadd_total_elapsed_timeZadd_service_error_checkr   ZRETRYABLE_STATUSES_AND_CODESZget_retry_strategyZNoneRetryStrategyr   r   Zload_service_dirSERVICES_REQUIRING_ENDPOINTSrY   r   r   r   r   r   timeoutr   rE   r   r;   r   r   r   MetricsZis_metrics_enabledtimerr   r   r   Zget_pre_invocation_delayupdate_metricr   rI   r   )	spec_namerv   r   r   r   r   r   Zclient_classZclientr   Zinvocation_timer   r-   r-   r1   build_client  s   












r   c                   C   s
   t  dS )NzPrivate key passphrase:)getpassr-   r-   r-   r1   r   K     
r   c              
   C   s  dt jvrt jd d}t| rd}t }n9zt j| d | d d}| d r/td|  W n t	j
t	jfyO } ztd	t|  W Y d
}~nd
}~ww |r\tt | d  tjD ]}|tjv r}tj| |tj| < | d r}tdtj|  q_t| | d r| d |d< | d rd|d< | d rtd | d r| d |d< dt jv rt jd | d rtd |S |dd
 |S )zPLoad the config object from file, and apply any overrides found in command_args.r   TFr   r   )Zfile_locationr   r   zConfig File: %szERROR: Nz%s: Environment Variabler   z)region: Environment Variable or Parameterr   z+endpoint: Environment Variable or Parameter)r   ZREQUIREDaddis_config_valid_from_envbuild_empty_config	from_filer   r   keysr   ZProfileNotFoundZInvalidKeyFilePathrI   r   r   r)   rd   Z_get_config_path_with_fallbackr   ZOCI_CONFIG_ENV_VARSrW   rX   r   removerm   )command_argsZ
file_checkr   r   envr-   r-   r1   r   O  sN   





r   c                 C   s   t | j| j| d S r   )renderdatar   )responser   r-   r-   r1   render_response     r   Fc                 C   s  i }| r-|r)t  }t| |d< |jd r(t  }ttj dt	||   nt| }d }|jd r8t
|}|rQ|D ]}	|	 }	|	tv sH|rP||	d ||	< q<|r$|}
|rt  }||}
|jd ryt  }ttj dt	||   |
stjdtjd d S |jd rtd |jd	 d
kr|jd rt|
tjrt|
 nut  }tt|
 |jd rt  }ttj dt||   nR|jd	 dkr|
}d|
v r|s|
d }t  }t| |jd rt  }ttj dt||   d|v r|D ]}|dkrtjd||| tjd q|jd r$td |rZ|dr\d}|jjrF|jjD ]}|jdkrDd} nq8|r^t}tjtj|ddtjd d S d S d S d S )Nr   r   z,time elapsed calling to_dict from render: {}query&time elapsed evaluating expression: {}z/Query returned empty result, no output to show.r9   z$total memory usage before printing: rR   json
raw_outputz'Time elapsed printing response data: {}r   z{}: {}z#total memory usage after printing: r   FZ	all_pagesTr7   r8   ) r   to_dictr   r   r   r   r   r   r;   r   build_query_expressionlowerDISPLAY_HEADERSrY   searchrE   rF   rI   rJ   r   
isinstancesixstring_typesprintpretty_print_formatconvert_time_elapsedprint_tablert   r   rk   #LIST_NOT_ALL_ITEMS_RETURNED_WARNINGrG   )r   r   r   Zdisplay_all_headersZnest_data_in_data_attributedisplay_dictionaryZstart_to_dictZend_to_dict
expressionheaderdisplay_datastart_search
end_searchZstart_formatZ
end_format
table_datar   Zhas_all_paramparamZnoticer-   r-   r1   r     s   
"


"


"
"


r   c                    s  g }t  tjr|dg | g nt  trt dkr'td d S t  d tjr?dgg} D ]}||g q5n|t  d tj	rft
 }||  D ]t|fdd|D  qRnUt  d tr }dd tdt d d D }|d| n5dgg} D ]}||g qn%t  trt
 }|| | fdd|D  n
td	  d S tt|j d S )
NZColumn1r   z1Command returned empty list, no table to display.c                    s   g | ]}  |d qS )r   )rY   r/   r   )itemr-   r1   r2     r3   zprint_table.<locals>.<listcomp>c                 S   s   g | ]}d  |qS )zColumn{})r;   )r/   Z
col_numberr-   r-   r1   r2     s    r   c                    s   g | ]} | qS r-   r-   r  )r   r-   r1   r2         z8Table format not supported for operation return type: {})r	  r
  r  appendlistr?   rE   rF   abcMappingbuild_table_headersr  rangeinsertdictr;   r  r   r   )r   r  rowZcolumn_headersr   r-   )r   r  r1   r    sF   


 

r  c                 C   sN   t  }t| tr| D ]}| D ]}|| qq
tt|S tt|  S r   )setr	  r  r   r   sorted)r   colsentryr   r-   r-   r1   r     s   
r   c                 C   s   t | tjr| S t | tjtjfr*| jstj| } t | tjr&| j	ddS | 	 S t | tj
r4| 	 S t | tjrDdd t| D S t | tjrQdd | D S t| dsX| S i }t| jD ]}t| |t}|turx|dd	}t|||< q`|S )
a  Helper to flatten models into dicts for rendering.

    The following conversions are applied:
        * datetime.date, datetime.datetime, datetime.time
          are converted into ISO8601 UTC strings
        * Underscores are replaced by hyphens in dictionary
          key only.
    T)sepc                 S   s   i | ]	\}}|t |qS r-   r  )r/   kvr-   r-   r1   
<dictcomp>8      zto_dict.<locals>.<dictcomp>c                 S   s   g | ]}t |qS r-   r+  )r/   r-  r-   r-   r1   r2   :  r  zto_dict.<locals>.<listcomp>swagger_types_r   )r	  r
  r  datetimetimetzinfopytzutclocalize	isoformatdater  r  	iteritemsIterablehasattrZiterkeysr0  getattrmissing_attrr   r  )r   as_dictr   valuer-   r-   r1   r     s0   

r  c                 C   s   t t| S )z9Returns a string of the model flattened as a dict, sorted)r  r  )modelr-   r-   r1   formatted_flat_dictI  s   rB  c                 C   s   t j| dddS )N   T)indent	sort_keys)r  dumps)dr-   r-   r1   r  N  s
   r  c                       t   fdd}|S )Nc              
      s  zOt |  d| jv rtdd| jd d| jv r(td| jd d| jv rB| jd rBtd}d| jd< |sB| 	   | g|R i | W d S  t
jy } zE|jd	krt|  t| jd
kro| j d
 nd}d| jv o}| jd tjk}t| jd|| jd | | jd r t|jd |jjd }~w tjy } z| jd r d}t|j|  t|d W Y d }~d S d }~w tjy } z| jd r؂ d}t|j|  t|d W Y d }~d S d }~w t
jy } z| jd r d}t|j|  d W Y d }~d S d }~w tj
jyH } zt j!"d| jd  | jd r6 d}d}	tj#|jj||	dd }~w tj
j$y } zZt j!"d| jd  | jd rc t%t|}
d}d}	|
r|
d}t|dkr|d }d| }d| d}	t&' }d |v rd!}d"}	tj#d#|
||	d$tj#|jj|
||	d$d }~w t(y } z| jd r d%}t|j|jjt|d& W Y d }~d S d }~ww )'Nmissing_required_parameterszMissing option(s) --{}.z, --missing_internal_parametersz^Unable to retrieve namespace internally. Please provide the namespace using the option "--{}".prompt_for_deletionz.Are you sure you want to delete this resource?Fi  r   r   r   r   r   r   z{usage}

Error: {details})usagedetailsz*{usage}

Error: Missing option --endpoint.)rL  ZNUM_CONN_FAILURESz$The connection to endpoint timed outzlIt looks like a connection timeout, please check your network setting or contact your network administrator.)r   troubleshooting_tipsz%The connection to endpoint timed out.r       rC  z;The connection to endpoint timed out while trying to reach zTry running curl z]. If the curl doesn't work, check your network setting or contact your network administrator.zSSL: CERTIFICATE_VERIFY_FAILEDzIt looks like you are missing some additional certificates for operation. run 'curl request_endpoint' to make sure you are able to call endpoint using curl.zIf you have a root certificate, either use --cert-bundle <path_to_cert_bundle_file> with CLI command or set REQUESTS_CA_BUNDLE env variable. i.e export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file on POSIX-compliant bash-like shell terminal.ZSSLException)request_endpointr   rN  z{exc}: {details})excrM  ))%load_context_obj_values_from_defaultsr   r   )RequiredValueNotInDefaultOrUserInputErrorr;   rD   3RequiredValueNotAvailableInternallyOrUserInputErrorrE   r   abortr   ZServiceErrorstatus9warn_if_token_present_in_profile_but_not_using_token_authr?   Zcommand_pathsplitr   r   warn_if_clock_skew_presentrY   ZServiceExceptionargs	__class__re   rI   r   	get_usager   Z/MissingEndpointForNonRegionalServiceClientErrorr   ZConnectTimeoutr   r   r   ZClientExceptionZRequestException*get_request_endpoint_from_exception_string	traceback
format_excr>   )r   r[  r   r@  	exceptioncommand_nameis_obo_userZtplr   rN  rQ  Zcurl_endpoint_splitZcurl_endpointtempfuncr-   r1   wrapped_callW  s   




 

*
*$



*z%wrap_exceptions.<locals>.wrapped_call	functoolswrapsrf  rg  r-   re  r1   wrap_exceptionsV  s   Prl  c                 C   s   |d u r|S t |tjs|S t|}|d u r|}zt|}W n/ tyN   zt|}t	|t
tfvr7t W n ttfyK   td|  Y nw Y nw |rVt|| S |S )NzParameter {!r} must be in JSON format.
For help with formatting JSON input see our documentation here: https://docs.cloud.oracle.com/iaas/Content/API/SDKDocs/cliusing.htm#ManagingCLIInputandOutput)r	  r
  r  load_file_contentsr  loadsrO   astliteral_evalr   r  r#  SyntaxErrorrI   r   r;   make_dict_keys_camel_case)parameter_nameZparameter_valuer   camelize_keysZjson_to_parser   r-   r-   r1   parse_json_parameter  s.   


ru  c                 C   s$  t | tjr| S t | tjst | tjs| S |r|}nt|}t | tjrd}|r>|d }|ddks<|t|d  vr>d}i }t	| D ]\}}t
|}	d }
|r|d ddkrl|d td|d d	d
}
n]|d t|d  vry|}
nPt|d  |d  }| }|g}t||d | }|r|| |D ].}|j D ]&\}}|	|kr|d |j| d
}
 n||krd}|d |j| d
}
 nqqt|||
d||r|	n|< qE|S t | tjrg }d }|r|d ddkr|d td|d dd
}| D ]}|t||d q|S d S )NTclassz	dict(str,r   moduleFzdict(zdict\(([^,]*), (.*)\)rC  )rw  rv  )rs  complex_parameter_typezlist[zlist\[(.*)\]r   )rx  )r	  r
  r  r  r  r;  0get_complex_type_definition_for_key_camelizationfindr   r:  r   camelizerp   matchgroup%get_possible_subtype_based_on_payloadr  attribute_mapitemsr0  rr  )Zoriginal_objrs  rx  Zcomplex_type_definitionrt  
class_nameZnew_dictr   r@  Zcamelized_keyZparam_type_to_passZcls_typeinstanceZpossible_instancesZpossible_subtype_instanceZunderscored_nameZcamelized_nameZnew_listZ	list_typer   r-   r-   r1   rr    sp   

 rr  c                 C   s~   | d u rd S |st jdd}n|}d }|r"|jr"d|jv r"|jd }|s&d S t| }|D ]}t||kr<||   S q-d S )NT)ZsilentZinput_params_to_complex_types)rE   r   r   r   r{  )rs  r   Zcurrent_contextZcomplex_type_definitionsZcamelized_param_namer   r-   r-   r1   ry  D  s"   



ry  c                 C   sH   t | dr"dd t|D }| |}tttt|d|}| S d S )Nget_subtypec                 S   s   i | ]
\}}t ||qS r-   )r   r{  )r/   r   r@  r-   r-   r1   r.  a  s    z9get_possible_subtype_based_on_payload.<locals>.<dictcomp>Zmodels)r<  r
  r:  r  r=  r   )Zdeclared_typerw  payloadZcamelized_top_level_keysZsubtype_name_of_input_dataZsubtype_of_input_datar-   r-   r1   r~  ]  s   

r~  c                 C   s,   | j D ]}|j|kr|  S qtd|)NzCould not find param {!r}.)r   rk   RuntimeErrorr;   )rt   
param_namer  r-   r-   r1   	get_paramg  s
   

r  c                 C   s    t | |j}|r|dd}|S )N
[required]r   )r  helpr   )rt   r  Zremove_required	help_textr-   r-   r1   copy_help_from_generated_codeo  s   r  c                 C   s   t | |}|jd}|r|jn|}t|dkr |r |dd}||r-t|dkr-d| nd }|r9dj||d}||r>dnd |_dS )z`Update help for the given parameter and command, either by replacing or adding to existing help.z [required]r   r   rO  z{help}

Example: {example})r  exampleN)r  r  ro   r?   r   r;   )rt   r  Zupdated_helpr  r  r  Zrequired_paramZcurrent_helpr-   r-   r1   update_param_helpv  s   
 r  c                 C   s   || _ tj|| _d S r   )r  rE   utilsZmake_default_short_helpZ
short_help)rt   r  r-   r-   r1   $override_command_short_help_and_help  s   r  c                 c   sJ    t | ds| V  dS t| jD ]\}}t|D ]}||_|V  qqdS )z8Returns a list of leaf commands under the given command.rl   N)r<  r
  r:  rl   collect_commandsparent)rt   r1  Z
subcommandZ
descendentr-   r-   r1   r    s   

r  c                    s&   dd  D   fddt | D S )z&Filter headers based on the whitelist.c                 S   s   g | ]}|  qS r-   r  )r/   xr-   r-   r1   r2     r  z)filter_object_headers.<locals>.<listcomp>c                    s&   i | ]\}}|   v r|  |qS r-   r  )r/   hr-  	whitelistr-   r1   r.    s   & z)filter_object_headers.<locals>.<dictcomp>)r
  r:  )r   r  r-   r  r1   filter_object_headers  s   r  c                 C   sX   | j ddr*t| j di tjdst|  tj| 	 | j
d t  d S d S )Nr  Fr   )color)r   rY   parse_booleanr   &CLI_RC_GENERIC_SETTINGS_USE_CLICK_HELPr   render_help_textrE   rF   Zget_helpr  rI   r   r   r  r@  r-   r-   r1   help_callback  s   
r  c                 C   sr   t jdd  }g }|D ]}|ds|| q| jddr5t| jdi tjds7t	
| | d S d S d S )Nr   r   r  Fr   )rI   argv
startswithr  r   rY   r  r   r  r   r  )r   r  r@  r[  Zfiltered_argsar-   r-   r1   group_help_callback  s   

r  z-?z-hz--helpzNFor detailed help on any of these individual commands, enter <command> --help.)is_flagr  expose_valueZis_eagerrs   c                 C   s2   | j d s| j d s|sd| j d< d S d S d S d S )N generate_full_command_json_inputgenerate_param_json_inputTrK  r   r  r-   r-   r1   confirmation_callback  s
   r  z--forcez4Perform deletion without prompting for confirmation.)r  rs   r  r     c                 C   s   t jd| t dS )Ni  )Zpublic_exponentkey_sizeZbackend)r	   Zgenerate_private_keyr   )r  r-   r-   r1   generate_key     r  c                 C   s`   | r%|rt |tjr|d}t|}nt }| jtjj	tj
j|dS |jtjj	tjjdS )z
    >>> private_key = generate_key(2048)
    >>> public_key = private_key.public()
    >>> serialize_key(public_key=public_key)
    >>> serialize_key(private_key=private_key)
    ascii)encodingr;   encryption_algorithm)r  r;   )r	  r
  r  encoder
   ZBestAvailableEncryptionZNoEncryptionZprivate_bytesZEncodingZPEMZPrivateFormatZPKCS8Zpublic_bytesZPublicFormatZSubjectPublicKeyInfo)r   
public_keyZ
passphraser  r-   r-   r1   serialize_key  s   
r  c              
   C   s`   z!t | d}t| }W d    |W S 1 sw   Y  |W S  ty/ } z|d }~ww )Nrb)r   r
   Zload_pem_public_keyr   r>   )Zpublic_key_file_pathZpublic_filer  r   r-   r-   r1   get_public_key_from_file  s   
r  c                    s    fdd}|S )Nc                    sp   d}j dd D ]}d ur|jvr| j || |d7 }q	 r+| j j d  r6| j j d  | S )Nr   r   )r   rk   r"  r  )Zextended_funcindexr  copy_from_json	copy_helpgenerated_commandparams_to_excluder-   r1   copy_params  s   z7copy_params_from_generated_command.<locals>.copy_paramsr-   )r  r  r  r  r  r-   r  r1   "copy_params_from_generated_command  s   r  c                 C   sN   d }t | tjr%t D ]\}}|  |r$|\}}||| fi |}q|S r   )r	  r
  r  FILE_LOAD_PREFIX_MAPr  r  r  )rZ   file_contentsprefixZfunction_specfunctionr   r-   r-   r1   rm    s   rm  c                 C   st   t jt j|t| d  }t j|std|| t	||}|
 W  d    S 1 s3w   Y  d S )Nz?The specified file '{}' did not exist  (Resolved to path: '{}'))rW   rZ   
expandvarsr[   r?   r   rI   r   r;   r   r   )r  rZ   mode	file_pathfr-   r-   r1   get_file  s    $r  zfile://r  r   c                    rH  )Nc                    s"   t |   | g|R i | d S r   )rS  )r   r[  r   re  r-   r1   rg  )  s   zEload_context_obj_values_from_defaults_decorator.<locals>.wrapped_callrh  rk  r-   re  r1   /load_context_obj_values_from_defaults_decorator(  s   r  c                 C   s  t | dtj t | dtj t | dtjdd t | dtj t | dtj t | dtjd	d t | d
tj d| jvsA| jd d u rFd| jd< d
| jvsR| jd
 d u rXtj| jd
< d| jv rn| jd smt| dtjd| jd< nt | dtj d| jv r| jd st| dtjd| jd< nt | dtj d| jv r| jd st| dtjd| jd< n	t | dtjdd d| jv r| jd st| dtjd| jd< nt | dtj d| jv r| jd st| dtjd| jd< d S d S t | dtjdd d S )Nr   r   r   zcert-bundle)r  rR   r   r  zgenerate-param-json-inputr   r  r   Fr  r  z generate-full-command-json-inputr   r   zrealm-specific-endpoint)$populate_dict_key_with_default_valuerE   STRINGr   r   ZOCI_CLI_AUTH_API_KEY$get_default_value_from_defaults_fileBOOL)r   r-   r-   r1   rS  6  sH   










rS  c                 C   s^   |r|}n|}|| j v rt| || j | d| j |< d S t| |||}|d ur-|| j |< d S d S NF)r   #coalesce_provided_and_default_valuer  )r   r   
param_typer  param_takes_multipleZparam_name_to_useZvalue_from_defaultr-   r-   r1   r  n  s   
r  c                 C   s   t | |}d }d}|r|j}|j}d }|r!|jr!t|jdkr!|}|r:||jkr8t| |tj	|}|d u r6|S |S |S |rA|r@|S n|d urG|S t| |||}	|	d urT|	S t
| }
|
tv rit|
 }|| |}|ri|S |rstd|d S )NFr   zMissing option "--{}".)get_param_from_click_contextr   Zmultipler  r?   Zsecondary_optsr   r  rE   r  get_previous_commandSERVICE_FUNCTIONS_TO_EXECUTEr   rT  r;   )r   r  original_valueis_requiredZparam_from_contextr  r  Z
flag_paramZfrom_default_fileZvalue_from_defaults_fileprev_commandr  r@  r-   r-   r1   r  |  sD   


r  c                 C   s"   d }	 | j s		 |S | jj}| j } qr   )r  rt   rk   )r   r  r-   r-   r1   r    s   r  c                 C   s.   | j jD ]}d|}||jv r|  S qd S )N--{})rt   r   r;   opts)r   r  r  Zlong_param_namer-   r-   r1   r    s   

r  c                 C   s`  d| j vrt| | j d< | j d }|g}d|}|| j d v rG| j d | D ]}|dr8||dd   q'|drF||dd   q't| |}|r|jD ]/}	|	drj|	dd  |vri||	dd   qQ|	dr|	dd  |vr||	dd   qQ|D ]*}
|D ]%}|
tkr|}n|
d | }|| j d	 v rt| j d	 | ||    S qqd S )
Nparameter_lookup_heirarchyr  Zparameter_aliasesz--rC  r   r   rj   Zdefault_values_from_file)	r   'get_param_lookup_heirarchy_from_contextr;   r  r  r  r   PARAM_LOOKUP_HEIRARCHY_TOP_LEVELconvert_value_from_param_type)r   r  r  r  r  Zpossible_param_namesZkey_for_alias_checkaliasZparam_from_click_contextoZheirarchy_entryZparam_name_to_checkZ
target_keyr-   r-   r1   r    sB   








r  c                 C   s   ddl m} | d u r| S t| tjrtj| }n| }|r"t||S |d u r(|S |t	j
kr1t|S |t	jkr>t| tv S |t	jkrGt|S |t	jkrPt|S ||kr[||d d S |S Nr   )CLI_DATETIME)oci_cli.custom_typesr  r	  r
  r  rW   rZ   r  0convert_value_from_param_type_accepting_multiplerE   r  r   r  r  (DEFAULT_FILE_CONVERT_PARAM_TRUTHY_VALUESFLOATfloatINTintconvert)r@  r  r  r  Zexpanded_valuer-   r-   r1   r    s*   




r  c                 C   s   ddl m} t| tjst| tjr| S | gS |  }g }|D ]T}| }|rs|d u s0|t	j
kr6|| q|t	jkrE|| tv  q|t	jkrR|t| q|t	jkr_|t| q||krn|||d d  q|| q|S r  )r  r  r	  r
  r  r  r;  rA   r.   rE   r  r  r  r  r  r  r  r  r  r  )r@  r  r  Zsplit_paramZconverted_valuesspZstripped_valr-   r-   r1   r    s2   




r  c                 C   s   g }| j }|d ur!|j d ur||j n|t |j }|d us	|  || j g }|d }|d || |D ]}|tkrF|}n|d | }|| q=|  |S )Nr   rj   )r  r  Z	info_namer  reverserm   )r   Zordered_command_chainr  r  r  rb  r-   r-   r1   r  8  s*   



r  c                 C   s:   t | |d |}|rtj|}t|}||d | S d S r   )r  rW   rZ   r[   rE   Filer  )r   r  Zfile_open_moder  Zpath_from_default_fileZclick_file_typer-   r-   r1   'get_click_file_from_default_values_fileh  s   
r  c                    s"   t  fdd| jD }||_d S )Nc                 3   s    | ]
}|j  kr|V  qd S r   )rk   )r/   optionoption_namer-   r1   	<genexpr>t  s    z'override_option_help.<locals>.<genexpr>)nextr   r  )rt   r  Zhelp_overrider  r-   r  r1   override_option_helps  s   
r  c              
   C   s>  |sdg}nt jdrdd t dD }ndg}|D ]y}t j|r/t jt j|ds0qt j|dd}t j|sCt | dd t |D D ]G}tt j||d3}t|	 }|d	 }	t
t|  t|	  } |d
 }
t
t| t|
  }W d    n1 sw   Y  qMq| t | |fS )Nrj   servicesc                 S   s   g | ]	}t jd |qS )r  )rW   rZ   rD   )r/   rn   r-   r-   r1   r2     r/  z6update_command_names_to_spec_names.<locals>.<listcomp>docszdoc-genc                 S   s   g | ]	}| d r|qS )z	_doc.json)ro   )r/   doc_jsonr-   r-   r1   r2     r/  r   rootCommandToSpecNamespecToLinkTextAndUriItems)rW   rZ   isdirlistdirrD   mkdirr   r  rn  r   r#  r  r  update*update_list_of_command_names_to_spec_names)command_names_to_spec_nameslink_replacementsgenerate_allZservice_dir_listZservice_dirZpath_to_jsonr  Zdoc_json_fileZjson_from_filer  r  r-   r-   r1   "update_command_names_to_spec_namesx  s2   "

	r  c                 C   sf   i }t |||\}}| tvr-d}ttD ]\}}||r,|| kr,||ddd} q|| d S )Nz_root_group.command_namer   r1  r   )r  r  r
  r:  rr   ro   r   rY   )rb  r  r  r  r1  ZGROUP_NAME_OVERRIDE_SUFFIXr   r@  r-   r-   r1   get_spec_name_from_command_name  s   
r   c              
   C   s  zzt |}tjj|| d| dd}W n! ty7 } ztjjd| d| dd}W Y d }~nd }~ww t|jd }t	t
j|}t	 }	t||	  }
|
td krtdj|	|td}tjtj|d	d
tjd W d S |rtjd| W d S W d S  ty   Y dS w )Nr   r   )r   r   r   ZDate<   zWARNING: Your computer time: {computer_time} differs from the server time: {server_time} by more than {threshold} minutes. This can cause authentication errors connecting to services.)computer_timeserver_time	thresholdr7   r8   r9   ZNUM_AUTH_FAILURESF)r   r   r   Zendpoint_forrY   r>   r   headr   arrowdateutilparserparseutcnowmathfabstotal_seconds$CLOCK_SKEW_WARNING_THRESHOLD_MINUTESr;   rE   rF   rG   rI   rJ   r   r   r   )r   rb  r   rc  r   r   r   Zserver_date_headerr  r  Zabsolute_skew_in_secondsrS   r-   r-   r1   rZ    sB   
 rZ  c                 C   sN   | j dd}|r#| j dtjkr%tjtjtddtj	d d S d S d S )Nr   r   r   r7   r8   r9   )
r   rY   r   r   rE   rF   rG   +TOKEN_PRESENT_BUT_NOT_USED_FOR_AUTH_WARNINGrI   rJ   )r   Zsecurity_tokenr-   r-   r1   rX    s   rX  c                   C   s   t jdkp	t jdkS )Nwin32cygwin)rI   platformr-   r-   r-   r1   r\     r   r\   c                 C   s(   | j d rt| | j d }t|S d S )Nr   )r   resolve_jmespath_queryjmespathcompile)r   search_pathr-   r-   r1   $get_jmespath_expression_from_context  s   

r  c                 C   sR   | dr'|tdd  }|| jd v r| jd | S td|| jd |S )Nzquery://Zcanned_queriesz>Query {} is not defined in your OCI CLI configuration file: {}Zcli_rc_file)r  r?   r   rE   Z
UsageErrorr;   )r   r   Z
query_namer-   r-   r1   r    s   
r  c                 C   s    | r| S t t dd S )Nr   r   )r   r   r   r   r   )r   r-   r-   r1   use_or_generate_request_id  s   r  c                 C   s&   t sdS t| tr| S t |  tv S r  )r   r	  boolr  r  r  r-   r-   r1   r    s
   
r  c                 C      t | ||dS NT_coalesce_paramr  r-   r-   r1   handle_required_param     r  c                 C   r  r  r  r  r-   r-   r1   handle_optional_param  r  r   c                        fdd}|S )Nc                    s   t | || dS )N)explicit_defaultr  r  r   requiredr-   r1   internal_handle_param  r  z8handle_param_with_default.<locals>.internal_handle_paramr-   )r$  r   r%  r-   r#  r1   handle_param_with_default  s   r&  c                 C   sH  |d ur
|dkr
|S |j dd}zId }t|jtjjr*|d u r*t| ||jj|}nt	| |||}|d u rX|d urXt|jtjjrV|d u rVt
j|}|j|d | }|W S |}|W S  tjy   |d urj| Y S d| jvrtg | jd< | jd | Y d S  tjy   |d ur| Y S d| jvrg | jd< | jd | Y d S w )Nr-   r1  r   rJ  rI  )rk   r   r	  r   rE   typesr  r  r  r  rW   rZ   r[   r  r   rU  r   r  rT  )r   r  r@  r$  r"  Zhyphenated_param_nameZexplicit_default_pathr-   r-   r1   r    s8   



r  c                     r!  )a  Attaches an option to the command.  All positional arguments are
    passed as parameter declarations to :class:`Option`; all keyword
    arguments are forwarded unchanged (except ``cls``).
    This is equivalent to creating an :class:`Option` instance manually
    and attaching it to the :attr:`Command.params` list.

    :param cls: the option class to instantiate.  This defaults to
                :class:`Option`.
    c                    s   d }d v r4 d } d= d v r4d v r4 d r4 d  dr"dnd}d d |dt| d< d}d	 v ra d	 rad v rad
}d v r^ d  drQdnd}d d |d d<  d	= d v ritd dt|| tji  | S )Nr   r  Zshow_defaultrO  r   z{}{}{}z[default: {}]Fr$  Tr  rs   zMCannot specify callback function for option, conflicts with default callback.)ro   r;   r   rO   
setdefaultr&  rE   r  )r  r   Zspacerr$  attrsparam_declsr-   r1   	decorator=  s$    zoption.<locals>.decoratorr-   )r+  r*  r,  r-   r)  r1   r  3  s   
r  c                 C   s4   t tjdrtjjd ur| tjjS | t S )Nr  )r<  rI   stdoutr  decodegetdefaultencoding)rR   r-   r-   r1   r@   _  s   r@   c                 K   s  |d u r| di |S d}|}d }g }i }d}	d}
|r|dks!|
sd}
|r-t |||d< nd|v r:t |d ||d< | di |}t|jtspd}	t|jj D ]}||ddg 	t
|j| |tt
|j|8 }qQn||j |t|j8 }|jd ur|j|d< |j}|r|dks!|
r!|	r|}t| D ]*}|dkrtt|| ||< || d | ||< |t|| 8 }q||d  q|	rt|j|j||j}|S t|j|j|d | |j}|S 	NTFr   limitr1  r   pager-   )minr	  r   r  r&  r  r   r(  r   r  r=  r?   extend	next_pagehas_next_pager   from_iterablerm   r   rW  r   requestlist_func_refZrecord_limitZ	page_sizefunc_kwargskeep_paginatingZremaining_items_to_fetchcall_resultaggregated_resultsaggregated_results_dictwrapped_array_paginationZfetched_at_least_oncer   Zlimit_itemsfinal_responser-   r-   r1   list_call_get_up_to_limitf  s\   "

	rB  c                 K   s  d}d }g }i }d}	d}
d}d}|r#|j d rt||j d< t|| d }zz|r| di |}t }t|jtsXd}	t|jj	 D ]}|
|ddg t|j| qCn|rgt||
|||}|rf|}n||j |jd urw|j|d< |j}|r|j d	 rt }ttj d
t|
t||   tdt|
 d  |
d }
|s)W n ty } z|}|d }~ww W |	 D ]}tt|| ||< q|r|r|r|j d	 rtt|ddtjd n|rtt|dd n|std t || |}d }d }d }|r|j!}|j"}|j#}t$||||}|S nn|	 D ]}tt|| ||< q!|r|rM|rM|j d	 rMtt|ddtjd n|r[tt|dd n|sbtd t || |}d }d }d }|r{|j!}|j"}|j#}t$||||}|     Y S w |r|j d	 rtdtjd |}d|v r|d % dkrd}d|v r|d % }t|dd |dkd}n!|d % dkrd}d|v r|d % }t|dd |dkd}|	rt$|j!|j"||j#S t$|j!|j"||j#S )NTFr   r   r  r1  r   r2  r   /time elapsed evaluating logic after page {}: {}(total memory usage after evaluating page: 'r*   r9   nullr   sort_byDISPLAYNAMEASC
sort_orderc                 S   
   t | dS Ndisplay_nameretrieve_attribute_for_sortr   r-   r-   r1   <lambda>     
 z+list_call_get_all_results.<locals>.<lambda>DESCr   r  TIMECREATEDc                 S   rL  Ntime_createdrO  rQ  r-   r-   r1   rR    rS  r-   )&r   r  stream_headerr   r	  r   r  r&  r  r   r(  r   r  r=  stream_pager4  r5  r6  r   r   r   r   r   r;   r   r   r>   r   r7  r  rI   rJ   stream_footerrW  r   r8  r   r   r:  r   is_jsonZstream_outputr;  r<  r=  r>  r?  r@  
page_indexZhas_stream_dataprevious_page_has_datar   startr   endr   Zpost_processed_resultsrW  r   r8  rA  Zsort_directionr-   r-   r1   list_call_get_all_results  s   

$

(




	
rb  c                 K   s  |d u r| di |S d}|}d }g }i }d}	d}
|r|dks!|
sd}
|r-t |||d< nd|v r:t |d ||d< | di |}t|jtsd}	t|jj D ]3}tt|j|trx||	ddg 
t|j| |tt|j|8 }qQt|j|||	dd< qQn||j |t|j8 }|jd ur|j|d< |j}|r|dks!|
r!|	r|}t| D ]1}t|| tr|dkrtt|| ||< || d | ||< |t|| 8 }q||d  q|	rt|j|j||j}|S t|j|j|d | |j}|S r0  )r3  r	  r   r  r&  r  r   r=  r(  r   r  r?   r4  r5  r6  r   r7  rm   r   rW  r   r8  r9  r-   r-   r1   #artifacts_list_call_get_up_to_limit	  sh   "


rc  c                 K   sN  d}d }g }i }d}	d}
d}d}|r#|j d rt||j d< t|| d }zz|r| di |}t }t|jtsod}	t|jj	 D ])}tt
|j|tra||ddg t
|j| qDt
|j|||dd< qDn|r~t||
|||}|r}|}n||j |jd ur|j|d< |j}|r|j d	 rt }ttj d
t|
t||   tdt|
 d  |
d }
|s*W n ty } z|}|d }~ww W |	 D ]}t|| trtt|| ||< q|r?|r|r|j d	 rtt|ddtjd n|rtt|dd n|std t || |}d }d }d }|r6|j!}|j"}|j#}t$||||}|S nv|	 D ]}t|| trYtt|| ||< qD|r|rx|rx|j d	 rxtt|ddtjd n|rtt|dd n|std t || |}d }d }d }|r|j!}|j"}|j#}t$||||}|     Y S w |r|j d	 rtdtjd |}d|v r|d % dkrd}d|v r|d % }t|dd |dkd}n!|d % dkrd}d|v r|d % }t|dd |dkd}|	rt$|j!|j"||j#S t$|j!|j"||j#S )NTFr   r   r  r1  r   r2  r   rC  rD  rE  rF  r*   r9   rG  r   rH  rI  rJ  rK  c                 S   rL  rM  rO  rQ  r-   r-   r1   rR    rS  z5artifacts_list_call_get_all_results.<locals>.<lambda>rT  rU  rV  c                 S   rL  rW  rO  rQ  r-   r-   r1   rR    rS  r-   )&r   r  rY  r   r	  r   r  r&  r  r   r=  r(  r   r  rZ  r4  r5  r6  r   r   r   r   r   r;   r   r   r>   r   r7  r  rI   rJ   r[  rW  r   r8  r   r   r\  r-   r-   r1   #artifacts_list_call_get_all_resultsN  s   









	
rd  c              
   C   s   d }t  }z| |}W n ty% } zt|tjd W Y d }~nd }~ww |jd r?t  }tt	j
 dt||   |S )Nr9   r   r  )r   r  r>   r  rI   rJ   r   r   r   r   r   r   r;   r   )r  inputr   Zsearch_datar  r   r  r-   r-   r1   execute_query  s   
"rf  c                 C   6   | r|r|j rd|j v r|j d rd S td d S d S )Nr  z
{ "data": r   r  r]  r   r-   r-   r1   rY    
   rY  c                 C   rg  )Nr  }rh  ri  r-   r-   r1   r[    rj  r[  c           
      C   sZ  t d}| rd|jv r5i }|j|d< |r,|jr,d|jv r,|jd r,t|jd ||}n|j}t|}n1i }t|j|d< |r[|jr[d|jv r[|jd r[t|jd ||}t|}n	t|j}t|}|}|	|}	|	r|dkr|rt
d t
|	d nt
|	d|	d nt
|	d|	d d}nt
|j |jd u r| r|rt
d	 |S )
Nz(^\s*\[)([\s\S]*?)(}\s*\]$)r   r   r  r   z},rC  Tz}])rp   r  r   r   rf  r  rF  r  r  r  r  r}  r5  )
r]  r^  r=  r   r_  json_page_matcherr  r  	json_data
page_partsr-   r-   r1   rZ    sB   







rZ  c                 C   s   t d}i }tt|j||d< t|}||}|rG| dkr:|r.td t|d nt|d|d nt|d|d d}|jj	d u rW|rWtd td |S )	Nz%(^[\s\S]*\[\s)([\s\S]*?)(}\s*\]\s*}$)r   r   z    },rC  Tz    }z  ],)
rp   r  r  r=  r   r  r  r  r}  Znext_start_with)r^  r=  r_  Zdata_keyrl  r  rm  rn  r-   r-   r1   stream_page_object
	  s$   

ro  c              
   C   s~   d }t | | jd }zt|}W |S  tjjy> } zd|jv r9tjdt	j
d tjdt	j
d tjdt	j
d  d }~ww )Nr   zUnknown tokenzTIf a key name has any characters besides [a-z, A-Z, 0-9, _], it needs to be escaped.r9   zIn bash or similar "NIX" based shells used in "NIX" environment, escaping can be done byusing double quotes inside single quotes.
e.g. --query 'data[*]."display-name"'zIf using PowerShell in Windows environment, escaping can be done by using double quoteswith double escape character \`.
e.g. --query data[*].\`"display-name\`")r  r   r  r  r   Z
LexerErrorr   rE   rF   rI   rJ   )r   r  r  r   r-   r-   r1   r  +	  s&   
r  c                 K   s:   t | |}|d ur|S d|v r|d S |dkrtjjS dS )Nr   rX  r   )r=  r2  r3  )
target_objZattribute_namer   Zgetattr_resultr-   r-   r1   rP  A	  s   
rP  c                 C   s<   d }zt | j}d|vrW d S W |d S  ty   Y d S w )NZtenancy)r   r   r>   )r   r   r-   r-   r1   get_tenancy_from_configO	  s   
rq  c                 C   s   t tdd r"| }d}|dkr|d? }|d7 }|dks| j|dddS g }| r4t| d\} }|| | s&|  tjd	t| g|R  S )
Nto_bytesr      r   bigF)signed   z%sB)	r=  r  rr  divmodr  r  structpackr?   )val	remainingZbyte_lengthbuf	remainderr-   r-   r1   bytes_from_intZ	  s   
r~  c                 C   s
   |  dS )Nzutf-8)r.  )r@  r-   r-   r1   force_unicoden	  r   r  c                 C   s   t | ddS )N   =    )base64urlsafe_b64encoder   )re  r-   r-   r1   base64url_encoder	  r  r  c                 C   s0   | dk rt dt| }t|dkrd}t|S )Nr   zMust be a positive integer    )rO   r~  r?   r  )rz  Z	int_bytesr-   r-   r1   to_base64url_uintv	  s   r  c                 C   s4   |   }dtt|jtt|jdd}t|S )NZRSAZIgnored)Zktynr   Zkid)Zpublic_numbersr  r  r  r   r  rF  )Zkey_objnumbersr   r-   r-   r1   to_jwk	  s   
r  c           	   
   C   s   z3t | d$}t}td}|rt}|r||||}n||||\}}W d    n1 s-w   Y  W n0 tyE   td td Y n t	yc } ztdt
|  td W Y d }~nd }~ww tt|dd  }|s~|dt
t| 7 }|S )	Nr  OCI_CLI_FIPS_LIBCRYPTO_FILEz!Cannot open file to generate hashr   z*Encountered exception when generating hashhexr  r   )r   checksum_hashlibrW   getenvchecksum_fipsr   r  rI   r   r>   r   codecsr  r.  r.   r?   )	r+   no_multipartmar  Zchecksum_funcfips_libcrypto_fileZmultipart_hash	hash_listr   r-   r-   r1   verify_checksum	  s0   
	r  c                 C   sR   t  }|r||   | S dd |jd D }|d| || fS )Nc              
   S   .   g | ]}t t t|d  d dqS Zopc_md5r  r  r.  r  r  	b64decoder.   r/   partr-   r-   r1   r2   	     . z!checksum_fips.<locals>.<listcomp>partsr  )r   md5r  r   	hexdigestmanifestrD   )r  r  r  mr  r-   r-   r1   r  	  s   r  c                 C   sJ   dd l }|r||   S dd |jd D }||d| fS )Nr   c              
   S   r  r  r  r  r-   r-   r1   r2   	  r  z$checksum_hashlib.<locals>.<listcomp>r  r  )hashlibr  r   r  r  rD   )r  r  r  r  r  r-   r-   r1   r  	  s   r  c                 C   s8   | d| v rdnd }||krdnd}d||f ||kfS )Nzopc-content-md5zopc-multipart-md5matcheszdoes not matchzmd5 checksum %s [Local: %s]r-   )Zresponse_headersZchecksumZserver_hashmatch_stringr-   r-   r1   get_checksum_message	  s   r  c                 C   s   | dk rdS t | S )NgMbP?z<1ms)r   )Ztime_elapsedr-   r-   r1   r  	  s   r  c                 C   sT   t jD ]}t j| tjvrt j| t jkr| d rq dS qt jtjv p)t jtjv S )Nr   F)r   ZOCI_CONFIG_REQUIRED_VARSrW   rX   ZOCI_CLI_REGION_ENV_VARZOCI_CLI_KEY_FILE_ENV_VARZOCI_CLI_KEY_CONTENT_ENV_VAR)r   Zrequired_keyr-   r-   r1   r   	  s   
r   c                  C   s    t tj} t| d | d< | S )Nr   )r#  r   ZDEFAULT_CONFIGZ_as_bool)Zempty_configr-   r-   r1   r   	  s   
r   c                  C   sb   t jdddr)zt  ddlm}  | W S  tjy(   t d t d Y nw ddlm	} |S )	NzGDo you want to create your config file by logging in through a browser?Tr   r   )bootstrap_oci_cliz*ERROR: Could not locate a runnable browserz2Switching to browserless config file setup process)generate_oci_config)
rE   r   
webbrowserrY   Zoci_cli.cli_setup_bootstrapr  ErrorrF   Zoci_cli.cli_setupr  )r  r  r-   r-   r1   r   	  s   
r   c                 C   s`   t t| t< ttjv rtnd}ttjv r&t	}t
tjv rt}nttjv r&t}| t  |7  < d S )Nr   )ORACLE_PYTHON_VERr;   r   r   OCI_CLI_CONTAINER_IMAGErW   rX   "OCI_CLI_CONTAINER_IMAGE_USER_AGENTr&   OCI_CLI_INTERACTIVE_USER_AGENTr'   )OCI_CLI_INTERACTIVE_CLOUDSHELL_USER_AGENT.OCI_CLI_INTERACTIVE_CONTAINER_IMAGE_USER_AGENT)r   Zagentr-   r-   r1   r   	  s   


r   c                 C   s   t |  t|  d S r   )rW   makedirs"apply_user_only_access_permissions)dirnamer-   r-   r1   create_directory	  s   
r  c              
   C   s  t j| std| t rt jd }t jd }t jd }|r'|d | }d}d}zt j| ritj	dj| dtj
d	 ztj	d
j| |||dtj
d	 W nY tjyh   tj	d
j| |||dtj
d	 Y nDw t | rrtdtj	dj| dtj
d	 ztj	dj| |||dtj
d	 W n tjy   tj	dj| |||dtj
d	 Y n
w W d S W d S W d S W d S  tjy } ztdj| t|d t|j W Y d }~d S d }~ww t j| rt | tjtjB  d S t | tjtjB tjB  d S )NzDFailed attempting to set permissions on path that does not exist: {}USERNAMEZ
UserDomain\z*S-1-5-32-544z	*S-1-5-18zicacls "{path}" /reset)rZ   )rJ   zaicacls "{path}" /inheritance:r /grant:r "{username}:F" /grant {admin_grp}:F /grant {system_usr}:F)rZ   username	admin_grp
system_usrzJFailed attempting to set permissions on existing folder that is not empty.z~icacls "{path}" /inheritance:r /grant:r "{username}:(OI)(CI)F"  /grant:r {admin_grp}:(OI)(CI)F /grant:r {system_usr}:(OI)(CI)FzJError occurred while attempting to set permissions for {path}: {exception})rZ   ra  )rW   rZ   r   r  r;   r\   rX   r   r<   r=   STDOUTCalledProcessErrorr  r  r   rI   r   
returncodechmodr]   S_IRUSRS_IWUSRS_IXUSR)rZ   r  Z
userdomainZuserWithDomainr  r  exc_infor-   r-   r1   r  
  sL   


""
""r  exception_stringc                 C   s.   zt d| }|dW S  ty   Y d S w )NzRequest Endpoint:(.*)/nr   )rp   r  r}  r>   )r  rQ  r-   r-   r1   r^  1
  s   r^  c                 C   s:   | j d urt| j  d  td|    ttj d S )Nr6   z
Error: %s
)r   r  r]  Zformat_messager   Z"INTERACTIVE_CLI_SUGGESTION_MESSAGE)r   r-   r-   r1   update_click_help_message9
  s   
r  c                   @   s   e Zd Zdd ZdS )CommandExamplec                 C   s*   |r|r|s
t d|| _|| _|| _d S )Nz Cannot pass empty or None values)rO   descriptionrL  rR   )r   r  rL  rR   r-   r-   r1   r   B
  s
   
zCommandExample.__init__Nr   r-   r-   r-   r1   r  @
  s    r  c                   @   s   e Zd ZdddZdS )AutoCommandExampler   c                 C   s   || _ || _d S r   )
dependencycomplex_param_msg)r   r  r  r-   r-   r1   r   L
  s   
zAutoCommandExample.__init__N)r   r   r   r-   r-   r-   r1   r  J
  s    r  )rx   )T)FTr  )NNr   )F)FN)r  )NNNr  )FF)NFF)
__future__r   r_  r  ro  rE   r2  Zdateutil.parserr  ri  r   r  r  r  r   rW   os.pathr5  rp   r
  r]   r<   rI   r   rx  r  loggingZoci_cli.formattingr   	itertoolsr   Zterminaltablesr   Ztimeitr   r   Zoci_cli.utilr   r  r  Zcryptography.hazmat.backendsr   Z)cryptography.hazmat.primitives.asymmetricr	   Zcryptography.hazmat.primitivesr
   oci_clir   Zoci_cli.cli_clientsr   r   r   r   r   Z	oci.retryr   r   Zoci._vendorr   Zoci_cli.versionr   r   r   r   r   r   collections.abcr  r  objectr>  r  rr   r   Z!SUBCOMMAND_TO_SERVICE_INIT_MODULEr  ZGENERIC_JSON_FORMAT_HELPr  r  r  r  r;   r   r  r&   r'   r  r   r  r  r  r  r  	getLoggerre   r   
addHandlerNullHandlersetLevelDEBUGr)   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  rB  r  rl  ru  rr  ry  r~  r  r  r  r  r  r  r  r  r  help_optionZhelp_option_groupr  Zconfirm_delete_optionr  r  r  r  rm  r  r  r  rS  r  r  r  r  r  r  r  r  r  r  r  r   rZ  rX  r\   r  r  r  r  r  r   r&  r  r@   rB  rb  rc  rd  rf  rY  r[  rZ  ro  r  rP  rq  r~  r  r  r  r  r  r  r  r  r  r   r   r   r   r  r  r   r^  r  r  r  r-   r-   r-   r1   <module>   s~  	M	$)c[9X/)U2g
		8>	%!$0 
+,@cEj
3!
-
