+
    ima  c                   s.   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RIHtHt ^ RIHt ^ RIHt ^RIHtHtHtH t  ^RI!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t, ]PZ                  ! ].4      t/]P`                  ! 4       R	 R
 l4       t1R R lt2R R lt3R R lt4 ! R R]4      t5 ! R R] 4      t6 ! R R4      t7 ! R R]4      t8 ! R R]]4      t9 ! R R]Pt                  4      t; ! R R]]4      t<R# )i    N)Path)Callable	GeneratorIterable)Handle	PathWatch)Event)Listener)AsyncChannelChannelChannelErrorGeneratorChannel)JsonDictJsonDocument	JsonError
JsonObjectget_boolget_int
get_objectget_strget_str_or_intget_strvjson_merge_and_filter_patchc                s$    V ^8  d   QhR\         /# )   returnintformat   "@/usr/lib/python3.14/site-packages/cockpit/channels/filesystem.py__annotate__r   -   s     7 7# 7    c                  s    \         P                  ! R \        R4      P                  4       \         P                  4      p T ;'       d$    \        V P                  ^4      ^4      ;'       g    ^?# )z^Umask:\s*0([0-7]*)$z/proc/self/status)reZsearchr    Z	read_textZMr   group)Zmatchs    r   my_umaskr#   ,   sP    II-t4G/H/R/R/TVXVZVZ[E,,c%++a.!,666r    c                sD    V ^8  d   QhR\         P                  R\        /# )r   bufr   )osZstat_resultstrr   r   r   r   r   2   s"     V Vr~~ V# Vr    c           
      s    R V P                    RV P                   RV P                  R RV P                   RV P                   2
# )z1:-Zo)Zst_inost_mtimest_modest_uidst_gidr$      &r   tag_from_statr.   2   s=    

|1S\\N!CKK?!CJJ<qUUr    c                s     V ^8  d   QhRRRR/# )r   pathzint | str | Pathr   
str | None r   r   r   r   r   6   s      * | r    c                 s     \        \        P                  ! V 4      4      #   \         d     R # \         d     R# i ; i)r'   N)r.   r%   statFileNotFoundErrorOSError)r/   r-   r   tag_from_pathr5   6   s7    RWWT]++  s   ! ====c                (    V ^8  d   QhR\         RR/# )r   fdr   r0   r   r   r   r   r   r   ?   s      C L r    c                 sf     \        \        P                  ! V 4      4      #   \         d     R # i ; iN)r.   r%   fstatr4   )r7   r-   r   tag_from_fdr:   ?   s,    RXXb\** s   ! 00c                   sH   a  ] tR t^Ht o RtV 3R lR ltV 3R lR ltRtV tR# )FsListChannelZfslist1c                s(   < V ^8  d   QhRS[ RRRR/# )r   evententryzos.DirEntry[str]r   Nr&   r   __classdict__   "r   r   FsListChannel.__annotate__K   s(     
@ 
@ 
@,> 
@4 
@r    c                s    VP                  4       '       d   R pM4VP                  4       '       d   RpMVP                  4       '       d   RpMRpV P                  WP                  VR7       R# )linkfile	directoryZspecial)r<   r/   typeN)Z
is_symlinkZis_fileZis_dir	send_jsonname)selfr<   r=   modes   &&& r   
send_entryZFsListChannel.send_entryK   sO    D]]__D\\^^DDU$?r    c                s"   < V ^8  d   QhRRRR/# )r   optionsr   r   Nr1   r?   rA   r   r   rB   W   s      |  r    c                s,   \        VR 4      pVP                  RR4      pV'       d   \        RRR7      h \        P                  ! V4      pT P                  4        T F  pT P                  R
T4       K  	  T'       g#   T P                  4        T P                  4        R# R#   \
         d   p\        R\        T4      R7      ThRp?i\         d   p\        R\        T4      R7      ThRp?i\         d   p\        R	\        T4      R7      ThRp?ii ; i)r/   watchTznot-supportedz)watching is not implemented, use fswatch1message	not-foundNaccess-deniedinternal-errorZpresent)r   getr
   r%   Zscandirr3   r&   PermissionErrorr4   readyrK   doneclose)rI   rL   r/   rM   Zscan_direrrorr=   s   &&     r   do_openZFsListChannel.do_openW   s    w'GT*8cdd	Pzz$'H 	

EOOIu-  IIKJJL  ! 	K{CJ?UJ 	OE
CN 	P/UD%O	Ps;   B" "D-CDDC))D6D7DDr1   N)	__name__
__module____qualname____firstlineno__payloadrK   rY   __static_attributes____classdictcell__r@      @r   r;   r;   H   s      G
@ 
@ r    r;   c                   s6   a  ] tR t^pt o RtV 3R lR ltRtV tR# )FsReadChannelZfsread1c                s>   < V ^8  d   QhRS[ RS[S[RS[ 3,          /# r   rL   r   N)r   r   Zbytesr?   rA   r   r   ZFsReadChannel.__annotate__s   s+     "L "LZ "LIeT:>U4V "Lr    c              #  s  "   \        VR 4      p\        VRR4      p\        P                  RV4        \	        VR4      ;_uu_ 4       p\
        P                  ! VP                  4       4      pVR8w  d   VP                  V8  d   \        R4      hV P                  '       dD   \        P                  ! VP                  4      '       d   V P                  VP                  R7       MV P                  4         VP                  \        P                   4      pVR8X  d   Mg\        P                  R\#        V4      4       V P                  '       g1   VP%                  RR4      P'                  R	R
7      P)                  4       pVx  K  RRR4       R\+        X4      /#   + '       g   i     L; i  \,         d    RR/u # \.         d   p\        R4      ThRp?i\0         d   p\        R\3        T4      R7      ThRp?ii ; i5i)r/   max_read_sizezOpening file "%s" for readingZrbz	too-large)Z	size_hintr    z  ...sending %d bytess    ZignoreZerrorsNtagr'   rQ   rR   rN   i   i)r   r   loggerdebugopenr%   r2   Zfilenost_sizer
   Z	is_binaryZS_ISREGr)   rU   Zread1r	   Z
BLOCK_SIZElenZreplacedecodeZencoder.   r3   rT   r4   r&   )rI   rL   r/   re   Zfilepr$   dataexc   &&      r   do_yield_dataZFsReadChannel.do_yield_datas   s    w':JK4d;	LdD!!Uggelln- B&3;;+F&{33>>>dll3;;&?&?JJJ5JJL ;;w'9'9:Ds{LL!8#d)D>>>#||E37>>h>OVVXJ# "& =-..' "!* ! 	 3< 	9/S8 	L/SBK	Lsr   0G?F+ AF!%FB<FF+ G?F(	#F+ +G<:G?<G<G<GG<G< G77G<<G?r1   N)rZ   r[   r\   r]   r^   rq   r_   r`   ra   rb   r   rc   rc   p   s     G"L "Lr    rc   c                   sR   a  ] tR t^t o RtRt0 RmtRtV 3R lR ltV 3R lt	Rt
V tR# )FSReplaceAttrsNc                $   < V ^8  d   QhRS[ RR/# )r   valuer   Nr   r?   rA   r   r   FSReplaceAttrs.__annotate__   s      j T r    c                s   VP                  4       V P                  ,
          pV'       d+   \        R RRP                  V4       2\	        V4      R7      Rh\        VRR4      V n        \        VRR4      p\        VRR4      pVe   Vf   \        R RR	7      hVe   Vf   \        R R
