o
    :FdU                     @   s  d dl Z d dlmZ d dlmZmZmZ d dlmZ dZ	g dZ
ee ddrHee jZeeZd	ev r>eed
ddZneeddddZn	eedd Zdev sYdev rced ed Zn#d
ev rqed ed Zned eedd Ze jed  e je eee	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 ))    N)getsourcefile)listdirpathenviron)service_mappingservices)zraw-requestZsessionsetupfrozenFbuildliboci_clizdynamic_loader.pyLibzsite-packagesc                   C   s   dS Nr    r   r   r   :usr/lib/python3.10/site-packages/oci_cli/dynamic_loader.py<lambda>   s    r   zdist-packagessrcc                   C   s    dt v r	t  dS ttj dS )z
    Loads services required for the currently executing command.

    This includes loading the necessary services for an autocomplete
    invocation.
    
COMP_WORDSN)r   cli_autocompleteload_service_from_commandsysargvr   r   r   r   %load_required_services_for_invocation+   s   
r   c                  C   s   t d  } t| dkrt  td d S t| dkr7| d ds3tD ]}|| d r2t| q%d S d S t| dkrCt	|  d S d S )Nr         -)
r   splitlencomplete_top_level_commandsr   exit
startswithr   load_servicer   )wordsservicer   r   r   r   8   s   r   c                  C   s*   t ttt  } | D ]}t| qd S N)sortedNON_SERVICE_TOP_LEVEL_COMMANDSlistr   keysprint)Zall_top_level_commandscommandr   r   r   r   M   s   
r   c                 C   s$   | D ]}|t v rt|  d S qd S r$   )r   r!   )r*   argr   r   r   r   S   s   r   c                 C   s2   | t v rtttt |  d t |  d  d S d S r   )r   load_service_modulesr   joinservices_dirr#   r   r   r   r!   Z   s   &r!   c                 C   s   t tt| |  d S r$   )r,   r   r-   r.   r/   r   r   r   load_service_dir_   s   r0   c                  C   s.   dd t tD D ]} ttt| |  q	d S )Nc                 S   s"   g | ]}t t t|r|qS r   )r   isdirr-   r.   .0dirr   r   r   
<listcomp>d   s   " z%load_all_services.<locals>.<listcomp>)r   r.   r,   r   r-   r/   r   r   r   load_all_servicesc   s   r6   c                 C   sb   t | d}t |r-dd tt|D D ]}tt |||| tt |||| qd S d S )Nr   c                 S   s   g | ]}d |v r|qS )r   r   r2   r   r   r   r5   k   s    z(load_service_modules.<locals>.<listcomp>)r   r-   r1   r%   r   load_generatedload_extended)Zservice_dirr#   modulesmodr   r   r   r,   h   s   
r,   c                 C   s^   t | d}t |r+tt|D ]}d|vr*|dr*tdj|||d d d qd S d S )NZ	generated__.pyz..{service}.src.{mod}.generated.{generated_mod})r#   r:   Zgenerated_mod)r   r-   r1   r%   r   endswithload_moduleformat)mod_dirr#   r:   Zgenerated_dirfiler   r   r   r7   q   s   
r7   c                 C   sV   t t| D ]"}tt| |r(d|v r(|dr(tdj|||d d d qd S )Nextendedr<   z#.{service}.src.{mod}.{extended_mod}r=   )r#   r:   Zextended_mod)r%   r   r   isfiler-   r>   r?   r@   )rA   r#   r:   rB   r   r   r   r8   z   s
   $r8   c                 C   s   t t|   d S r$   )
__import__ALL_SERVICES_DIR)Zmod_pathr   r   r   r?      s   r?   )#r   inspectr   osr   r   r   Zoci_cli.service_mappingr   rF   r&   getattrdirname
executableZdatadirlibdirr-   Zthis_file_pathabspathrindexZpython_cli_root_dirindexappendr.   r   r   r   r   r!   r0   r6   r,   r7   r8   r?   r   r   r   r   <module>   s@   
		