B
    ó±ô`ó¥  ã               @   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	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 ddlmZ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'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJ ddlKmLZL ddlMmNZNmOZO ddlPmQZQ ddlRmSZSmTZT ddlUmVZVmWZW ddlXmYZYmZZZ ddl[m\Z\m]Z] ddl^m_Z_m`Z` ddlambZbmcZc ejdrddleZfdd„ Zgd d!„ Zhd"d#„ Zid$d%„ Zjd&d'„ Zkd(d)„ ZldId+d,„Zmd-d.„ Znd/d0„ ZodJd1d2„Zpd3d4„ Zqd5d6„ Zrd7d8„ Zsd9d:„ Ztd;d<„ Zud=d>„ Zvd?d@„ ZwdAdB„ ZxdCdD„ ZydEdF„ ZzdGdH„ Z{dS )Kz"Test runner for all Ansible tests.é    )Úabsolute_importÚdivisionÚprint_functionNé   )ÚCURRENT_RLIMIT_NOFILE)Útypes)ÚApplicationErrorÚdisplayÚraw_commandÚgenerate_pip_commandÚread_lines_without_commentsÚMAXFDÚANSIBLE_TEST_DATA_ROOT)Úcheck_delegation_argsÚdelegate)	Úcommand_posix_integrationÚcommand_network_integrationÚcommand_windows_integrationÚcommand_shellÚSUPPORTED_PYTHON_VERSIONSÚApplicationWarningÚDelegateÚgenerate_pip_installÚcheck_startup)ÚPosixIntegrationConfigÚWindowsIntegrationConfigÚNetworkIntegrationConfigÚSanityConfigÚUnitsConfigÚShellConfig)Ú	EnvConfigÚcommand_envÚconfigure_timeout)Úcommand_sanityÚsanity_initÚsanity_get_tests)Úcommand_units)Úfind_target_completionÚwalk_posix_integration_targetsÚ walk_network_integration_targetsÚ walk_windows_integration_targetsÚwalk_units_targetsÚwalk_sanity_targets)ÚAWS_ENDPOINTS)Úinitialize_cloud_plugins)Údata_context)Úget_docker_completionÚget_network_completionÚget_remote_completionÚCommonConfig)Úcommand_coverage_combine)Úcommand_coverage_erase)Úcommand_coverage_html)Úcommand_coverage_reportÚCoverageReportConfig)Úcommand_coverage_xml)Ú)command_coverage_analyze_targets_generateÚ$CoverageAnalyzeTargetsGenerateConfig)Ú'command_coverage_analyze_targets_expandÚ"CoverageAnalyzeTargetsExpandConfig)Ú'command_coverage_analyze_targets_filterÚ"CoverageAnalyzeTargetsFilterConfig)Ú(command_coverage_analyze_targets_combineÚ#CoverageAnalyzeTargetsCombineConfig)Ú(command_coverage_analyze_targets_missingÚ#CoverageAnalyzeTargetsMissingConfig)ÚCOVERAGE_GROUPSÚCoverageConfigc           
   C   sÊ  yôt  tƒ jj¡ tƒ  tƒ  tƒ } |  | ¡}|j	t
_	|jt
_|jt
_|jt
_|jt
_tƒ  t|ƒ t|ƒ t
jdtf dd t
jdt dd y|  |¡ d}W n2 tk
rÖ } z|j|j|jf}W dd}~X Y nX |rêt|f|žŽ  t
 ¡  W nÐ tk
r0 } zt
 d| ¡ t d¡ W dd}~X Y n– t k
rj } zt
 !d| ¡ t d¡ W dd}~X Y n\ t"k
rˆ   t d¡ Y n> t#k
rÄ } z|j$t$j%kr²t d	¡ ‚ W dd}~X Y nX dS )
zMain program function.zRLIMIT_NOFILE: %sé   )Ú	verbosityz	MAXFD: %dNz%sr   r   é   )&ÚosÚchdirr/   ÚcontentÚrootr.   r$   Ú
parse_argsÚconfigrG   r	   ÚtruncateÚredactÚcolorZinfo_stderrr   r   r"   Úinfor   r   Úfuncr   ÚexcludeÚrequireZintegration_targetsr   Zreview_warningsr   ÚwarningÚsysÚexitr   ÚerrorÚKeyboardInterruptÚIOErrorÚerrnoÚEPIPE)ÚargsrN   Zdelegate_argsÚex© r`   úI/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/cli.pyÚmain˜   sH    