R	7      h\        V\        4      '       d(    \        P                  ! V4      P                  V n        MW0n        \        V\        4      '       d)    \        P                   ! V4      P"                  V n        R# W@n        R#   \         d    \        RRT 2R	7      Rhi ; i  \         d    \        RRT 2R	7      Rhi ; i)zprotocol-errorz%"attrs" contains unsupported key(s): Z,)rO   unsupported_attrsNrJ   userr"   z3"group" attribute is empty while "user" is providedrN   z3"user" attribute is empty while "group" is providedrP   zuid not found for zgid not found for )Zkeyssupported_attrsr
   joinZlistr   rJ   r   
isinstancer&   pwdZgetpwnamZpw_uiduidKeyErrorgrpZgetgrnamZgr_gidgid)rI   rt   rw   rx   r"      &&   r   __init__ZFSReplaceAttrs.__init__   sd   !JJL4+?+??/)NsxxXiOjNk'l156G1HJOST E640	eVT2ugt4/9noo/9noodC  _<<-44 HeS!!`<<.55 H  _";:LTF8STZ^^_  `";:LUG8TU[__`s   %D3 %E 3EE0c                s8   < V ^8  d   Qh/ R;R&   R;R&   R;R&   # )r   
int | Noner}   r   rJ   r1   r?   rA   r   r   rv      s(     	 	  	 r    )r   rJ   r}   >   rJ   rx   r"   )rZ   r[   r\   r]   r}   r   ry   rJ   r   __annotate_func__r_   r`   ra   rb   r   rr   rr      s*     CC/OD   r    rr   c                   s^   a  ] tR t^t o RtR
tV 3R lR ltV 3R lR ltV 3R lR ltRt	V t
R	# )FsReplaceChannelZ
fsreplace1c                s*   < V ^8  d   QhRS[ RRRS[ /# )r   r/   rg   r0   r   r>   r?   rA   r   r   FsReplaceChannel.__annotate__   s"      3 \ c r    c                s    Ve   V\        V4      8w  d   \        R4      h\        P                  ! \        4      ;_uu_ 4        \
        P                  ! V4       R R R 4       R#   + '       g   i     R# ; i)Nchange-conflictr'   )r5   r
   
contextlibsuppressr3   r%   unlink)rI   r/   rg      &&&r   deleteZFsReplaceChannel.delete   sP    ?smD&99011  !233IIdO 4 43s   A##A4	c                s4   < V ^8  d   QhRS[ RRRRRRRR	R
R/# )r   r/   rg   r0   rn   bytes | Nonesizer   attrszFSReplaceAttrs | Noner   r>   r?   rA   r   r   r      sG     S# S#S#*S#2@S#HTS#&S# 
S#r    c                sB  a"   \         P                  P                  V4      w  rg\        P                  ! VR V R2R7      w  rRR V3R lllp
RR V3R lllp VeY   \
        P                  RW4       V'       d+   V P                  \         P                  V^ V4      G Rj  xL
  V P                  4        ^ pVeU   V P                  \         P                  W4      G Rj  xL
  V\        V4      ,          pV P                  4       G Rj  xL
 pKX  VeE   W8  d?   \
        P                  R	W4       V P                  \         P                  W4      G Rj  xL
  V P                  \         P                  V4      G Rj  xL
  Vf+   V! V4       V
! V4       \         P                  ! W4       Rp	EM(VR8X  d(   V! V4       V
! V4       \         P                   ! W4       M\         P"                  ! V\         P$                  4      p \         P&                  ! V4      pV\)        V4      8w  d   \+        R
4      hV! V\&        P,                  ! VP.                  4      4       V
! W4        \         P0                  ! VR4      p\         P2                  ! VRV4       \
        P                  RW4       \         P8                  ! V4       \         P                  ! W4       Rp	\         P8                  ! V4       V	e   \         P:                  ! V	4       \=        T4      #  ELp EL5 EL EL EL  \4         d!   p\
        P7                  RT4        Rp?LRp?ii ; i  \         P8                  ! T4       i ; i  \         P8                  ! T4       T	e   \         P:                  ! T	4       i i ; i5i).r'   )dirZprefixNc                $    V ^8  d   QhRRRRRR/# )r   r7   r   r$   zos.stat_result | Noner   Nr1   r   r   r   r   3FsReplaceChannel.set_contents.<locals>.__annotate__   s#     	6 	6% 	6.E 	6QU 	6r    c                 s  < SeK   SP                   e=   SP                  e/   \        P                  ! V SP                   SP                  4       R # Ve.   \        P                  ! WP                  VP
                  4       R # R # r8   )r}   r   r%   Zfchownr*   r+   )r7   r$   r      &&r   chown_if_requiredZ8FsReplaceChannel.set_contents.<locals>.chown_if_required   sS     UYY%:uyy?T		"eii3		"jj#**5 !r    c                r   )r   r7   r   rJ   r   r   Nr1   r   r   r   r   r      s!     	  	  	 \ 	 T 	 r    c                 s   < Se   SP                   e   SP                   pMVf   R\        4       ( ,          p\        P                  ! W4       R # )Ni  )rJ   r#   r%   Zfchmod)r7   rJ   r   r   r   apply_file_modeZ6FsReplaceChannel.set_contents.<locals>.apply_file_mode   s:     UZZ%;zz
{*IIbr    zfallocate(%s.tmp, %d)zftruncate(%s.tmp, %d)r   zsecurity.selinuxz SELinux context '%s' set on '%s'zAError getting or setting SELinux context from original file: '%s'r8   )r%   r/   ZsplittempfileZmkstemprh   ri   Z	in_threadZposix_fallocaterU   Zwriterl   readZ	ftruncateZ	fdatasyncZrenamerC   rj   ZO_RDONLYr2   r.   r
   S_IMODEr)   ZgetxattrZsetxattrr4   Z	exceptionrW   r   r5   )rI   r/   rg   rn   r   r   ZdirnameZbasenamer7   Ztmpnamer   r   ZwrittenZpath_fdr$   Zselinux_contextro   s   &&&&&f           r   set_contentsZFsReplaceChannel.set_contents   s     GGMM$/&&7Qxj?K	6 	6	  	 ;	#4dA..););RDIII

