+
     hM  c                   s   ^ RI t ^ RIt^ RIHt ^ RIHtHtHt ^ RIH	t	  ! R R]
4      t ! R R]4      tR	]P                  R
]P                  /t ! R R]4      t ! R R]4      t ! R R]4      tR t ! R R4      t ! R R]4      t ! R R]4      tR]! ^R4      R]! ^R4      R]! ^R4      R]! 4       R]! ^R4      R ]! ^R!4      R"]! ^R4      R#]! ^R$4      R%]! ^R%4      R]! 4       /
t ! R& R'4      t ! R( R)]4      t]P5                  R*]! ]R ,          4      R+]! 4       R,]! ]R,          4      /4        ! R- R.4      t ! R/ R0]4      t ! R1 R24      t ! R3 R44      tR5 tR6 t ]! ]! ]R,          ]! 4       .4      4      t!R7 t"^R+^R*^R*^R*^R ^R*^R*^R,^	R /	t#R8 t$ ! R9 R:4      t% ! R; R<4      t& ! R= R>4      t' ! R? R@4      t(R# )A    N)deque)EnumIntEnumIntFlag)Optionalc                   s    ] tR t^tRtRtR# )SizeLimitErrorzRaised when trying to (de-)serialise data exceeding D-Bus' size limit.

This is currently only implemented for arrays, where the maximum size is
64 MiB.
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       6/usr/lib/python3.14/site-packages/jeepney/low_level.pyr   r      s    
 	r   r   c                   s4   a  ] tR t^t o ^t^tR tR tRtV t	R# )
Endiannessc                2    V \         P                  J d   R # R# )Z<Z>r   littleself   &r   struct_codeZEndianness.struct_code   s    z000s:s:r   c                r   )   l   Br   r   r   r   	dbus_codeZEndianness.dbus_code   s    
 1 11t<<r   r   N)
r   r	   r
   r   r   bigr   r   r   __classdictcell____classdict__   @r   r   r      s     F
C;= =r   r   r   r   c                   s&    ] tR t^t^t^t^t^tRtR# )MessageTyper   N)	r   r	   r
   r   Zmethod_callZmethod_returnZerrorZsignalr   r   r   r   r    r       s    KMEFr   r    c                   s"    ] tR t^$t^t^t^tRtR# )MessageFlagr   N)r   r	   r
   r   Zno_reply_expectedZno_auto_startZallow_interactive_authorizationr   r   r   r   r!   r!   $   s    M&'#r   r!   c                   s:    ] tR t^*t^t^t^t^t^t^t	^t
^t^	tRtR# )HeaderFieldsr   N)r   r	   r
   r   ZpathZ	interfaceZmemberZ
error_nameZreply_serialZdestinationZsender	signatureunix_fdsr   r   r   r   r"   r"   *   s/    DIFJLKFIHr   r"   c                 s4    WV,          ,
          pW!8X  d   ^ # V# r    r   )posZsteppad   && r   paddingr)   6   s    
*
C
{Jr   c                   sF   a  ] tR t^=t o R tRR ltR	R ltR tR tRt	V t
R# )
	FixedTypec                s.    V;V n         V n        W n        R # N)size	alignmentr   )r   r,   r      &&&r   __init__ZFixedType.__init__>   s    %))	DN&r   c                s   V\        W P                  4      ,          pVP                  4       V P                  ,           p\        P                  ! WQW"V P
                  ,            4      ^ ,          pWbV P
                  ,           3# r%   )r)   r-   r   structunpackr,   )r   bufr&   
endiannessfdscodeval   &&&&&  r   
parse_dataZFixedType.parse_dataB   s_    wsNN++%%'$*:*::mmDc		/":;A>$))O##r   Nc                s    R \        W P                  4      ,          pVP                  4       V P                  ,           pV\        P                  ! Wa4      ,           # )    )r)   r-   r   r0   pack)r   datar&   r3   r4   r'   r5   r7   r   	serialiseZFixedType.serialiseH   sB    gc>>22%%'$*:*::V[[,,,r   c                sN    R P                  V P                  V P                  4      # )zFixedType({!r}, {!r}))formatr,   r   r   r   r   __repr__ZFixedType.__repr__M   s    &--dii9I9IJJr   c                s    \        V4      \        J ;'       d;    V P                  VP                  8H  ;'       d    V P                  VP                  8H  # r+   )typer*   r,   r   r   Zother   &&r   __eq__ZFixedType.__eq__P   sJ    Uy( < <tyyEJJ/F < <%%):)::	<r   )r-   r,   r   r   r+   )r   r	   r
   r   r/   r8   r<   r>   rB   r   r   r   r   r   r*   r*   =   s$     '$-