"
rb   c           
      s`  yddl ‰ W nD tk
rP   dtjkr(‚ ttttjƒddgddƒ ddl ‰ Y nX yddl} W n tk
rv   d} Y nX | r‚d}nd	}‡ fd
d„}ˆ j	|d}ˆ j	dd}|j
ddddd |j
ddddddd |j
dddddddd  |j
d!dd"d |j
d#d$d%ttjd&d' |j
d(d)dd*d+d |j
d,d)d-dd.d |j
d/tˆ jd0 ˆ j	d|gd1}t|j
d2d3d4d5d6_t|j
d7d3d8d9d:_t|j
d;d3d8d<d:_t|j
d=d3d8d>d:_|j
d?dd@d |j
dAddBdC |j
dDddEd |j
dFˆ jdG |j
dHdIdG t|ˆ ƒ t|ƒ ˆ j	d|gd1}|j
dJdKtdL dMdN t¡ dO t|j
dPd3dQdR_|j
dSdTdUdR |j
dVdWdXdR |j
dYdWdZdR |j
d[dd\d |j
d]dd^d |j
d_dd`d |j
daddbd |j
dcdddd |j
deddfd |j
dgddhd |j
diddjd |j
dkddld |j
dmddnd |j
dod3dpdqdr |j
dsdtdudvdO |j
dwddxd |j
dyddzd |j
d{dd|d |jd}d~}d*|_|jd|gd€d}|jtttd‚ t|ƒ t|ˆ ƒ |jdƒ|gd„d}	|	jttt d‚ t|	dd… t!|	j
d†d‡d8dˆd:_t"|	j
d‰|dŠd8d‹dŒ_t#|	j
d|dŽd8ddŒ_|	j
dd‘d’dR t$|	j
d“d”d•dR_|jd–|gd—d}
|
jt%t&t'd‚ t|
dd… t|
ˆ ƒ t(|
j
d˜dKd8d™d:_|
j
dd‘d’dR |jdš|gd›d}|jt)t*t+d‚ |j
dJdKtdL dMdN t¡ dO |j
dœddd |j
džtdŸd  |j
d¡d¢ˆ jd0 t|dd… |jd£|gd¤d}|jt,t-t.d‚ t/|j
d¥d¦d8d§d¨„ t0ƒ D ƒd©dª_t/|j
d«d¦d8d¬d¨„ t0ƒ D ƒd­dª_|j
dadd®d |j
d¯dd°d |j
dJdKtdL dMdN t¡ dO |j
d±dd²d t1|ƒ t|dd… |jd³|gd´d}|j
dJdKtdL dMdN t¡ dO |jt2t3dµ |j
d¶dd·d t|ƒ t|ƒ t|ˆ ƒ ˆ j	d|gd1}t|dd¸ |jd¹dºdG}|jd}d~}d*|_t4||ƒ |jd»|gd¼d}|jt5t6dµ t7|ƒ |jd½|gd¾d}|jt8t6dµ |jd¿|gdÀd}|jt9t:dµ |j
dÁddÂd |j
d7dÃdÄdR |j
dÅdÃdÆdR t7|ƒ |jdÇ|gdÈd}|jt;t6dµ t7|ƒ |jdÉ|gdÊd}|jt<t6dµ t7|ƒ |jdË|gdÌd}|jt=t>dµ |j
dÍddÎd |j
dÏddÐd |j
dÑddÒd |j
dÓtdÔdÕdÖ | r
| j?|dd×dØ„ dÙ | @¡ }|jAr(|jBs(dÚ|_B|jCdkr<d*|_Cn |jCdÛkrPd|_CntjD E¡ |_C|S )ÜzParse command line arguments.r   Nz--requirementsÚ ÚargparseF)ÚpackagesZuse_constraintsz@Tab completion available using the "argcomplete" python package.zBInstall the "argcomplete" python package to enable tab completion.c                s
   t ˆ | ƒS )zWrapper around key_value.)Ú	key_value)Úvalue)rd   r`   ra   Úkey_value_typeÝ   s    z"parse_args.<locals>.key_value_type)Úepilog)Úadd_helpz-ez	--explainÚ
store_truez'explain commands that would be executed)ÚactionÚhelpz-vz	--verboserG   Úcountzdisplay more output)Údestrl   Údefaultrm   z--colorZCOLORú?z"generate color output: %(choices)s)ÚyesÚnoÚautorr   rt   )ÚmetavarÚnargsrm   ÚchoicesÚconstrp   z--debugz"run ansible commands in debug modez
--truncaterO   ÚCOLUMNSz6truncate some long output (0=disabled) (default: auto))ro   ru   Útyperp   rm   z--redactrP   Tz!redact sensitive values in outputz--no-redactÚstore_falsezshow sensitive values in outputz--check-python)rw   rm   )rj   ÚparentsÚincludeZTARGETÚ*ztest the specified target)ru   rv   rm   z	--includeÚappendzinclude the specified target)ru   rl   rm   z	--excludezexclude the specified targetz	--requirezrequire the specified targetz
--coveragez(analyze code coverage when running testsz--coverage-labelz.label to include in coverage output file names)rp   rm   z--coverage-checkz(only verify code coverage can be enabledz
--metadata)rm   z--base-branchz%base branch used for change detectionz--pythonÚVERSION)rp   zpython version: %sz, )ru   rw   rm   z
--start-atzstart at the specified target)ru   rm   z--start-at-taskZTASKzstart at the specified taskz--tagsZTAGSz1only run plays and tasks tagged with these valuesz--skip-tagsz=only run plays and tasks whose tags do not match these valuesz--diffzshow diff outputz--allow-destructivezallow destructive testsz--allow-rootz(allow tests requiring root when not rootz--allow-disabledz.allow tests which have been marked as disabledz--allow-unstablez.allow tests which have been marked as unstablez--allow-unstable-changedzPallow tests which have been marked as unstable when focused changes are detectedz--allow-unsupportedz1allow tests which have been marked as unsupportedz--retry-on-errorz*retry failed test with increased verbosityz--continue-on-errorzcontinue after failed testz--debug-strategyz+run test playbooks using the debug strategyz--changed-all-targetÚallz'target to run when all tests are needed)ru   rp   rm   z--changed-all-modeZMODE)rp   r}   rT   z?include/exclude behavior with --changed-all-target: %(choices)sz--list-targetsz.list matching targets instead of running testsz--no-temp-workdirzQdo not run tests from a temporary directory (use only for verifying broken tests)z--no-temp-unicodezUavoid unicode characters in temporary directory (use only for verifying broken tests)ÚCOMMAND)ru   Úintegrationzposix integration tests)r|   rm   )rS   ÚtargetsrN   znetwork-integrationznetwork integration tests)rƒ   z
--platformÚPLATFORMznetwork platform/versionz--platform-collectionzPLATFORM=COLLECTIONz collection used to test platform)rz   ru   rl   rm   z--platform-connectionzPLATFORM=CONNECTIONz connection used to test platformz--inventoryÚPATHz path to inventory used for testsz
--testcaseZTESTCASEz$limit a test to a specified testcasezwindows-integrationzwindows integration testsz	--windowszwindows versionÚunitsz
unit testsz--collect-onlyz%collect tests but do not execute themz--num-workersz(number of workers to use (default: auto))rz   rm   z--requirements-mode)ÚonlyÚskipÚsanityzsanity testsz--testZTESTc             S   s   g | ]
}|j ‘qS r`   )Úname)Ú.0Útestr`   r`   ra   ú
<listcomp>ÿ  s    zparse_args.<locals>.<listcomp>ztests to run)ru   rl   rw   rm   z--skip-testc             S   s   g | ]
}|j ‘qS r`   )r‹   )rŒ   r   r`   r`   ra   rŽ     s    ztests to skipz0allow tests to run which are disabled by defaultz--list-testszlist available testsz--enable-optional-errorszenable optional errorsÚshellzopen an interactive shell)rS   rN   z--rawzdirect to shell with no setup)Úisolated_delegationÚcoveragez&code coverage management and reportingÚcombinez.combine coverage data and rewrite remote pathsZerasezerase coverage data filesÚreportz generate console coverage reportz--show-missingz,show line numbers of statements not executedzPAT1,PAT2,...zpinclude only files whose paths match one of these patterns. Accepts shell-style wildcards, which must be quoted.z--omitzhomit files whose paths match one of these patterns. Accepts shell-style wildcards, which must be quoted.Úhtmlzgenerate html coverage reportÚxmlzgenerate xml coverage reportÚenvz+show information about the test environmentz--showzshow environment on stdoutz--dumpzdump environment to diskz--list-fileszlist files on stdoutz	--timeoutZMINUTESz3timeout for future ansible-test commands (0 clears))rz   ru   rm   c             S   s   dS )NTr`   )ÚiÚkr`   r`   ra   Ú<lambda>Ž  ó    zparse_args.<locals>.<lambda>)Zalways_complete_optionsZ	validatorr   rs   )Frd   ÚImportErrorrW   Úargvr
   r   r   Ú