G"nnRXXr8883t9$!YY[(GN4dDnnR\\2???..r222{  #!"%		'(#!"%& ''$4&'''*CmC00*+<==#BS[[(AB%b.s*,++g?Q*RB(:OL%G_ HHW%		'( HHRL"		'"T""s J
 9( @2> # s(()lnqrrs HHW% HHRL"		'" #s   ANAM) !L"=M) L )M) 	L
A	M) L'M) ;L<BM) A M #AL  (.M) ;NM) M) M) M) M)  M+MM MM M&&M) )3NNc                s&   < V ^8  d   QhRS[ RS[ /# )r   rL   r   ru   r?   rA   r   r   r      s     $L $L $L
 $Lr    c                s  "   \        VR \        R4      p\        VR4      p\        VRR4      p\        VRR4      p Ve   V P	                  W5RWB4      G Rj  xL
 pMZV P                  4        V P                  4       G Rj  xL
 pVf   V P                  W54      pMV P	                  W5VRV4      G Rj  xL
 pV P                  4        RV/#  Ls LL L  \         d   p\        R4      ThRp?i\         d   p\        R4      ThRp?i\         d   p\        R4      ThRp?i\         d   p\        R\        T4      R	7      ThRp?i\         d   p\        R
\        T4      R	7      ThRp?ii ; i5i)r   Nr/   r   rg   r    rP   r   rQ   rN   rR   )r   rr   r   r   r   rU   r   r   rV   r3   r
   ZFileExistsErrorrT   ZIsADirectoryErrorr&   r4   )rI   rL   r   r/   r   rg   rn   ro   rp   r   runZFsReplaceChannel.run   sP    7G^TBw'w-gud+	L
  --ddJJ

