B
    `Q&                 @   s  d Z ddlmZmZmZ e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mZmZmZmZmZmZmZ dd	lmZmZmZ dd
lmZm Z m!Z!m"Z" ddl#m$Z$ i Z%dddZ&dd Z'dd Z(dd Z)dddZ*G dd dZ+G dd deZ,dd Z-dS ) zJMiscellaneous utility functions and classes specific to ansible cli tools.    )absolute_importdivisionprint_functionN   )types)SOFT_RLIMIT_NOFILE)write_text_file)	common_environmentdisplayfind_pythonApplicationErrorANSIBLE_LIB_ROOTANSIBLE_TEST_DATA_ROOTANSIBLE_BIN_PATHANSIBLE_SOURCE_ROOTget_ansible_version)create_temp_dirrun_command
ResultType)IntegrationConfigPosixIntegrationConfigEnvironmentConfigCommonConfig)data_contextTc             C   sV  t  }|d }|ttjj s0ttjj | }|s<|  }| jsZtj|sZt	d| t
tt| jrt|rtdd nddddddd|ddt| d|d	d
d}t| tr| jr|t
tjtddd t| tr|t
dd || | jr|t
dtjtjjdd t jjr8|t
t jjjd t jjrR|t|  |S )zx
    :type args: CommonConfig
    :type color: bool
    :type ansible_config: str | None
    :rtype: dict[str, str]
    PATHzConfiguration not found: %sz%struefalseerrorz	/dev/nullz/bin/catZ100z0.1)Z#ANSIBLE_PYTHON_MODULE_RLIMIT_NOFILEZANSIBLE_FORCE_COLORZANSIBLE_FORCE_HANDLERSZANSIBLE_HOST_PATTERN_MISMATCHZANSIBLE_INVENTORYZANSIBLE_DEPRECATION_WARNINGSZANSIBLE_HOST_KEY_CHECKINGZANSIBLE_RETRY_FILES_ENABLEDZANSIBLE_CONFIGZANSIBLE_LIBRARYZANSIBLE_DEVEL_WARNING
PYTHONPATHZPAGERr   Z"ANSIBLE_WORKER_SHUTDOWN_POLL_COUNTZ"ANSIBLE_WORKER_SHUTDOWN_POLL_DELAYZinjectorzansible-connection)ZANSIBLE_CONNECTION_PATHz,/set/ansible_python_interpreter/in/inventory)ZANSIBLE_PYTHON_INTERPRETERz	debug.log)ZANSIBLE_DEBUGZANSIBLE_LOG_PATH)ANSIBLE_COLLECTIONS_PATH) r	   
startswithr   ospathpathsepZget_ansible_configexplainexistsr   dictstrr   colorget_ansible_python_path
isinstancer   Zcoverageupdatejoinr   r   debugr   ZLOGSnamer   content
collectionrootZ
is_ansibleconfigure_plugin_paths)argsr(   Zansible_configenvr"   ansible r6   R/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/ansible_util.pyansible_environment2   sT    


r8   c                s   t | tsi S tjtdd| j}tj|d}t|d}tj|d dddd	d
ddddddddddg}tdd |D }|jdddd |t fdd|	 D  tdd |	 D }|S )zTReturn environment variables with paths to plugins relevant for the current command.testZsupportcollections)r   ZpluginsactionZbecomecachecallbackZcliconf
connectionfilterZhttpapiZ	inventorylookupZnetconfZstrategyZterminalvarsc             s   s   | ]}d | |fV  qdS )z
%s_pluginsNr6   ).0r.   r6   r6   r7   	<genexpr>   s    z)configure_plugin_paths.<locals>.<genexpr>Zdoc_fragmentsmodulesmodule_utils)Zdoc_fragmentZlibraryrE   c             3   s,   | ]$\}}d |   tj |fV  qdS )z
ANSIBLE_%sN)upperr!   r"   r,   )rB   keyvalue)plugin_rootr6   r7   rC      s    c             s   s&   | ]\}}t j|r||fV  qd S )N)r!   r"   isdir)rB   rG   rH   r6   r6   r7   rC      s    )
r*   r   r!   r"   r,   r   commandr&   r+   items)r3   Zsupport_pathZcollection_rootr4   Zplugin_listZ
plugin_mapr6   )rI   r7   r2   |   s<    
 r2   c             C   sf   yt jS  tk
r   Y nX tr.tjt}n tdd}t	ttj
|d | js\t| |t _|S )z
    Return a directory usable for PYTHONPATH, containing only the ansible package.
    If a temporary directory is required, it will be cached for the lifetime of the process and cleaned up at exit.
    zansible-test-)prefixr5   )r)   python_pathAttributeErrorr   r!   r"   dirnamer   r   symlinkr,   r$   generate_egg_info)r3   rN   r6   r6   r7   r)      s    
r)   c             C   s@   dt   }tj| dd}tj|r*dS t|| dd dS )z5Generate an egg-info in the specified base directory.z
Metadata-Version: 1.0
Name: ansible
Version: %s
Platform: UNKNOWN
Summary: Radically simple IT automation
Author-email: info@ansible.com
License: GPLv3+
zansible_base.egg-infozPKG-INFONT)Zcreate_directories)r   r!   r"   r,   r%   r   lstrip)r"   pkg_infoZpkg_info_pathr6   r6   r7   rR      s
    
rR   Fc       
      C   s   yt | S  tk
r   Y nX t|}t| |tjtdgddd\}}t	|}|d }|d }	|sj|rr|t |< |s|s|rt
d|  n|	st
d|  |S )zm
    :type args: EnvironmentConfig
    :type version: str
    :type required: bool
    :type quiet: bool
    zyamlcheck.pyT)capturealwaysyamlcloaderz+PyYAML is not installed for interpreter: %szSPyYAML will be slow due to installation without libyaml support for interpreter: %s)CHECK_YAML_VERSIONSKeyErrorr   r   r!   r"   r,   r   jsonloadsr
   warning)
r3   versionrequiredquietpythonstdoutZ_dummyresultrW   rX   r6   r6   r7   check_pyyaml   s$    
rd   c               @   s   e Zd ZdZdd ZdS )CollectionDetailzCollection detail.c             C   s
   d | _ d S )N)r^   )selfr6   r6   r7   __init__  s    zCollectionDetail.__init__N)__name__
__module____qualname____doc__rg   r6   r6   r6   r7   re   
  s   re   c                   s    e Zd ZdZ fddZ  ZS )CollectionDetailErrorz/An error occurred retrieving collection detail.c                s   t t| d|  || _d S )Nz&Error collecting collection detail: %s)superrl   rg   reason)rf   rn   )	__class__r6   r7   rg     s    zCollectionDetailError.__init__)rh   ri   rj   rk   rg   __classcell__r6   r6   )ro   r7   rl     s   rl   c       	      C   s   t  jj}tj|j|j}t| |tjt	d|gdddd }t
|}|d}|r`t||d}t }|dk	rt|nd|_|S )zReturn collection detail.zcollection_detail.pyT)rU   rV   r   r   r^   N)r   r/   r0   r!   r"   r,   r1   	directoryr   r   r[   r\   getrl   re   r'   r^   )	r3   ra   r0   rq   rb   rc   r   r^   Zdetailr6   r6   r7   get_collection_detail  s    
$


rs   )TN)TF).rk   
__future__r   r   r   type__metaclass__r[   r!    r   t	constantsr   ior   utilr	   r
   r   r   r   r   r   r   r   Zutil_commonr   r   r   configr   r   r   r   datar   rY   r8   r2   r)   rR   rd   re   rl   rs   r6   r6   r6   r7   <module>   s(   ,
J6
#