+
     hm&  c                   s   ^ RI t ^ RItRtRtRtRt]]]].tR tR tR t	R	 t
R
 t ! R R] P                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR tR tR tR tR tR# )    NZpodmanzCRI-OZdocker
containerdc                 s   a  V 3R  lpV# )c                 sd   <  S! W.VO5!  pV'       d   V# . #   \         \        3 d    . u # i ; iN)KeyError	TypeError)selfdataZargsvaluefunctions   &&* 0/usr/lib/python3.14/site-packages/udica/parse.pywrapperZ!getter_decorator.<locals>.wrapper+   s=    	T/$/E!5)r))$ 	I	s      // )r   r
   s   f r	   getter_decoratorr   (   s     N    c                s"    \        V \        4      # )zCheck if the inspected file is in a format from docker or podman.

We know this because the type in the inspect command will be a list

isinstancelistjson_rep   &r	   json_is_listr   5   s    
 h%%r   c                s    \        V \        4      ;'       dL    \        V ^ ,          \        4      ;'       d-    RV ^ ,          P                  R/ 4      P                  RR4      9   # )z;Check if the inspected file is in a format from containerd.r   ZRuntimeZNameZ )r   r   dictgetr   r   r	   json_is_containerd_formatr   =   s]     	8T" 	M 	Mx{D)	M 	MXa[__Y;??KKr   c                s    \        V \        4      ;'       d=    RV ^ ,          R,          R,          9   ;'       g    RV ^ ,          R,          R,          9   # )z7Check if the inspected file is in a format from podman.zcontainer=ociZConfigZEnvzcontainer=podmanr   r   r   r	   json_is_podman_formatr   F   sQ    h%  8A;x077 	> 	>!X!6u!==r   c                 s   \        V4      pVR 8X  dr   \        P                  ! V 4      p\        V4      '       dA   \	        V4      '       d   \        4       # \        V4      '       d   \        4       # \        4       # \        4       # V\        8X  d   \        4       # V\        8X  d   \        4       # V\        8X  d   \        4       # V\        8X  d   \        4       # \        R4      h)-zUnkown engine)validate_container_enginejsonloadsr   r   ContainerdHelperr   PodmanHelperDockerHelper
CrioHelperENGINE_DOCKERENGINE_PODMANENGINE_CRIOENGINE_CONTAINERDZRuntimeError)r   ContainerEngineZenginer   s   &&  r	   get_engine_helperr&   N   s    &7F}::d#!!(22'))&x00#~%>!<]">!}$>!{"<((#%%?++r   c                   s   a  ] tR t^ft o R tR t]P                  R 4       t]P                  R 4       t	]P                  R 4       t
R tRtV tR# )	EngineHelperc                s    Wn         R # r   container_engine)r   r)      &&r	   __init__ZEngineHelper.__init__g   s     0r   c                s.    \         P                  ! V4      # r   )r   r   r   r   r*   r	   parse_inspectZEngineHelper.parse_inspectj   s    zz$r   c                :    \        R V P                  ,          4      h)z,Error getting devices from unknown format %sZNotImplementedErrorr)   r,   r*   r	   get_devicesZEngineHelper.get_devicesm   s    !:T=R=RR
 	
r   c                r.   )z+Error getting mounts from unknown format %sr/   r,   r*   r	   
get_mountsZEngineHelper.get_mountss   s    !9D<Q<QQ
 	
r   c                r.   )z*Error getting ports from unknown format %sr/   r,   r*   r	   	get_portsZEngineHelper.get_portsy   s    !84;P;PP
 	
r   c                st    VR ,          '       d)   VR ,          R9   d   . # VR ,          P                  R4      # . # )Caps,ZNoneZnonesplitr   r   Zopts   &&&r	   get_capsZEngineHelper.get_caps   s7    <<F|//	<%%c**	r   r(   N)__name__
__module____qualname____firstlineno__r+   r-   abcZabstractmethodr0   r1   r2   r:   __static_attributes____classdictcell____classdict__   @r	   r'   r'   f   sg     1  	
 

 	
 

 	
 

 r   r'   c                   sP   a  ] tR t^t o ]R 4       t]R 4       t]R 4       tRtV t	R# )PodmanDockerHelperc                0    V^ ,          R,          R,          # )r    Z