!YY[(<++d0C $ 1 1$T4 OOCIIK3< K )
 P
 ! 	5{+4 	;01s: 	9/S8  	KCAsJ 	L/SBK	Ls   9E-C C
(C ?C 1C 1C2C 	E-
C C C E*C''E*4E*5DE*E*DE*(E*)E  E*E*E%%E**E-r1   N)r   )rZ   r[   r\   r]   r^   Zcapabilitiesr   r   r   r_   r`   ra   rb   r   r   r      s2     GL S# S#j$L $Lr    r   c                   s   a  ] tR tRt o RtRtRtRt]V 3R lR l4       t	V 3R lR lt
V 3R	 lR
 ltV 3R lR ltV 3R lR ltV 3R ltRtV tR# )FsWatchChanneliG  Zfswatch1NFc                rs   )r   maskr   ztuple[str, str | None])InotifyEventr?   rA   r   r   FsWatchChannel.__annotate__S  s     
# 
#\ 
#6N 
#r    c                sv   \         P                  ;'       g    \         P                  V 9   d   R \         P                  V 9   d   R3# R3# \         P                  V 9   g+   \         P
                  V 9   g   \         P                  V 9   d   R# \         P                  V 9   d   R# \         P                  V 9   d   R# R# )createdrE   rD   )deletedN)zattribute-changedN)z	done-hintN)ZchangedN)	r   CREATEMOVED_TOZISDIR
MOVED_FROMDELETEZDELETE_SELFZATTRIBZCLOSE_WRITE)r   r-   r   mask_to_event_and_typeZ%FsWatchChannel.mask_to_event_and_typeR  s    88<#8#8TA\-?-?4-GkSSVSS$$,0C0Ct0K|OgOgkoOo""  D(,,%%-$$""r    c                .   < V ^8  d   QhRS[ RS[RRRR/# )r   r   _cookierH   r   r   Nr   r   r?   rA   r   r   r   _  s0     T T\ TC T~ TZ^ Tr    c                s   \         P                  R V P                  W4       V P                  V4      w  rEV'       dY   \        P
                  P                  V P                  VP                  4       4      p\        V4      pV P                  WFWuR7       R# \        V P                  4      pWpP                  8X  d   R# Wpn
        V P                  W@P                  V P                  VR7       R# )z%do_inotify_event(%s): mask %X name %s)r<   r/   rg   rF   N)rh   ri   _pathr   r%   r/   rz   rm   r5   rG   _tag)rI   r   r   rH   r<   Ztype_r/   rg   s   &&&&    r   do_inotify_eventZFsWatchChannel.do_inotify_event_  s    <djj$U224877<<

DKKM:D%CNNsNG  

+CiiINNZZTYYUNSr    c                s&   < V ^8  d   QhRRRRRR/# )r   r7   r   errr   Nr1   r?   rA   r   r   r   o  s'     a al a a$ ar    c                s   \         P                  R V P                  W4       V'       d   \        V4      MRV n        V P
                  '       d5   T P                  V'       d   RMRV P                  V P                  R7       R# R# )z&do_identity_changed(%s): fd %s, err %sr'   r   r   )r<   r/   rg   N)rh   ri   r   r:   r   _activerG   rI   r7   r   r   r   do_identity_changedZ"FsWatchChannel.do_identity_changedo  sU    =tzz2S')KOs	<<<NNbidjjVZV_V_N` r    c                rs   rd   ru   r?   rA   r   r   r   u  s      z d r    c                s    \        VR 4      V n        RV n        RV n        \	        V P                  V 4      V n        RV n        V P                  4        R# )r/   NFT)r   r   r   r   r   _watchrU   )rI   rL      &&r   rY   ZFsWatchChannel.do_openu  s@    Wf-
	

D1

r    c                   < V ^8  d   QhRR/# r   r   Nr1   r?   rA   r   r   r           $ r    c                s    V P                   e"   V P                   P                  4        R V n         V P                  4        R # r8   )r   rW   rI   r-   r   do_closeZFsWatchChannel.do_close  s,    ;;"KKDK

r    c                s$   < V ^8  d   Qh/ R;R&   # )r   r0   r   r1   r?   rA   r   r   r   G  s     
 r    )r   r   r   r   )rZ   r[   r\   r]   r^   r   r   r   staticmethodr   r   r   rY   r   r   r_   r`   ra   rb   r   r   r   G  sa     GDF G
# 
#T T a a  q  r    r   c                   s    ] tR tRtRtRtRtR# )Followi  FTr1   N)rZ   r[   r\   r]   NOYESr_   r1   r    r   r   r     s    	B
Cr    r   c                   sD  a  ] tR tRt o RtRtRtRtRt]	V 3R lR l4       t
RR/V 3R	 lR
 lltRR/V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! ltR"tV tR# )#FsInfoChanneli  Zfsinfo Nc                s4   < V ^8  d   QhRS[ S[,          RR/# )r   r   r   z1Callable[[int, str, Follow], JsonDocument | None])r   r&   r?   rA   r   r   FsInfoChannel.__annotate__  s      = =Xc] =/b =r    c                sL  aaaaaa \         P                  ! 4       R  R l4       o\         P                  ! 4       R R l4       oRR/R R llo\        P                  R\        P                  R	\        P
                  R
\        P                  R\        P                  R\        P                  R\        P                  R/oRV3R lR\        RR RR RR RR RR RV3R lRV3R l/	o\        ;QJ d    . V3R  lV  4       F  NK  	  5M! V3R  lV  4       4      oR! VV3R" llpV# )#c                r6   )r   r}   r   	str | intr   r   r   r   r   1FsInfoChannel.make_getattrs.<locals>.__annotate__  s     	 	# 	+ 	r    c                 j     \         P                  ! V 4      P                  #   \         d    T u # i ; ir8   )r|   ZgetpwuidZpw_namer~   )r}   r-   r   get_userZ-FsInfoChannel.make_getattrs.<locals>.get_user  0    ||C(000 
   " 22c                r6   )r   r   r   r   r   r   r   r   r   r     s     	 	3 	; 	r    c                 r   r8   )r   ZgetgrgidZgr_namer~   )r   r-   r   	get_groupZ.FsInfoChannel.make_getattrs.<locals>.get_group  r   r   follow_symlinksFc          
      sL    V ^8  d   QhR\         R\        R\         R\        RR/# )r   dir_fdrH   rJ   r   r   zbool | None)r   r&   boolr   r   r   r   r     s0     	 	s 	# 	S 	d 	_l 	r    c                s     V'       d   \         P                  ! WWR 7      # \         P                  ! RV  2VRR7      #   \         d     R# i ; i))r   r   /proc/self/fd/Tr   N)r%   Zaccessr4   )r   rH   rJ   r   s   &&&$r   
get_accessZ/FsInfoChannel.make_getattrs.<locals>.get_access  sJ    99T`` 99~fX%>VZ[[ s   > > > AAZregr   ZlnkZchrZblkZfifoZsockrF   c                 sb   < SP                  \        P                  ! V P                  4      4      # r8   )rS   r2   S_IFMTr)   )r$   
stat_types   &r   <lambda>-FsInfoChannel.make_getattrs.<locals>.<lambda>  s    
t{{3;;/G Hr    rg   rJ   c                 sB    \         P                  ! V P                  4      # r8   )r2   r   r)   r,   r-   r   r   r     s    S[[ 9r    r   c                     V P                   # r8   )rk   r,   r-   r   r   r     s    r    r}   c                 r   r8   r*   r,   r-   r   r   r         szzr    r   c                 r   r8   r+   r,   r-   r   r   r     r   r    Zmtimec                 r   r8   )r(   r,   r-   r   r   r     s    r    rx   c                 (   < S! V P                   4      # r8   r   )r$   r   r   r   r   r     s     4r    r"   c                 r   r8   r   )r$   r   r   r   r   r     s    3::!6r    c              3   sL   <"   T F  qSP                  VR  4      3x  K  	  R# 5i)c                 s    R # r8   r1   )Z_r-   r   r   Z7FsInfoChannel.make_getattrs.<locals>.<genexpr>.<lambda>  s    Tr    N)rS   )Z.0keyavailable_stat_getterss   & r   Z	<genexpr>Z.FsInfoChannel.make_getattrs.<locals>.<genexpr>  s%     e_dX[#9#=#=c>#RS_ds   !$c                s@    V ^8  d   QhR\         R\        R\        RR/# )r   r7   rH   followr   zJsonDict | None)r   r&   r   r   r   r   r   r     s)     	 	# 	S 	& 	=N 	r    c                 s   <  V'       d#   \         P                  ! WP                  V R 7      M\         P                  ! V 4      pS
 UUu/ uF  w  rTYT! T4      bK  	  pppRT9   dy   \        P                  ! TP                  4      \        P                  8X  dF   \        P                  ! \
        4      ;_uu_ 4        \         P                  ! YR7      TR&   RRR4       R\         P                  3R\         P                  3R\         P                  33 F#  w  rxYv9   g   K  S	! YYP                  R7      Yg&   K%  	  T#   \         d     R# \
         d"    S
 UUu/ uF  w  rTRbK
  	  Mu uppi uppu # i ; iu uppi   + '       g   i     L; i))r   r   Ntarget)r   zr-okzw-okzx-okr   )r%   r2   rt   r9   r3   r4   r   r)   S_IFLNKr   r   ZreadlinkZR_OKZW_OKZX_OK)r7   rH   r   r$   Zfuncr   ZresultZattrr   r   stat_getterss   &&&      r   	get_attrsZ.FsInfoChannel.make_getattrs.<locals>.get_attrs  s1   CPTbggdLLLZ\ZbZbceZf 7CClc49nlFC6!dkk#++&>$,,&N((11'){{4'CF8$ 2 #)"''!2VRWW4EPRPWPWGX Y>#-bll#[FL !Z M %  C5AB\ztd
\BBC D 21s@   D; 8D; E7:E=;E4	E4E4E'&E43E4=F	)	functools	lru_cacher2   ZS_IFREGS_IFDIRr   ZS_IFCHRZS_IFBLKZS_IFIFOZS_IFSOCKr.   Ztuple)r   r   r   r   r   r   r   r   s   & @@@@@@r   make_getattrsZFsInfoChannel.make_getattrs  s    
				 
	 
				 
		UZ 	 llE4<<eUYUaUachllE4<<PVX
 H=9+))-46
"
 ue_deuue_dee	 	( r    resetFc                s*   < V ^8  d   QhRS[ RS[RR/# )r   updatesr   r   N)r   r   r?   rA   r   r   r     s"     $ $8 $t $ $r    c               s   V'       d   \        V P                  4      \        V4      ,          '       dM   V P                  \        P	                  V P                  4      R R7       RR /V n        VP                  RR7       M.VP                  \        P	                  V P                  4      4       \        V P                  V4       V'       d   V P                  V4       R# R# )T)partialr   N)setcurrent_valuerG   dictZfromkeysupdater   )rI   r   r   s   &&$r   send_updateZFsInfoChannel.send_update  s    4%%&W55t}}T-?-?@$O&/%6"t, t}}T-?-?@A#D$6$6@NN7# r    c                s(   < V ^8  d   QhRRRS[ RR/# )r   r   set[str]r   r   N)r   r?   rA   r   r   r     s"     6 6j 6D 6T 6r    c          	     s   V P                   f   Q hV Uu/ uF.  q3V P                  V P                   V\        P                  4      bK0  	  ppVP	                  R/ 4      p\        V\        4      '       g   Q hV P                  '       d   WER&   V P                  '       d   / ;VR&   pVP                  4        Uu0 uF,  p\        V\        4      '       g   K  VP                  R4      kK.  	  up Fx  p\        V\        4      '       g   K  VR8w  g   K$  VR8X  g!   RV9   g   V P                  V4      '       d   KK  V P                  V P                   V\        P                  4      Wc&   Kz  	  V P                  RV/VR	7       R # u upi u upi )
Nr   entriestargetsr   r   z../infor   )r7   getattrsr   r   Zpopr{   r   effective_fnmatchr   ZvaluesrS   r&   interestingr   r   )rI   r   r   rH   r   r   r   es   &&$     r   process_updateZFsInfoChannel.process_update  s8   ww"""W^_W^t4==$		#JJW^_{{2r"$%%%%!!!%O<<<(**DOg 3:..2BZ2BQjQRTXFYx2BZdC((TS[t4;K;KD;Q;Q(,dggtVZZ(P	 [ 	&$u5- `  [s   4E>6FFc                r   r   r1   r?   rA   r   r   r     s       r    c                s    V P                   f   Q hV P                   '       d   V P                  V P                   4       R V n         R # r8   )pendingr   r   r-   r   process_pending_updatesZ%FsInfoChannel.process_pending_updates  s4    ||'''<<<-r    c                &   < V ^8  d   QhRS[ RS[/# )r   rH   r   )r&   r   r?   rA   r   r   r     s     A A A Ar    c                sT    VR 8X  d   R# \         P                   ! WP                  4      # )r   T)fnmatchr   rI   rH   r   r   r   ZFsInfoChannel.interesting  s#    2: ??4)?)?@@r    c                rs   )r   rH   r   Nr>   r?   rA   r   r   r     s      C D r    c                s   V P                  V4      '       g   R # V P                  f?   \        P                  ! 4       P	                  RV P
                  4       \        4       V n        V P                  P                  V4       R # )Ng?)r   r   asyncioZget_running_loopZ
call_laterr   r   Zaddr   r   r   schedule_updateZFsInfoChannel.schedule_update  sZ    %%<<$$&11#t7S7ST5DLr    c                rs   )r   r   r   Nr   r?   rA   r   r   r     s        r    c           
     sB   V\         P                  8X  d   R pMBV\         P                  \         P                  39   d   RpMV\         P                  8X  d   RpMRpV P                  RRVR\        P                  ! V4      R\         P                  V,          //RR	7       R
# )rP   rQ   znot-directoryrR   rX   problemrO   errnoTr   N)	r   ZENOENTZEPERMZEACCESENOTDIRr   r%   ZstrerrorZ	errorcode)rI   r   r      && r   report_errorZFsInfoChannel.report_error  s    %,,!GU[[%,,//%GEMM!%G&G'w	2;;s+;WeooVYFZ$
  	 	r    c                r   )r   r7   r   )r   r   r?   rA   r   r   r   -  s      V  r    c                sD   V P                   '       d"   V P                  P                  R 4      '       g   R# \        P                  ! V4      p\
        P                  ! VP                  4      \
        P                  8w  d"   V P                  \        P                  4       R# R# )r   FT)rM   r/   Zendswithr%   r9   r2   r   r)   r   r   r   r   )rI   r7   r$   r   r   flag_onlydir_errorZ FsInfoChannel.flag_onlydir_error-  sb     zzz!3!3C!8!8hhrl;;s{{#t||3emm,r    c                rs   )r   r7   r   N)r   r?   rA   r   r   r   ;  s     U Uv U$ Ur    c                s   V P                  V4      '       d   R # Wn        R0pV P                  '       dE    VP                  \        P
                  ! RV P                   24      4       V P                  V n        T P                  V Uu0 uF  q0P                  V4      '       g   K  VkK  	  upRR7       R #   \         d    RT n         LQi ; iu upi )Nr   r   Tr   )
r   r7   r   r   r%   Zlistdirr   r4   r   r   )rI   r7   r   r   s   &&  r   report_initial_stateZ"FsInfoChannel.report_initial_state;  s    ""2&&$<<<,rzzN477)*DEF)-&
 	G13C3CA3FQQGtT	  ,)+&, Hs   AB6 C%C6C