executableÚargcompleteÚArgumentParserÚadd_argumentÚintr	   Úcolumnsr   ÚSUPPRESSÚcomplete_targetÚ	completerÚadd_changesÚadd_environmentsÚjoinÚadd_subparsersÚrequiredÚ
add_parserÚset_defaultsr   r(   r   Úadd_extra_docker_optionsÚadd_httptester_optionsr   r)   r   Úcomplete_network_platformÚ$complete_network_platform_collectionÚ$complete_network_platform_connectionÚcomplete_network_testcaser   r*   r   Úcomplete_windowsr&   r+   r   r#   r,   r   Úcomplete_sanity_testr%   Úadd_lintr   r   Úadd_coverage_analyzer4   rE   Úadd_extra_coverage_optionsr5   r7   r8   r6   r9   r!   r    ÚautocompleterM   ÚexplainrG   rQ   ÚstdoutÚisatty)rž   ri   rh   ÚparserÚcommonr   rƒ   Z
subparsersZposix_integrationZnetwork_integrationZwindows_integrationr‡   rŠ   r   Úcoverage_commonr‘   Úcoverage_subparsersZcoverage_combineZcoverage_eraseZcoverage_reportZcoverage_htmlZcoverage_xmlr–   r^   r`   )rd   ra   rM   Æ   s`   