K< <r   r*   c                   sN   a a ] tR t^Ut oV 3R ltRV 3R lltR tR tRtVt	V ;t
# )Booleanc                (   < \         SV `  ^R4       R#    INsuperr/   r   	__class__   &r   r/   ZBoolean.__init__V       C r   c                sB   < \         SV `  WV4      w  rV\        V4      V3# r+   )rJ   r8   bool)r   r2   r&   r3   r4   r6   new_posrL      &&&&&  r   r8   ZBoolean.parse_dataY   s%    w)#J?Cy'!!r   c                    R # )z	Boolean()r   r   r   r   r>   ZBoolean.__repr__]       r   c                $    \        V4      \        J # r+   )r?   rD   r@   rA   r   rB   ZBoolean.__eq__`       E{g%%r   r   rC   )r   r	   r
   r   r/   r8   r>   rB   r   r   __classcell__rL   r      @@r   rD   rD   U   s     !"& &r   rD   c                   s^   a a ] tR t^dt oV 3R ltRV 3R lltRV 3R lltR tR tRt	Vt
V ;t# )	FileDescriptorc                rE   rF   rI   rK   rM   r   r/   ZFileDescriptor.__init__e   rN   r   c                s<   < \         SV `  WV4      w  rVWE,          V3# r+   )rJ   r8   )r   r2   r&   r3   r4   ZidxrP   rL   rQ   r   r8   ZFileDescriptor.parse_datah   s#    w)#J?x  r   c                sb  < Vf   \        R4      h\        VR4      '       d   VP                  4       p\        V\        4      '       g   \        V\
        4      '       g   \        R4      hV^ 8  d   \        RV R24      hVP                  V4       \        SV `)  \        V4      ^,
          W#4      # )Nz+Sending FDs is not supported or not enabledfilenozYCannot use {data!r} as file descriptor. Expected an int or an object with fileno() methodz#File descriptor can't be negative ())ZRuntimeErrorZhasattrrZ   
isinstancerO   int	TypeError
ValueErrorappendrJ   r<   len)r   r;   r&   r3   r4   rL   s   &&&&&r   r<   ZFileDescriptor.serialisel   s    ;LMM4"";;=DdD!!D#)>)> G H H !8B4&JKK

4w SAs??r   c                rR   )zFileDescriptor()r   r   r   r   r>   ZFileDescriptor.__repr__|   s    !r   c                rT   r+   )r?   rY   r@   rA   r   rB   ZFileDescriptor.__eq__   s    E{n,,r   r   rC   r+   )r   r	   r
   r   r/   r8   r<   r>   rB   r   r   rV   rW   rX   r   rY   rY   d   s$     !!@ "- -r   rY   yZBZnZhZqZHbiurH   ZxZtZQdc                   s\   a  ] tR t^t o R t]R 4       tR
