
    Vh,+                    D   d Z 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	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ  G d	 d
ej(                        Z G d dej(                        Z ej.                  d       G d dej0                               Z ej.                  d       G d deej0                               Z ej.                  d       G d deej0                               Z ej.                  d       G d de             Z ej.                  d       G d de             Z ej.                  d       G d de             Z ej.                  d       G d de             Z ej.                  d       G d de             Z  ej.                  d       G d  d!ee             Z! ej.                  d       G d" d#e             Z" ejF                  d$e%      Z$d-d&Z%d.d'Z&	 	 d/	 	 	 	 	 	 	 d0d(Z'ed1d)       Z(ed2d*       Z)ed3d+       Z*ed4d,       Z+y)5z:Loading, parsing and storing of completion configurations.    )annotationsN   )CONTROLLER_PYTHON_VERSIONSSUPPORTED_PYTHON_VERSIONS)ANSIBLE_TEST_DATA_ROOTcacheread_lines_without_comments)data_context)SUPPORTED_BECOME_METHODSc                  (    e Zd ZdZdZdZdZdZddZy)	CGroupVersionz5The control group version(s) required by a container.nonezv1-onlyzv2-onlyzv1-v2c                L    | j                   j                   d| j                   S N.	__class____name__nameselfs    Q/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/completion.py__repr__zCGroupVersion.__repr__&   "    ..))*!DII;77    Nreturnstr)	r   
__module____qualname____doc__NONEV1_ONLYV2_ONLYV1_V2r    r   r   r   r      s    ?DGGE8r   r   c                       e Zd ZdZdZdZddZy)	AuditModez&The audit requirements of a container.r   requiredc                L    | j                   j                   d| j                   S r   r   r   s    r   r   zAuditMode.__repr__0   r   r   Nr   )r   r   r    r!   r"   REQUIREDr   r&   r   r   r(   r(   *   s    0DH8r   r(   T)frozenc                  L    e Zd ZU dZded<   eej                  dd              Zy)CompletionConfigz(Base class for completion configuration.r   r   c                     y)HTrue if the completion entry is only used for defaults, otherwise False.Nr&   r   s    r   
is_defaultzCompletionConfig.is_default:       r   Nr   bool)	r   r   r    r!   __annotations__propertyabcabstractmethodr1   r&   r   r   r.   r.   4   s,    2
IW  Wr   r.   )	metaclassc                      e Zd ZdZeej                  dd              Zej                  dd       Zd	dZ	ed
d       Z
y)PosixCompletionConfigz>Base class for completion configuration of POSIX environments.c                     y)/Return a list of the supported Python versions.Nr&   r   s    r   supported_pythonsz'PosixCompletionConfig.supported_pythonsD   r2   r   c                     y)0Return the path of the requested Python version.Nr&   r   versions     r   get_python_pathz%PosixCompletionConfig.get_python_pathI   r2   r   c                p    |rt         nt        }| j                  D cg c]	  }||v s| c}d   }|S c c}w )zJReturn the default Python version for a controller or target as specified.r   )r   r   r>   )r   
controllercontext_pythonspythonrB   s        r   get_default_pythonz(PosixCompletionConfig.get_default_pythonM   s;    8B4Ha(,(>(>\f&OB[6\]^_ ]s   	33c                :    t        d | j                  D              S )z_True if at least one Python version is provided which supports the controller, otherwise False.c              3  ,   K   | ]  }|t         v   y wN)r   ).0rB   s     r   	<genexpr>z=PosixCompletionConfig.controller_supported.<locals>.<genexpr>V   s     _W788_s   )anyr>   r   s    r   controller_supportedz*PosixCompletionConfig.controller_supportedS   s     _H^H^___r   Nr   z	list[str]rB   r   r   r   )rE   r4   r   r   r3   )r   r   r    r!   r6   r7   r8   r>   rC   rH   rO   r&   r   r   r;   r;   @   sZ    H>  > 	? ? ` `r   r;   c                  H    e Zd ZU dZdZded<   dZded<   ed
d       ZddZ	y	)PythonCompletionConfigz?Base class for completion configuration of Python environments. r   rG   z/usr/bin
python_dirc                    | j                   r| j                   j                  d      ng }|D cg c]  }|t        v s| }}|S c c}w )r=   ,)rG   splitr   )r   versionsrB   s      r   r>   z(PythonCompletionConfig.supported_pythons`   sF     .2[[4;;$$S)b+3\wB[7[G\\ ]s
   AAc                \    t         j                  j                  | j                  d|       S )r@   rG   )ospathjoinrU   rA   s     r   rC   z&PythonCompletionConfig.get_python_pathg   s"    ww||DOOvgY-?@@r   NrP   rQ   )
r   r   r    r!   rG   r5   rU   r6   r>   rC   r&   r   r   rS   rS   Y   s1    IFC J  Ar   rS   c                  j    e Zd ZU dZdZded<   dZded<   ed
d       Zed
d       Z	edd       Z
d	 Zy)RemoteCompletionConfigzcBase class for completion configuration of remote environments provisioned through Ansible Core CI.Nt.Optional[str]providerarchc                >    | j                   j                  d      d   S )zThe name of the platform./r   r   	partitionr   s    r   platformzRemoteCompletionConfig.platforms        yy""3'**r   c                >    | j                   j                  d      d   S )zThe version of the platform.rd      re   r   s    r   rB   zRemoteCompletionConfig.versionx   rh   r   c                    | j                    S )r0   )rB   r   s    r   r1   z!RemoteCompletionConfig.is_default}   s     <<r   c                    | j                   st        d| j                   d      | j                  st        d| j                   d      y )NzRemote completion entry "z$" must provide a "provider" setting.z " must provide a "arch" setting.)ra   	Exceptionr   rb   r   s    r   __post_init__z$RemoteCompletionConfig.__post_init__   sI    }}7		{Bfghhyy7		{Bbcdd r   r   r3   )r   r   r    r!   ra   r5   rb   r6   rg   rB   r1   rn   r&   r   r   r_   r_   l   sY    m $Ho$ D/ + + + +    er   r_   c                  6     e Zd ZdZd fdZedd       Z xZS )InventoryCompletionConfigz"Configuration for inventory files.c                &    t         |   d       y )N	inventory)r   )super__init__r   r   s    r   rt   z"InventoryCompletionConfig.__init__   s    k*r   c                     yr0   Fr&   r   s    r   r1   z$InventoryCompletionConfig.is_default        r   )r   Noner3   r   r   r    r!   rt   r6   r1   __classcell__r   s   @r   rp   rp      s    ,+  r   rp   c                  6     e Zd ZdZd fdZedd       Z xZS )PosixSshCompletionConfigz2Configuration for a POSIX host reachable over SSH.c                X    t         |   | d| dj                  t                     y )N@rW   )r   rG   )rs   rt   r]   r   )r   userhostr   s      r   rt   z!PosixSshCompletionConfig.__init__   s0    64&!8856 	 	
r   c                     yrw   r&   r   s    r   r1   z#PosixSshCompletionConfig.is_default   rx   r   )r   r   r   r   r   ry   r3   rz   r|   s   @r   r~   r~      s    <
  r   r~   c                      e Zd ZU dZdZded<   dZded<   ej                  j                  Z
ded<   ej                  j                  Zded<   d	Zd
ed<   edd       Zedd       Zedd       Zd Zy)DockerCompletionConfigz$Configuration for Docker containers.rT   r   imagedefaultseccompcgroupauditFr4   placeholderc                     yrw   r&   r   s    r   r1   z!DockerCompletionConfig.is_default   rx   r   c                    	 t        | j                        S # t        $ r( t        d| j                   d| j                   d      dw xY w)zVThe audit requirements for the container. Raises an exception if the value is invalid.Docker completion entry "" has an invalid value "z" for the "audit" setting.N)r(   r   
ValueErrorr   r   s    r   
audit_enumz!DockerCompletionConfig.audit_enum   se    	NTZZ(( 	N8C[\`\f\f[g  hB  C  D  JN  N	N	    1Ac                    	 t        | j                        S # t        $ r( t        d| j                   d| j                   d      dw xY w)zdThe control group version(s) required by the container. Raises an exception if the value is invalid.r   r   z" for the "cgroup" setting.N)r   r   r   r   r   s    r   cgroup_enumz"DockerCompletionConfig.cgroup_enum   se    	P -- 	P8C[\`\g\g[h  iD  E  F  LP  P	Pr   c                    | j                   st        d| j                   d      | j                  s%| j                  st        d| j                   d      | j
                  sJ | j                  sJ y )Nr   z"" must provide an "image" setting."" must provide a "python" setting.)r   rm   r   r>   r   r   r   r   s    r   rn   z$DockerCompletionConfig.__post_init__   sk    zz7		{Bdeff%%d.>.>7		{Bdeff r   Nr3   )r   r(   )r   r   )r   r   r    r!   r   r5   r   r   r%   valuer   r(   r+   r   r   r6   r1   r   r   rn   r&   r   r   r   r      s    .E3OGS%%++FC+##))E3)K  N N P P	 r   r   c                  N     e Zd ZU dZdZded<   dZded<   dZded<    fd	Z xZ	S )
NetworkRemoteCompletionConfigz+Configuration for remote network platforms.rT   r   
collection
connectionFr4   r   c                <    | j                   st        | 	          y y rK   )r   rs   rn   ru   s    r   rn   z+NetworkRemoteCompletionConfig.__post_init__   s    G!#  r   )
r   r   r    r!   r   r5   r   r   rn   r{   r|   s   @r   r   r      s.    5JJK$ $r   r   c                  @     e Zd ZU dZdZded<   dZded<    fdZ xZS )	PosixRemoteCompletionConfigz)Configuration for remote POSIX platforms.Nr`   becomeFr4   r   c                   | j                   st        | 	          | j                  r@| j                  t        vr.t        d| j                   ddj                  t                     | j                  s3| j                  r&| j                   st        d| j                   d      y y | j                  st        d| j                   d      y )NzPOSIX remote completion entry "z." setting "become" must be omitted or one of: z, r   z>" is a platform default and cannot provide a "python" setting.)
r   rs   rn   r   r   rm   r   r]   r>   rB   ru   s    r   rn   z)PosixRemoteCompletionConfig.__post_init__   s    G!#;;4;;.FF=dii[Hvw{  xA  xA  BZ  x[  w\  ]  ^  ^%%||D$4$4"A$))Ln opp %5| <<"A$))  MK  !L  M  M  r   )	r   r   r    r!   r   r5   r   rn   r{   r|   s   @r   r   r      s&    3"FO"KM Mr   r   c                       e Zd ZU dZdZded<   y)WindowsRemoteCompletionConfigz+Configuration for remote Windows platforms.rT   r   r   N)r   r   r    r!   r   r5   r&   r   r   r   r      s    5Jr   r   TCompletionConfig)boundc           
         t        t        j                  j                  t        dd| z        d      }t               j                  j                  rd}nd}|D cg c]  }t        |       c}D  ci c]  \  } }|j                  d|      |k(  s| |  }} }|j                         D ]&  }|j                  dd       |j                  d	d       ( |j                         D  ci c]  \  } }|  |dd