""

rM   c             C   s4   |  d¡}t|ƒdkr$|  d| ¡‚|d |d fS )zWType parsing and validation for argparse key/value pairs separated by an '=' character.ú=rF   z&"%s" must be in the format "key=value"r   r   )ÚsplitÚlenÚArgumentTypeError)rd   rg   Úpartsr`   r`   ra   rf   Ÿ  s    
rf   c             C   sâ  | j ddd}|jdd}d|_|j ddd}|jdd}d|_|j d	|gd
d}|jttd |jdddd |jddd |j d|gdd}|jttd |jddd |jddd |j d|gdd}|jt	t
d |jddd |jddd |jddddd |jdd dd!d |jd"d#d |jd$d%d |j d&|gd'd}	|	jttd |	jdd(dd |	jdd)d |j d*|gd+d}
|
jttd |
jd,d-d |
jd.d-d |
jdd)d |
jd/d0d1d2 |
jd3d0d4d2 d5S )6z&Add the `coverage analyze` subcommand.Úanalyzezanalyze collected coverage data)rm   r‚   )ru   Tr„   z(analyze integration test target coverageÚgeneratez-aggregate coverage by integration test target)r|   rm   )rS   rN   Z	input_dirrq   zdirectory to read coverage from)rv   rm   Zoutput_filez#output file for aggregated coverageÚexpandz8expand target names from integers in aggregated coverageZ
input_filez+input file to read aggregated coverage fromz)output file to write expanded coverage toÚfilterzfilter aggregated coverage dataz--include-targetZinclude_targetsr   zinclude the specified targets)ro   rl   rm   z--exclude-targetZexclude_targetszexclude the specified targetsz--include-pathz&include paths matching the given regexz--exclude-pathz&exclude paths matching the given regexr’   z*combine multiple aggregated coverage filesú+z+output file to write aggregated coverage toÚmissingz0identify coverage in one file missing in anotherÚ	from_filez)input file containing aggregated coverageZto_filez--only-gapsrk   z,report only arcs/lines not hit by any target)rl   rm   z--only-existsz!limit results to files that existN)r«   r©   rª   r¬   r:   r;   r    r<   r=   r>   r?   r@   rA   rB   rC   )r¿   r¾   rÅ   Zanalyze_subparsersr„   Ztargets_subparsersZtargets_generateZtargets_expandZtargets_filterZtargets_combineZtargets_missingr`   r`   ra   r¶   ª  sÐ    r¶   c             C   s4   | j dddd | j dddd | j dddd d	S )
z/
    :type parser: argparse.ArgumentParser
    z--lintrk   z3write lint output to stdout, everything else stderr)rl   rm   z--junitz&write test failures to junit xml filesz--failure-okz6exit successfully on failed tests after saving resultsN)r    )r¼   r`   r`   ra   rµ   Q  s    rµ   c             C   sž   | j dddd | jdd}|j dd|jd |j ddd	d |j d