R ltR tRR lt	R t
R tR	tV tR# )
StringTypec                    Wn         R # r+   length_type)r   rj   rA   r   r/   ZStringType.__init__   s    &r   c                s.    V P                   P                  # r+   )rj   r,   r   r   r   r-   ZStringType.alignment   s    $$$r   c                s    V P                   P                  WV4      w  rRW%,           pWV P                  R 4      pWV^,            R8X  g   Q hWv^,           3# zutf-8r9   )rj   r8   Zdecode)r   r2   r&   r3   r4   lengthendr6      &&&&&   r   r8   ZStringType.parse_data   sZ    &&11#JGlcl!!'*sQw5(((!G|r   c                sf    \        V\        4      '       g   \        R P                  V4      4      hR# )zExpected str, not {!r}N)r\   Zstrr^   r=   r   r;   rA   r   
check_dataZStringType.check_data   s+    $$$4;;DABB %r   Nc                s    V P                  V4       VP                  R 4      pV P                  P                  \	        V4      W#4      pWe,           R,           # rk   )rp   Zencoderj   r<   ra   )r   r;   r&   r3   r4   Zencodedlen_datar7   r   r<   ZStringType.serialise   sF    ++g&##--c'lCL!E))r   c                8    R P                  V P                  4      # )zStringType({!r}))r=   rj   r   r   r   r>   ZStringType.__repr__   s    !(()9)9::r   c                f    \        V4      \        J ;'       d    V P                  VP                  8H  # r+   )r?   rg   rj   r@   rA   r   rB   ZStringType.__eq__   s1    Uz) ; ;$$(9(99	;r   ri   rC   r+   )r   r	   r
   r   r/   Zpropertyr-   r8   rp   r<   r>   rB   r   r   r   r   r   rg   rg      s=     ' % %C*;; ;r   rg   c                   s>   a a ] tR t^t oV 3R ltV 3R ltRtVtV ;t# )ObjectPathTypec                s<   < \         SV `  \        R ,          4       R# )re   N)rJ   r/   simple_typesrK   rM   r   r/   ZObjectPathType.__init__   s    c*+r   c                s
  <a \         SV `  V4       VP                  R 4      '       g   \        RV: R24      hVP	                  R 4      '       d!   \        V4      ^8  d   \        RV: R24      hRV9   d   \        RV: R24      h\        P                  \        P                  ,           R,           o\        ;QJ d    V3R lV 4       F  '       g   K   RM	  R	M! V3R lV 4       4      '       d   \        RV: R
24      hR# )Z/zObject path (z) must start with /z) cannot end with /z//z) cannot contain double /z/_c              3   s,   <"   T F	  qS9  x  K  	  R # 5ir+   r   ).0cvalid_charss   & r   	<genexpr>Z,ObjectPathType.check_data.<locals>.<genexpr>   s     2T#Ts   TFz)) can only contain A-Z, a-z, 0-9, / and _N)
rJ   rp   Z
startswithr_   Zendswithra   stringZascii_lettersZdigitsany)r   r;   rx   rL   s   &&@r   rp   ZObjectPathType.check_data   s    4 s##}TH4GHII==#d)a-}TH4GHII4<}TH4MNOO**V]]:TA32T23332T222x'PQ  3r   r   )	r   r	   r
   r   r/   rp   r   r   rV   rW   rX   r   rt   rt      s     , r   rt   sZogc                   sJ   a  ] tR t^t o ^tR tRR ltR	R ltR tR t	Rt
V tR# )
Structc                s    \         ;QJ d    R  V 4       F  '       g   K   RM	  RM! R  V 4       4      '       d   \        R4      hWn        R# )c              3   sB   "   T F  p\        V\        4      x  K  	  R # 5ir+   )r\   	DictEntry)rv   Zf   & r   ry   Z"Struct.__init__.<locals>.<genexpr>   s     8Az!Y''s   TFzFound dict entry outside arrayN)r{   r^   fields)r   r   rA   r   r/   ZStruct.__init__   s4    3883338888<==r   c                s    V\        V^4      ,          p. pV P                   F)  pVP                  WW4R7      w  rrVP                  V4       K+  	  \	        V4      V3# )   r4   )r)   r   r8   r`   tuple)r   r2   r&   r3   r4   resfieldvrn   r   r8   ZStruct.parse_data   sW    wsA[[E%%c
%DFAJJqM ! Sz3r   Nc           
     sX   \        V\        4      '       g   \        R P                  V4      4      h\	        V4      \	        V P
                  4      8w  d8   \        RP                  \	        V4      \	        V P
                  4      4      4      hR\        W P                  4      ,          pV\	        V4      ,          p. p\        WP
                  4       F@  w  rxVP                  VP                  WrW4R7      4       V\	        VR,          4      ,          pKB  	  VRP                  V4      ,           # )zExpected tuple, not {!r}z{} entries for {} fieldsr9   r   r   )r\   r   r^   r=   ra   r   r_   r)   r-   Zzipr`   r<   join)	r   r;   r&   r3   r4   r'   Z
res_piecesitemr   	   &&&&&    r   r<   ZStruct.serialise   s    $&&6==dCDDt9DKK((7>>D	3t{{+   gc>>22s3x
t[[1KDeoodoMN3z"~&&C 2 SXXj)))r   c                s`    R P                  \        V 4      P                  V P                  4      # )z{}({!r}))r=   r?   r   r   r   r   r   r>   ZStruct.__repr__   s#      d!4!4dkkBBr   c                sp    \        V4      \        V 4      J ;'       d    V P                  VP                  8H  # r+   )r?   r   r@   rA   r   rB   ZStruct.__eq__   s*    UtDz)LLu||0KLr   )r   rC   r+   )r   r	   r
   r   r-   r/   r8   r<   r>   rB   r   r   r   r   r   r~   r~      s+     I
*CM Mr   r~   c                   s2   a a ] tR t^t oV 3R ltRtVtV ;t# )r   c                s  < \        V4      ^8w  d   \        R\        V4      ,          4      h\        V^ ,          \        \        34      '       g+   \        RP                  \        V^ ,          4      4      4      h\        SV `!  V4       R# )   z%Dict entry must have 2 fields, not %dz5First field in dict entry must be simple type, not {}N)	ra   r^   r\   r*   rg   r=   r?   rJ   r/   )r   r   rL   s   &&r   r/   ZDictEntry.__init__   sq    v;!7#f+EG G&)i%<==GVAY(* * 	 r   r   )r   r	   r
   r   r/   r   r   rV   rW   rX   r   r   r      s     ! !r   r   c                   s\   a  ] tR t^t o ^t]! ^R4      tR tR	R ltR
R lt	R t
R tRtV tR# )ArrayrH   c                rh   r+   elt_type)r   r   rA   r   r/   ZArray.__init__  s     r   c                s   V P                   P                  WV4      w  rRV\        W P                  P                  4      ,          pW%,           pV P                  \
        R ,          8X  d   WV V3# . pW&8  d3   V P                  P                  WW4R7      w  rVP                  V4       K8  \        V P                  \        4      '       d   \        V4      pWr3# )rb   r   )
rj   r8   r)   r   r-   ru   r`   r\   r   dict)	r   r2   r&   r3   r4   rl   rm   r   r   r   r   r8   ZArray.parse_data  s    &&11#JGwsMM3344l==L--3<$$i]]--c
-LFAJJqMdmmY//s)Cxr   Nc           
     sN   R p\        V P                  \        4      '       d(   \        V\        4      '       d   VP	                  4       pMeV P                  \
        R,          8X  d   \        V\        4      '       d   RpM0\        V\        4      '       g   \        RP                  V4      4      h\        V P                  \        4      '       d7   V P                  P                  \        V4      ,          R8  d   \        R4      h\        W P                  4      pW&,           ^,           p\        WpP                  P                  4      pV'       d   Tp	MWx,           p
V
R,           p. pV FY  pVP!                  V P                  P#                  WW4R7      4       V
\        VR	,          4      ,          p
W8  g   KP  \        R4      h	  RP%                  V4      p	V P&                  P#                  \        V	4      W&,           V4      pRV,          V,           RV,          ,           V	,           # )
Frb   TzNot suitable for array: {!r}zArray size exceeds 64 MiB limitr   r   r9   i   r   )r\   r   r   r   itemsru   byteslistr^   r=   r*   r,   ra   r   r)   r-   r`   r<   r   rj   )r   r;   r&   r3   r4   Zdata_is_bytesZpad1Zpos_after_lengthZpad2r2   Zdata_posZ	limit_poschunksr   rq   s   &&&&&          r   r<   ZArray.serialise  s   dmmY//JtT4J4J::<Dmm|C00ju6M6M MD$'':AA$GHH dmmY//""SY.%7$%FGGsNN+:>')@)@AC'.H 7*IFdmm55J 6   Cr
O+'()JKK  ((6"C##--c#h*M (EDL9C??r   c                rr   )zArray({!r}))r=   r   r   r   r   r>   ZArray.__repr__<  s    ##DMM22r   c                rs   r+   )r?   r   r   r@   rA   r   rB   ZArray.__eq__?  s&    Uu$KK4==ENN+JKr   r   rC   r+   )r   r	   r
   r   r-   r*   rj   r/   r8   r<   r>   rB   r   r   r   r   r   r   r      s8     IAs#K!$$@L3L Lr   r   c                   sD   a  ] tR tRt o ^tRR ltR	R ltR tR tRt	V t
R# )
VariantiC  c                s    \         R ,          P                  WV4      w  rR\        \        V4      4      pVP                  WW4R7      w  rrWW3V3# r}   r   )ru   r8   parse_signaturer   )r   r2   r&   r3   r4   sigvaltyper6   rn   r   r8   ZVariant.parse_dataF  sL    $//*E!$s),%%c
%Dz3r   Nc                s    Vw  rQ\        \        V4      4      p\        R ,          P                  WRV4      pWvP                  W\	        V4      ,           W4R7      ,           # r   )r   r   ru   r<   ra   )r   r;   r&   r3   r4   r   r   Zsig_bufrn   r   r<   ZVariant.serialiseO  sY    	!$s),s#--c
C**G$j + 
 
 	
r   c                rR   )z	Variant()r   r   r   r   r>   ZVariant.__repr__W  rS   r   c                rT   r+   )r?   r   r@   rA   r   rB   ZVariant.__eq__Z  rU   r   r   rC   r+   )r   r	   r
   r   r-   r8   r<   r>   rB   r   r   r   r   r   r   r   C  s#     I
