B
    `a                 @   sR  d Z ddlmZmZmZ e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mZ ddlmZmZ ddl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! 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+ G dd deZ,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3d#dd Z4d!d" Z5dS )$z,Show information about the test environment.    )absolute_importdivisionprint_functionN   )CommonConfig
TestConfig)write_json_fileread_json_file)displayfind_executableSubprocessErrorApplicationErrorget_ansible_versionget_available_python_versions)data_contextwrite_json_test_results
ResultType)docker_infodocker_version)WrappedThread)TIMEOUT_PATH)TestTimeout)SUPPORTED_PYTHON_VERSIONS)get_ci_providerc                   s    e Zd ZdZ fddZ  ZS )	EnvConfigz$Configuration for the tools command.c                sX   t t| |d |j| _|j| _|j| _|j| _| jsT| jsT| jdkrT| jsTd| _dS )z!
        :type args: any
        envNT)superr   __init__showdumptimeout
list_files)selfargs)	__class__ I/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/env.pyr   B   s    zEnvConfig.__init__)__name__
__module____qualname____doc__r   __classcell__r%   r%   )r$   r&   r   @   s   r   c             C   s   t |  t|  t|  dS )z
    :type args: EnvConfig
    N)show_dump_envlist_files_envset_timeout)r#   r%   r%   r&   command_envR   s    r/   c             C   s   | j s| jsdS ttt dt| tj ttjddt	 dt
 | ttj dt t dttjt dttd}| j rd	d
ddd}t|| | jr| jsttjd| dS )z
    :type args: EnvConfig
    N)versionZPWD)pwdcwdz%Y-%m-%dT%H:%M:%SZ)datetimeplatformuname)
executabler0   )Zansibledockerenvironlocationgitr4   pythoninterpreters   r      r   )r7   zdocker.executabler8   zplatform.unamezdata-environment.json)r   r   dictr   get_docker_detailsosr8   copygetgetcwdr   Zget_git_detailsr3   utcnowstrftimer4   r5   sysr6   python_versionr   r   	show_dictexplainr   r   ZBOT)r#   dataverboser%   r%   r&   r,   [   s6    




r,   c             C   s.   | j s
dS xt j D ]}t| qW dS )zList files on stdout.N)r!   r   content	all_filesr
   info)r#   pathr%   r%   r&   r-      s    r-   c             C   s   | j dkrdS | j rLtj tj| j d d}tjd| j |f dd nd}tjddd | jrhdS |rt| j |d}t	t
| ntjt
rtt
 dS )	z
    :type args: EnvConfig
    N)minutesz%Y-%m-%dT%H:%M:%SZz6Setting a %d minute test timeout which will end at: %sr   )	verbosityzClearing existing test timeout.)durationdeadline)r    r3   rE   	timedeltarF   r
   rO   rJ   r?   r   r   rA   rP   existsremove)r#   rT   rK   r%   r%   r&   r.      s     
r.   c              C   s2   t jtsdS tt} tj| d d| d< | S )z'
    :rtype: dict[str, any] | None
    NrT   z%Y-%m-%dT%H:%M:%SZ)rA   rP   rV   r   r	   r3   strptime)rK   r%   r%   r&   get_timeout   s
    rY   c             C   s   t | trt|  dS )z"
    :type args: CommonConfig
    N)
isinstancer   configure_test_timeout)r#   r%   r%   r&   configure_timeout   s    
r\   c                s   t  }|sdS tj }|d |d }|| }t|t krd  td|d |f tjd||f dd  fd	d
}dd }t		t	j
| tt||j}d|_|  dS )z 
    :type args: TestConfig
    NrS   rT   z0The %d minute test timeout expired %s ago at %s.z/The %d minute test timeout expires in %s at %s.r   )rR   c                s      td dS )zRuns when SIGUSR1 is received.z7Tests aborted after exceeding the %d minute time limit.N)writer   )Z_dummy1Z_dummy2)r#   test_timeouttimeout_durationr%   r&   timeout_handler   s    
z/configure_test_timeout.<locals>.timeout_handlerc             S   s    t |  tt tj dS )z,
        :type timeout_seconds: int
        N)timesleeprA   killgetpidsignalSIGUSR1)Ztimeout_secondsr%   r%   r&   timeout_waiter   s    
z.configure_test_timeout.<locals>.timeout_waiterT)rY   r3   rE   r   rU   r^   r   r
   rO   rf   rg   r   	functoolspartialsecondsdaemonstart)r#   r    Ztimeout_startZtimeout_deadlineZtimeout_remainingra   rh   instancer%   )r#   r_   r`   r&   r[      s(    

r[   c                s
  |r|ng }xt |  D ]\ }dt| }| g }d|}|||}t|ttfrtj	|d   |d x|D ]}	tj	|d|	  |d qxW qt|t
rt|g fdd| D  }
tj	|d   |
d t|||| qtj	|d |f  |d qW d	S )
z
    :type data: dict[str, any]
    :type verbose: dict[str, int]
    :type root_verbosity: int
    :type path: list[str] | None
    z  .z%s:)rR   z  - %sc                s"   g | ]\}}| d   r|qS )z%s.)
startswith).0kv)keyr%   r&   
<listcomp>  s    zshow_dict.<locals>.<listcomp>z%s: %sN)sorteditemslenjoinrC   rZ   tuplelistr
   rO   r?   minrI   )rK   rL   Zroot_verbosityrP   valueindentZkey_pathZkey_namerR   itemZmin_verbosityr%   )rt   r&   rI      s    



 rI   c          
   C   s   t ddd}d}d}|ryt| }W n0 tk
rT } ztd|  W dd}~X Y nX yt| }W n0 tk
r } ztd|  W dd}~X Y nX t|||d}|S )z=
    :type args: CommonConfig
    :rtype: dict[str, any]
    r7   F)requiredNz!Failed to collect docker info:
%sz$Failed to collect docker version:
%s)r6   rO   r0   )r   r   r   r
   warningr   r?   )r#   r7   rO   r0   exZdocker_detailsr%   r%   r&   r@     s"      r@   )r   N)6r*   
__future__r   r   r   type__metaclass__r3   ri   rA   r4   rf   rG   rb   configr   r   ior   r	   utilr
   r   r   r   r   r   Zutil_commonr   r   r   Zdocker_utilr   r   threadr   	constantsr   testr   executorr   cir   r   r/   r,   r-   r.   rY   r\   r[   rI   r@   r%   r%   r%   r&   <module>   s:    		,	-