dddd |j ddddd |j ddddd |j dd|jd |j ddd|jd dS )zL
    :type parser: argparse.ArgumentParser
    :type argparse: argparse
    z	--changedrk   zlimit targets based on changes)rl   rm   zchange detection arguments)Útitlez	--trackedz--untrackedzinclude untracked filesz--ignore-committedZ	committedr{   zexclude committed files)ro   rl   rm   z--ignore-stagedZstagedzexclude staged filesz--ignore-unstagedZunstagedzexclude unstaged filesz--changed-fromr†   )ru   rm   z--changed-pathr   )ru   rl   rm   N)r    Úadd_argument_groupr£   )r¼   rd   Úchangesr`   r`   ra   r¦   b  s    r¦   Tc          
   C   s`  | j dddd | j ddddd	 | j d
ddddd |  ¡ }|j dddd |j dddd | jdd}|j dddd |sœ|jddddddddd dS t|j ddddddd_| j d¡rÄtnt	|j d d!dd"d	_| jd#d}t
|j d$d%d&d'd(_|j d)d*d+dd,d-d.d/d0gdd1 |j d2d3d4dd( |j d5d6d7ttƒdd1 |j d8d9d:d;d<d=gd;d1 dS )>zS
    :type parser: argparse.ArgumentParser
    :type isolated_delegation: bool
    z--requirementsrk   zinstall command requirements)rl   rm   z--python-interpreterr†   Nz/path to the docker or remote python interpreter)ru   rp   rm   z--no-pip-checkZ	pip_checkTr{   z-do not run "pip check" to verify requirements)ro   rp   rl   rm   z--localzrun from the local environmentz--venvz2run from ansible-test managed virtual environmentszvenv arguments)rÌ   z--venv-system-site-packageszenable system site packages)ÚdockerÚremoteZremote_stageZremote_providerZremote_aws_regionZremote_terminateZremote_endpointZpython_interpreterz--dockerÚIMAGErq   rp   zrun from a docker container)ru   rv   rp   rx   rm   z shellz--remoter…   zrun from a remote instancezremote argumentsz--remote-stageZSTAGEzremote stage to use: prod, devÚprod)ru   rm   rp   z--remote-providerZPROVIDERz#remote provider to use: %(choices)sZawsZazureZ	parallelsZibmvpcZibmps)ru   rm   rw   rp   z--remote-endpointZENDPOINTz3remote provisioning endpoint to use (default: auto)z--remote-aws-regionZREGIONz5remote aws region to use: %(choices)s (default: auto)z--remote-terminateÚWHENz=terminate remote instance: %(choices)s (default: %(default)s)ÚneverÚalwaysÚsuccess)r    Úadd_mutually_exclusive_grouprÍ   r¬   Úcomplete_dockerr¥   ÚprogÚendswithÚcomplete_remote_shellÚcomplete_remoteÚcomplete_remote_stageÚsortedr-   )r¼   r   ZenvironmentsZvenvrÐ   r`   r`   ra   r§   u  sr    $r§   c          	   C   sP   | j dddtdd t¡ d | j ddd	d
 | j dddd
 | j ddd dS )z/
    :type parser: argparse.ArgumentParser
    z
--group-byZGROUPr   zgroup output by: %sz, )ru   rl   rw   rm   z--allrk   z*include all python/powershell source files)rl   rm   z--stubz;generate empty report of all python/powershell source filesz--exportz.directory to export combined coverage files to)rm   N)r    rD   r¨   )r¼   r`   r`   ra   r·   Ò  s    r·   c             C   sD   |   ¡ }|jddddd |jdddd	d
d | jdd|jd dS )zL
    :type parser: argparse.ArgumentParser
    :type argparse: argparse
    z--httptesterrÑ   z)quay.io/ansible/http-test-container:1.0.0z0docker image to use for the httptester container)ru   rp   rm   z--disable-httptesterZ
httptesterÚstore_constrc   z#do not use the httptester container)ro   rl   rx   rm   z--inject-httptesterrk   )rl   rm   N)r×   r    r£   )r¼   rd   Úgroupr`   r`   ra   r®   è  s    r®   c             C   s®   | j dd}|jddddd tƒ jjr:|jdd	d
d n|jdd |jdddddd |jddddddgdd |s|dS |jdd	dd |jddd |jd d!td" dS )#zK
    :type parser: argparse.ArgumentParser
    :type integration: bool
    zdocker arguments)rÌ   z--docker-no-pullr{   Zdocker_pullz/do not explicitly pull the latest docker images)rl   ro   rm   z--docker-keep-gitrk   z4transfer git related files into the docker container)rl   rm   F)Zdocker_keep_gitz--docker-seccompZSC)rp   Z
unconfinedNz;set seccomp confinement for the test container: %(choices)s)ru   rw   rp   rm   z--docker-terminaterÓ   z>terminate docker container: %(choices)s (default: %(default)s)rÔ   rÕ   rÖ   )ru   rm   rw   rp   z--docker-privilegedz'run docker container in privileged modez--docker-networkz&run using the specified docker network)rm   z--docker-memoryz memory limit for docker in bytes)rm   rz   )rÍ   r    r/   rK   Z
is_ansibler¬   r¡   )r¼   rƒ   rÏ   r`   r`   ra   r­   ÿ  s<    

r­   c                s   ‡ fdd„dD ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    c                s   g | ]}|  ˆ ¡r|‘qS r`   )Ú
startswith)rŒ   Zstage)Úprefixr`   ra   rŽ   6  s    z)complete_remote_stage.<locals>.<listcomp>)rÒ   Údevr`   )râ   Úparsed_argsÚ_r`   )râ   ra   rÝ   0  s    rÝ   c             K   s   t |j| ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    )r'   r„   )râ   rä   rå   r`   r`   ra   r¤   9  s    r¤   c                s"   ~t tƒ  ¡ ƒ}‡ fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    c                s   g | ]}|  ˆ ¡r|‘qS r`   )rá   )rŒ   r—   )râ   r`   ra   rŽ   M  s    z#complete_remote.<locals>.<listcomp>)rÞ   r2   Úkeys)râ   rä   rå   Úimagesr`   )râ   ra   rÜ   C  s    rÜ   c                sN   ~t tƒ  ¡ ƒ}tj tdd¡}| dd„ t|ddD ƒ¡ ‡ fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    Ú
completionzwindows.txtc             S   s   g | ]}|d krd| ‘qS )Z2008z
windows/%sr`   )rŒ   r—   r`   r`   ra   rŽ   ]  s    z)complete_remote_shell.<locals>.<listcomp>T)Úremove_blank_linesc                s   g | ]}|  ˆ ¡r|‘qS r`   )rá   )rŒ   r—   )râ   r`   ra   rŽ   _  s    )	rÞ   r2   ræ   rI   Úpathr¨   r   Úextendr   )râ   rä   rå   rç   Zwindows_completion_pathr`   )râ   ra   rÛ   Q  s
    rÛ   c                s"   ~t tƒ  ¡ ƒ}‡ fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    c                s   g | ]}|  ˆ ¡r|‘qS r`   )rá   )rŒ   r—   )râ   r`   ra   rŽ   m  s    z#complete_docker.<locals>.<listcomp>)rÞ   r0   ræ   )râ   rä   rå   rç   r`   )râ   ra   rØ   c  s    rØ   c                s,   t tj tdd¡dd}‡ ‡fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    rè   zwindows.txtT)ré   c                s*   g | ]"}|  ˆ¡rˆ jr"|ˆ jkr|‘qS r`   )rá   Zwindows)rŒ   r—   )rä   râ   r`   ra   rŽ   x  s    z$complete_windows.<locals>.<listcomp>)r   rI   rê   r¨   r   )râ   rä   rå   rç   r`   )rä   râ   ra   r³   p  s    r³   c                s   t tƒ ƒ}‡ ‡fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    c                s*   g | ]"}|  ˆ¡rˆ jr"|ˆ jkr|‘qS r`   )rá   Úplatform)rŒ   r—   )rä   râ   r`   ra   rŽ   ƒ  s    z-complete_network_platform.<locals>.<listcomp>)rÞ   r1   )râ   rä   rå   rç   r`   )rä   râ   ra   r¯   {  s    