& &r   r   c                s   V P                  ^ 4      pVR8X  d   \        \        V 4      4      # VR8X  d   \        4       # VR8X  dI   . pV ^ ,          R8w  d   VP	                  \        V 4      4       K*  V P                  ^ 4       \        V4      # VR8X  dI   . pV ^ ,          R8w  d   VP	                  \        V 4      4       K*  V P                  ^ 4       \        V4      # VR9   d   \        R4      h\        V,          # )	z-Parse a symbolic signature into objects.
    Zar   Z(r[   Z{Z}z)}zUnexpected end of struct)	Zpopr   r   r   r`   r~   r   r_   ru   )r   Ztokenr   Zdes   &   r   r   r   ]  s     GGAJE|_S)**|y	#!fmMM/#./
f~	#!fmIIoc*+
}	$344E""r   c                 sv   \         P                  ! R V R,          4      w  p\        V,          p\         P                  ! VP                  4       R,           V R,          4      w  p\         P                  ! VP                  4       R,           V R,          4      w  p^V,           pV\	        V^4      ,           V,           # )rw   :Ni   NrH   :rG   r   N:   i   N)r0   r1   
endian_mapr   r)   )r2   endianbody_lengthZfields_array_lenZ
header_len   &    r   calc_msg_sizer   x  s    mmCR)GFF==!3!3!5!;SXFLKf&8&8&:S&@#e*M&&J
A..<<r   c                 s    \         P                  V ^V4      w  r#V UUu/ uF  w  rE\        V4      V^,          bK  	  uppV3# u uppi r   )_header_fields_typer8   r"   )r2   r3   lr&   Zkr   s   &&    r   parse_header_fieldsr     sD     ++CZ@FA012fqLOQqT!2C772s   Ac                 s    \        V P                  4       4       UUu. uF   w  r#VP                  \        V,          V33NK"  	  ppp\        P                  V^V4      # u uppi r   )Zsortedr   valueheader_field_codesr   r<   )rf   r3   rd   r   r   s   &&   r   serialise_header_fieldsr     sT    =CAGGI=NO=N6A!''&q)1-	.=NAO((B
;; 	Ps   &Ac                   sF   a  ] tR tRt o R tR tRR lt]R 4       tRt	V t
R# )	Headeri  c                s    Wn         \        V4      V n        \        V4      V n        W@n        WPn        W`n        Wpn        R# )zA D-Bus message header