HostConfigZDevicesr   r,   r*   r	   r0   ZPodmanDockerHelper.get_devices   s    Aw|$Y//r   c                s"    V^ ,          R,          # )r    Mountsr   r,   r*   r	   r1   ZPodmanDockerHelper.get_mounts   s    Awx  r   c                s    . pV^ ,          R,          R,          P                  4        FM  w  r4\        V4      P                  R4      pR\        V^ ,          4      RV^,          /pVP	                  V4       KO  	  V# )r    NetworkSettingsPortsZ/
portNumberprotocol)itemsZstrr7   Zintappend)r   r   portskeyr   Zcontainer_portZnew_ports   &&     r	   r2   ZPodmanDockerHelper.get_ports   ss    q'"34W=CCEJC X^^C0Nc."34N1-H LL" F r   r   N)
r;   r<   r=   r>   r   r0   r1   r2   r@   rA   rB   rD   r	   rE   rE      s?     0 0 ! ! 	 	r   rE   c                   sB   a a ] tR t^t oV 3R lt]R 4       tRtVtV ;t	# )r   c                .   < \         SV `  \        4       R # r   )superr+   r"   r   	__class__   &r	   r+   ZPodmanHelper.__init__       'r   c                s    VR ,          '       d)   VR ,          R9  d   VR ,          P                  R4      # . # V^ ,          R,          # )r3   r4   ZEffectiveCapsr5   r6   r8   r9   r	   r:   ZPodmanHelper.get_caps   sG    <<+/<?O+OV""3'UW 7?++r   r   )
r;   r<   r=   r>   r+   r   r:   r@   rA   __classcell__rS   rC      @@r	   r   r      s#     (   r   r   c                   sD   a a ] tR t^t oV 3R ltV 3R ltR tRtVtV ;t	# )r   c                rP   r   )rQ   r+   r!   rR   rT   r	   r+   ZDockerHelper.__init__   rU   r   c                sH   < \         SV `  V4      pV P                  V4       V# r   )rQ   r-   adjust_json_from_docker)r   r   r   rS   s   && r	   r-   ZDockerHelper.parse_inspect   s%    7(.$$X.r   c                sl    \        V^ ,          R,          R,          \        4      '       g   \        R4      h  V^ ,          R,           F7  pVR,          VR&   VR,          R8X  d   RVR	&   VR,          R
8X  g   K2  R
VR	&   K9  	  R#   \        \        3 d     Lai ; i  \        \        3 d     R# i ; i)zMIf the json comes from a docker call, we need to adjust it to make use
of it.rH   rI   z{Error parsing docker engine inspection JSON structure, try to specify container engine using '--container-engine' parameterrG   ZSourceZsourceZModeZrwZoptionsZroN)r   r   	Exceptionr   r   )r   r   items   && r	   rY   Z$DockerHelper.adjust_json_from_docker   s    	hqk*;<WEtLL R  M		 H--!%hX<4'&*DO<4'&*DO . )$ 		 )$ 		s(   6B =B <	B BBB32B3r   )
r;   r<   r=   r>   r+   r-   rY   r@   rA   rV   rW   rX   r	   r   r      s     (
 r   r   c                   sN   a a ] tR t^t oV 3R ltR t]R 4       tR tRt	Vt
V ;t# )r    c                rP   r   )rQ   r+   r#   rR   rT   r	   r+   ZCrioHelper.__init__   s    %r   c                    . # r   r   r,   r*   r	   r0   ZCrioHelper.get_devices   	     	r   c                s"    VR ,          R,          # )Zstatusmountsr   r,   r*   r	   r1   ZCrioHelper.get_mounts   s    H~h''r   c                r\   r   r   r,   r*   r	   r2   ZCrioHelper.get_ports   r]   r   r   )r;   r<   r=   r>   r+   r0   r   r1   r2   r@   rA   rV   rW   rX   r	   r    r       s-     &
 ( ( r   r    c                   sr   a a ] tR t^t oV 3R lt]R 4       t]R 4       t]R 4       t]R 4       t	Rt