r¯   c                s:   |   d¡d ‰ ttdd„ tƒ D ƒƒƒ}‡ ‡fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    rÀ   r   c             s   s   | ]}|  d ¡d V  qdS )ú/r   N)rÁ   )rŒ   Úimager`   r`   ra   ú	<genexpr>  s    z7complete_network_platform_collection.<locals>.<genexpr>c                s8   g | ]0}|  ˆ ¡rˆjr,|d d„ ˆjD ƒkr|d ‘qS )c             S   s   g | ]}|d  ‘qS )r   r`   )rŒ   Úxr`   r`   ra   rŽ     s    zCcomplete_network_platform_collection.<locals>.<listcomp>.<listcomp>rÀ   )rá   Zplatform_collection)rŒ   r—   )Úlefträ   r`   ra   rŽ     s    z8complete_network_platform_collection.<locals>.<listcomp>)rÁ   rÞ   Úsetr1   )râ   rä   rå   rç   r`   )rñ   rä   ra   r°   †  s    r°   c                s:   |   d¡d ‰ ttdd„ tƒ D ƒƒƒ}‡ ‡fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    rÀ   r   c             s   s   | ]}|  d ¡d V  qdS )rí   r   N)rÁ   )rŒ   rî   r`   r`   ra   rï   ™  s    z7complete_network_platform_connection.<locals>.<genexpr>c                s8   g | ]0}|  ˆ ¡rˆjr,|d d„ ˆjD ƒkr|d ‘qS )c             S   s   g | ]}|d  ‘qS )r   r`   )rŒ   rð   r`   r`   ra   rŽ   ›  s    zCcomplete_network_platform_connection.<locals>.<listcomp>.<listcomp>rÀ   )rá   Zplatform_connection)rŒ   r—   )rñ   rä   r`   ra   rŽ   ›  s    z8complete_network_platform_connection.<locals>.<listcomp>)rÁ   rÞ   rò   r1   )râ   rä   rå   rç   r`   )rñ   rä   ra   r±   ’  s    r±   c             K   s’   g }t |jƒdkrg S tj tƒ jj|jd d¡}tƒ j |¡}xL|D ]D}x>dd„ tƒ j 	|¡D ƒD ]"}| 
| ¡rd| | d¡d ¡ qdW qFW |S )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    r   r   Útestsc             S   s   g | ]}t j |¡‘qS r`   )rI   rê   Úbasename)rŒ   rê   r`   r`   ra   rŽ   ¯  s    z-complete_network_testcase.<locals>.<listcomp>Ú.)rÂ   r}   rI   rê   r¨   r/   rK   Zintegration_targets_pathZget_dirsZ	get_filesrá   r   rÁ   )râ   rä   rå   Z	testcasesZtest_dirZconnection_dirsZconnection_dirZtestcaser`   r`   ra   r²   ž  s    

r²   c                s(   ~t dd„ tƒ D ƒƒ}‡ fdd„|D ƒS )zP
    :type prefix: unicode
    :type parsed_args: any
    :rtype: list[str]
    c             s   s   | ]}|j V  qd S )N)r‹   )rŒ   r   r`   r`   ra   rï   ¿  s    z'complete_sanity_test.<locals>.<genexpr>c                s   g | ]}|  ˆ ¡r|‘qS r`   )rá   )rŒ   r—   )râ   r`   ra   rŽ   Á  s    z(complete_sanity_test.<locals>.<listcomp>)rÞ   r%   )râ   rä   rå   ró   r`   )râ   ra   r´   ·  s    r´   )T)T)|Ú__doc__Ú