It's not normally necessary to construct this directly: use higher level
functions and methods instead.
N)	r3   r    message_typer!   flagsprotocol_versionr   serialr   )r   r3   r   r   r   r   r   r   s   &&&&&&&&r   r/   ZHeader.__init__  s8     %'5 '
 0&r   c           	     s    R P                  V P                  V P                  V P                  V P                  V P
                  V P                  V P                  4      # )z7Header({!r}, {!r}, {!r}, {!r}, {!r}, {!r}, fields={!r}))r=   r3   r   r   r   r   r   r   r   r   r   r>   ZHeader.__repr__  sI    HOOOOT..

!!4#3#3T[[$++O 	Or   Nc           	     sx   V P                   P                  4       R ,           pVf   V P                  p\        P                  ! W P                   P                  4       V P                  P                  V P                  V P                  V P                  V4      \        V P                  V P                   4      ,           # )ZcBBBII)r3   r   r   r0   r:   r   r   r   r   r   r   r   r   )r   r   r|   r(   r   r<   ZHeader.serialise  s    OO'')H4>[[F{{1oo779,,22DJJ00++V5 *$++tG	H 	Hr   c           	     s    \         P                  ! R VR,          4      w  r#rE\        V,          p\         P                  ! VP                  4       R,           VR,          4      w  rg\	        W4      w  rV ! W#WEWgV4      V	3# )ZcBBB:NrG   NZII:rG   r   N)r0   r1   r   r   r   )
clsr2   r   Zmsgtyper   ZpvZbodylenr   r   r&   s
   &&        r   from_bufferZHeader.from_buffer  sk    %+]]63r7%C"F# --(:(:(<t(CSYO)#66EwGLLr   )r   r3   r   r   r   r   r   r+   )r   r	   r
   r   r/   r>   r<   classmethodr   r   r   r   r   r   r   r     s,     O