| i| }} }|S c c}w c c}} w c c}} w )ziLoad the named completion entries, returning them in dictionary form using the specified completion type.
completionz%s.txtT)remove_blank_linesr   zansible-corecontextNr   r   r&   )r	   r[   r\   r]   r   r
   contentr   parse_completion_entrygetvaluespopitems)	r   completion_typelinesr   linedatar   itemr   s	            r   load_completionr      s   '5K\[cfj[j(k  AE  FE~(( TY*ZD+A$+G*Z  GJD$^b^f^fgpry^z  F  _FT4Z  GE  G &D!%& NS[[][ztT$:T:T::[J[ +[  G \s   C?3DD%D
c                    | j                         }|d   }|dd D cg c]  }|j                  dd       c}D ci c]  }|d   t        |      dkD  r|d   nd }}||fS c c}w c c}w )zbParse the given completion entry, returning the entry name and a dictionary of key/value settings.r   r   N=rT   )rX   len)r   r   r   r   kvpr   s         r   r   r     su    [[]F!9D^defeg^h>iVZtzz#q?Q>ijsCFc#hlCF2jDj: ?jjs
   A! A&c           	     4   |rW| j                         D ci c]<  \  }}t        |t              r'|j                  r|t	        j
                  t        |      > } }}|s0| j                         D ci c]  \  }}|j                  r|| } }}| S c c}}w c c}}w )zReturn the given completion dictionary, filtering out configs which do not support the controller if controller_only is specified.)r   