Cc                r   )r   r   cookierawnamer   r   Nr   r?   rA   r   r   r   L  s*     	% 	%\ 	%3 	% 	%\` 	%r    c                s   \         P                  R WV4       T;'       g    RP                  RR7      pV P                  V4       V'       dr   V\        P
                  \        P                  ,          \        P                  ,          \        P                  ,          ,          '       d   V P                  R4       R# R# R# )zdo_inotify_event(%r, %r, %r)r    Zsurrogateescaperf   r   N)	rh   ri   rm   r   r   r   r   r   r   )rI   r   r  r  rH   s   &&&& r   r   ZFsInfoChannel.do_inotify_eventL  s    3T7K3&&.?&@T"DL//,2E2EE(1124@4K4KL M M   $M4r    c                s&   < V ^8  d   QhRRRRRR/# )r   r7   Handle | Noner   r   r   Nr1   r?   rA   r   r   r   W  s"     # #o #L #T #r    c                s    \         P                  R W4       V P                  e   V P                  P                  4        Vf   Vf   Q hV P	                  V4       R# V P                  V4       R# )zdo_identity_changed(%r, %r)N)rh   ri   r   Zclearr  r   r   r   r   r   Z!FsInfoChannel.do_identity_changedW  sV    2B<<<#LL ;>!>%%b)c"r    c                r   r   r1   r?   rA   r   r   r   d  r   r    c                sz    V P                   f   Q hV P                   P                  4        V P                  4        R # r8   )
path_watchrW   r   r-   r   r   ZFsInfoChannel.do_closed  s+    ***

r    c                rs   rd   ru   r?   rA   r   r   r   j  s     $9 $9z $9d $9r    c                s   \        VR 4      V n        \        P                  P                  V P                  4      '       g   \	        VR4      h\        \        VR4      4      pV P                  VRR0,
          4      V n        \        TRRV9   d   RMR4      V n	        RV9   V n
        \        VRR	R
7      V n        \        VRRR
7      V n        V P                  '       d   V P                  '       g   \	        VR4      hV P                  '       d   V P                  '       g   \	        VR4      h/ V n        V P                  4        V P                  '       g    \         P"                  ! V P                  V P                  '       d   \        P$                  M$\        P$                  \        P&                  ,          4      pV P)                  V4       VP+                  4        V P3                  4        V P+                  4        R# \5        V P                  V 4      V n        R#   \,         d:   pTP.                  '       g   Q hT P1                  TP.                  4        Rp?L~Rp?ii ; i)r/   z"path" must be an absolute pathr   r   r   r   Z*r   r   T)ZdefaultrM   Fz>"watch: true" and "follow: false" are (currently) incompatiblezB`targets: "stat"` and `follow: false` are (currently) incompatibleN)r   r/   r%   Zisabsr   r   r   r   r   r   r   r   r   rM   r   rU   r   rj   ZO_PATHZ
O_NOFOLLOWr  rW   r4   r   r   rV   r   r  )rI   rL   r   r7   ro   r   r   rY   ZFsInfoChannel.do_openj  s   GV,	ww}}TYY''G%FGGHWg./**5Iy3I+IJw	)u:L3RTU E)w$?gw>
:::dkkkG%eff<<<G%ijj

zzz[[BII"))VXVcVcJcd
 ))"-
IIKJJL (		48DO  -yyy y!!#)),,-s   ,H 9H I '/II c                s   < V ^8  d   Qh/ S[ ;R&   R;R&   S[ ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[ ;R	&   R
;R&   R;R&   R;R&   R;R&   # )r   r/   r   r   r   r   r   rM   r   r   r  r7   zset[str] | Noner   zPathWatch | Noner  z*Callable[[int, str, Follow], JsonDocument]r   )r&   r   r   r?   rA   r   r   r     s      I	 
   L  M  L  K      	  %   #)! " ;:# r    )r   r   r7   r   r   r   r/   r  r   r   rM   )rZ   r[   r\   r]   r^   r   r7   r   r  r   r   r   r   r   r   r   r   r   r  r   r   r   rY   r   r_   r`   ra   rb   r   r   r     s     G  B!%G%)J = =~$e $ $65 6 66 A A   U U"	% 	%# # $9 $9  r    r   )=r   r   Zenumr   r   r   r   Zloggingr%   r|   r!   r2   r   Zpathlibr    Ztypingr   r   r   Zcockpit._vendor.systemd_ctypesr   r   Z&cockpit._vendor.systemd_ctypes.inotifyr   r   Z(cockpit._vendor.systemd_ctypes.pathwatchr   ZPathWatchListenerZchannelr   r	   r
   r   Zjsonutilr   r   r   r   r   r   r   r   r   r   r   Z	getLoggerrZ   rh   r   r#   r.   r5   r:   r;   rc   rr   r   r   ZEnumr   r   r1   r    r   <module>r     s         
  	 
 	    0 0 < H R K K    
		8	$ 7 7
V%G %P%L$ %LP% %PDL| DLN<W/ <~TYY 
C9G. C9r    