H M Mr   r   c                   sf   a  ] tR tRt o RtR tR t]RV 3R lR ll4       tRV 3R lR	 llt	R
t
V tR# )Messagei  zObject representing a DBus message.

It's not normally necessary to construct this directly: use higher level
functions and methods instead.
c                s    Wn         W n        R # r+   )headerbody)r   r   r   r.   r   r/   ZMessage.__init__  s    	r   c                sv    R P                  \        V 4      P                  V P                  V P                  4      # )z{}({!r}, {!r}))r=   r?   r   r   r   r   r   r   r>   ZMessage.__repr__  s)    &&tDz':':DKKSSr   c                s$   < V ^8  d   QhRS[ RR/# )r   r2   returnr   r   r=   r      "r   __annotate__Message.__annotate__  s     % %e %	 %r   c                s   \         P                  V4      w  r4VP                  P                  \        P
                  ^ 4      pV\        V4      8  d   \        RV R\        V4       R24      hVRV pRp\        P                  VP                  9   db   VP                  \        P                  ,          p\        \        RV,          4      4      pVP                  WVP                  VR7      ^ ,          p\        W64      # )r    zMessage expects z FDs, but only z were receivedN(%s)r   r   )r   r   r   getr"   r$   ra   r_   r#   r   r   r8   r3   r   )	r   r2   r4   r   r&   Zn_fdsr   r   	body_type	   &&&      r   r   ZMessage.from_buffer  s    ((-!!,"7"7;3s8"5'S
.Q  &5k!!V]]2-- 6 67C'Vc\(:;I''&2C2C'MaPDv$$r   Nc                    < V ^8  d   QhRS[ /# r   r   r   r   r   r   r   r     s     + +% +r   c                s   V P                   P                  p\        P                  V P                   P                  9   df   V P                   P                  \        P                  ,          p\        \        RV,          4      4      pVP                  V P                  ^ W2R7      pMRp\        V4      V P                   n
        V'       d1   \        V4      V P                   P                  \        P                  &   V P                   P                  VR7      pR\        \        V4      ^4      ,          pWx,           V,           # )a  Convert this message to bytes.

Specifying *serial* overrides the ``msg.header.serial`` field, so a
connection can use its own serial number without modifying the message.

If file-descriptor support is in use, *fds* should be a
:class:`array.array` object with type ``'i'``. Any file descriptors in
the message will be added to the array. If the message contains FDs,
it can't be serialised without this array.
r   r   r   )r   r9   )r   r3   r"   r#   r   r   r   r<   r   ra   r   r$   r)   )	r   r   r4   r   r   r   Zbody_bufZ
header_bufr'   r   r   r<   ZMessage.serialise  s     ''!!T[[%7%77++$$\%;%;<C'Vc\(:;I **499a*IHH"%h-8;CDKK|445[[**&*9
ws:22(**r   )r   r   rC   )NN)r   r	   r
   r   r   r/   r>   r   r   r<   r   r   r   r   r   r   r     s=     
T % % %+ + +r   r   c                   s^   a  ] tR tRt o RtR tRV 3R lR lltR tR tV 3R lR	 lt	R
t
V tR# )Parseri  z8Parse DBus messages from a stream of incoming data.
    c                s@    \        4       V n        . V n        R V n        R # r+   )
BufferPiper2   r4   next_msg_sizer   r   r   r/   ZParser.__init__   s    <!r   c                r   )r   r;   r   r   r   r   r   Parser.__annotate__  s      U r   c                sr    V P                   P                  V4       V P                  P                  V4       R# )z)Provide newly received data to the parserN)r2   writer4   Zextend)r   r;   r4   r.   r   add_dataZParser.add_data  s"    tr   c                sb    V P                  V4       \        \        V P                  R4      4      # )zXFeed the parser newly read data.