isinstancer;   rO   tcastr   r1   )r   controller_onlyinclude_defaultsr   configs        r   filter_completionr     s     R\RbRbRd a,$ )>?FD_D_ AFF#4f== a
 a 7A7G7G7Ic|tVQWQbQbdFlc
ca ds   AB/BBc                 "    t        dt              S )z!Return docker completion entries.docker)r   r   r&   r   r   docker_completionr   .  s     8%;<<r   c                 "    t        dt              S )z!Return remote completion entries.remote)r   r   r&   r   r   remote_completionr   4  s     8%@AAr   c                 "    t        dt              S )z"Return windows completion entries.windows)r   r   r&   r   r   windows_completionr   :       9&CDDr   c                 "    t        dt              S )z"Return network completion entries.network)r   r   r&   r   r   network_completionr   @  r   r   )r   r   r   zt.Type[TCompletionConfig]r   dict[str, TCompletionConfig])r   r   r   ztuple[str, dict[str, str]])FF)r   r   r   r4   r   r4   r   r   )r   z!dict[str, DockerCompletionConfig])r   z&dict[str, PosixRemoteCompletionConfig])r   z(dict[str, WindowsRemoteCompletionConfig])r   z(dict[str, NetworkRemoteCompletionConfig]),r!   
__future__r   r7   dataclassesenumr[   typingr   	constantsr   r   utilr   r   r	   r   r
   r   r   Enumr   r(   	dataclassABCMetar.   r;   rS   r_   rp   r~   r   r   r   r   TypeVarr   r   r   r   r   r   r   r   r&   r   r   <module>r      s   @ " 
   	 
 
	8DII 	88		 8 d#W W $W d#`, ` $`0 d#A2ckk A $A$ d#e- e $e: d#	 0 	 $	 d#5  $ d#' 3 '  $' T d#	$$: 	$ $	$ d#M"8:P M $M* d#$:  $ AII19IJ ( "",  "	" = =
 B B
 E E
 E Er   