__future__r   r   r   rz   Ú__metaclass__r\   rI   rW   Úinitr   rc   r   ÚtÚutilr   r	   r
   r   r   r   r   Z
delegationr   r   Úexecutorr   r   r   r   r   r   r   r   r   rN   r   r   r   r   r   r   r–   r    r!   r"   rŠ   r#   r$   r%   r‡   r&   Útargetr'   r(   r)   r*   r+   r,   Zcore_cir-   Zcloudr.   Údatar/   Zutil_commonr0   r1   r2   r3   Zcoverage.combiner4   Zcoverage.eraser5   Zcoverage.htmlr6   Zcoverage.reportr7   r8   Zcoverage.xmlr9   Z!coverage.analyze.targets.generater:   r;   Zcoverage.analyze.targets.expandr<   r=   Zcoverage.analyze.targets.filterr>   r?   Z coverage.analyze.targets.combiner@   rA   Z coverage.analyze.targets.missingrB   rC   r‘   rD   rE   ÚTYPE_CHECKINGrd   Zargparse_modulerb   rM   rf   r¶   rµ   r¦   r§   r·   r®   r­   rÝ   r¤   rÜ   rÛ   rØ   r³   r¯   r°   r±   r²   r´   r`   r`   r`   ra   Ú<module>   sr   $
, 	 	.   \ (
]
1	