Returns a list of messages completed by the new data.
N)r   r   Ziterget_next_messagero   rA   r   feedZParser.feed
  s(    
 	dD..566r   c                s    V P                   P                  pV^8  d
   ^V,
          # V P                  f*   \        V P                   P	                  ^4      4      V n        V P                  V,
          # )zHow many bytes can be received without going beyond the next message?

This is only used with file-descriptor passing, so we don't get too many
FDs in a single recvmsg call.
)r2   bytes_bufferedr   r   peek)r   Zgotr   r   bytes_desiredZParser.bytes_desired  sZ     hh%%88O%!.txx}}R/@!AD!!C''r   c                s0   < V ^8  d   QhRS[ S[,          /# r   )r   r   r   r   r   r   r      s      (7"3 r   c                s   V P                   fE   V P                  P                  ^8  d*   \        V P                  P	                  ^4      4      V n         V P                   pVe   V P                  P                  V8  d   V P                  P                  V4      p\        P                  W P                  R7      pRV n         VP                  P                  P                  \        P                  ^ 4      pV P                  VR V n        V# R# R# )zaParse one message, if there is enough data.

Returns None if it doesn't have a complete message.
Nr   )r   r2   r   r   r   readr   r   r4   r   r   r   r"   r$   )r   ZnmsZraw_msgZmsgZfds_consumedr   r   r   ZParser.get_next_message   s    
 %xx&&",%2488==3D%E"  O!8!8C!?hhmmC(G%%g88%<C!%D::,,001F1FJLxx.DHJ "@Or   )r2   r4   r   NrC   )r   r	   r
   r   r   r/   r   r   r   r   r   r   r   r   r   r   r     s-     "
 
7( r   r   c                   s   a  ] tR tR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V 3R
 lR lt	V 3R lR lt
RtV tR# )r   i2  zA place to store received data until we can parse a complete message

The main difference from io.BytesIO is that read & write operate at
opposite ends, like a pipe.
c                s2    \        4       V n        ^ V n        R# )r    N)r   r   r   r   r   r   r/   ZBufferPipe.__init__8  s    gr   c                r   )r   rc   r   r   r   r   r   BufferPipe.__annotate__<  s     & &u &r   c                s    V P                   P                  V4       V ;P                  \        V4      ,          un        R # r+   )r   r`   r   ra   )r   rc   rA   r   r   ZBufferPipe.write<  s)    1s1v%r   c                r   r   nbytesr]   r   r   r   r   r   @  s       r   c              #  s   "   WP                   8:  g   Q hV P                   F(  pVR V pV\        V4      ,          pVx  V^ 8:  g   K'   R # 	  R # 5ir+   )r   r   ra   )r   r   chunkr(   r   
_peek_iterZBufferPipe._peek_iter@  sM     ,,,,,[[E'6NEc%j FK{ !s   AAAc                &   < V ^8  d   QhRS[ RS[/# r   r   r   r]   r   r   r   r   r   r   I       1 13 15 1r   c                B    RP                  V P                  V4      4      # )z=Get exactly nbytes bytes from the front without removing themr   )r   r   r   r   rA   r   r   ZBufferPipe.peekI      xx/00r   c                r   r   r   r   r   r   r   r   M  s       r   c              #  s  "   WP                   8:  g   Q h V P                  P                  4       pV ;P                   \        V4      ,          un         V\        V4      8:  d   MV\        V4      ,          pVx  Kf  VRV W!R r2V'       d>   V P                  P	                  V4       V ;P                   \        V4      ,          un         Vx  R# 5i)TN)r   r   Zpopleftra   Z
appendleft)r   r   r   Zrems   &&  r   
_read_iterZBufferPipe._read_iterM  s     ,,,,,KK'')E3u:-U#c%j FK 7F^U7^sKK""3'3s8+s   CCc                r   r   r   r   r   r   r   r   ^  r   r   c                r   )z1Take & return exactly nbytes bytes from the frontr   )r   r   r   rA   r   r   ZBufferPipe.read^  r   r   )r   r   N)r   r	   r
   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   2  sA     
 & & 1 1 "1 1r   r   ))rz   r0   Zcollectionsr   Zenumr   r   r   Ztypingr   r_   r   r   r   r   r   r    r!   r"   r)   r*   rD   rY   ru   rg   rt   Zupdater~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s'      ' ' 	Z 	= = J%%tZ^^<
$ (' (	7 	< <0&i &-Y -@ 1c	1c	1c	1c	1c	1c	1c	1c		; ;BZ &   L%	&	L%	& #M #ML	! 	!CL CLL& &4#6= FL$5wy#ABC 8 sssssssss
 <
%M %MP7+ 7+t2 2j.1 .1r   