VtV ;t# )r   c                rP   r   )rQ   r+   r$   rR   rT   r	   r+   ZContainerdHelper.__init__   s    *+r   c                s    . pV^ ,          R,          R,          R,           F4  pVP                  RR4      pV'       g   K  WCR&   VP                  V4       K6  	  V# )r    SpecZlinuxdevicespathNZ
PathOnHost)r   rM   )r   r   r`   Zdevicera      &&   r	   r0   ZContainerdHelper.get_devices   sX     1gfog.y99F::fd+Dt'+|$v&	 : r   c                rF   )r    r_   r^   r   r,   r*   r	   r1   ZContainerdHelper.get_mounts   s    Awvx((r   c                s    . p\         P                  ! V^ ,          R,          R,          4       F(  pRVR,          RVR,          /pVP                  V4       K*  	  V# )r    ZLabelsznerdctl/portsrJ   ZHostPortrK   ZProtocol)r   r   rM   )r   r   rN   ZportZ	new_portsrb   r	   r2   ZContainerdHelper.get_ports   sT    JJtAwx0ABD%tJ'7T*EUVILL# C r   c                s    VR ,          '       d)   VR ,          R9   d   . # VR ,          P                  R4      # V^ ,          R,          R,          R,          R,          # )r3   r4   r_   ZprocessZcapabilitiesZ	effectiver5   r6   r8   r9   r	   r:   ZContainerdHelper.get_caps   sO    <<F|//	<%%c**Awvy).9+FFr   r   )r;   r<   r=   r>   r+   r   r0   r1   r2   r:   r@   rA   rV   rW   rX   r	   r   r      sb     , 
 
 ) )   G G Gr   r   c                 sl    V P                  4       P                  R 4      ^,          P                  R4      # )Z
r4   )Zdecoder7   )r   r   r	   	parse_caprc     s)    ;;=t$Q'--c22r   c                 s^    V P                  R 4      ^,          P                  R4      ^,          # )=Z:r6   )Zcontextr   r	   context_to_typere     s&    ==a &&s+A..r   c                 s    V P                  4       pR P                  \        \        V4      VP                  R7      4      # ) )rO   )r7   ZjoinZsortedZsetindex)ZstringZpermss   & r	   remove_dupe_permsrh     s+    LLNE88F3u:5;;788r   c                 s&   . pV P                  4        EFy  p. pVP                  R 4      pRV^ ,          9  d   K'  V Fu  pRV9   d   VP                  \        V4      4       RV9   d   VP                  \        V4      4       RV9   g   KN  VP                  VP                  R4      ^,          4       Kw  	  VP	                  R4      pV^,           pVP                  WG,          4       V Fz  pV^ ,          V^ ,          8X  g   K  V^,          V^,          8X  g   K1  V^,          V^,          8X  g   KH  V^,          R ,           V^,          ,           V^&   VP                  V4       K|  	  \        V^,          4      V^&   VP                  V4       EK|  	  V# )rf   ztype=AVCZscontextZtcontextZtclassrd   Z{)Z
splitlinesr7   rM   re   rg   Zremoverh   )	r   Zappend_rulesZavcZnew_rulerL   r[   Zopen_bracketZpermZrules	   &        r	   parse_avc_fileri     sJ   L 		#U1X%DT! 56T! 564

3 23  {{3'a$ DQ8A;&Gx{*Gx{*"1gmhqk9##D) ! (4H%9 !< r   c                 sl    V \         R R.,           9   d   V R 8X  d   \        # V # \        RV ,          4      h)ZCRIOr   z%Container Engine %s is not supported.)
ENGINE_ALLr#   rZ   )r%   r   r	   r   r   8  s8    *}44f$?/QRRr   )r?   r   r"   r#   r!   r$   rj   r   r   r   r   r&   ZABCr'   rE   r   r   r    r   rc   re   rh   ri   r   r   r   r	   <module>rk      s          !  [-9JK

&,0377 B ,% % B &$G| $GN3/9
!HSr   