
    h                        S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
JrJr  \\\\S4   r\S\	S   \4   r\\\4   r\SS\4   r\\\4   r\\   r\" S5      r\" S	5      r " S
 S\5      rS\S\
\   S\4S jr " S S\5      r\R8                  rS\S\\/\4   S\S\\\4   S\\\4   4
S jr\4S\S\S\\\4   S\\\4   4S jjr\4S\S\S\\\4   S\\\ 4   4S jjr!\4S\S\S\\\4   S\\\4   4S jjr"S\S\S\\   S\\   4S jr#S\S\S\\\\ 4      S\\\\ 4      4S jr$\4S\S\S\\\4   S\\\4   4S jjr%\4S\S\S\\/\4   S\\\4   S\\\4   4
S jjr&\4S\S\S\\\4   S\\\	\   4   4S jjr'\4S\S\S \\   S\\\4   S\\\4   4
S! jjr(S\S\S\\/\4   S\\\	\   4   4S" jr)S#S$S%\S\4S& jr*S'\S(\S\4S) jr+S'\S(\SS4S* jr,g)+    )Enum)
Callable	ContainerDictListMappingOptionalSequenceTypeTypeVarUnionN
JsonObject	JsonValueJsonDictJsonListDTTc                   @   ^  \ rS rSr% \\S'   S\S\4U 4S jjrSrU =r	$ )	JsonError%   valuemsgc                 0   > [         TU ]  U5        Xl        g N)super__init__r   )selfr   r   	__class__s      2/usr/lib/python3/dist-packages/cockpit/jsonutil.pyr   JsonError.__init__(   s    
    r   )
__name__
__module____qualname____firstlineno__object__annotations__strr   __static_attributes____classcell__)r   s   @r   r   r   %   s     Mf 3  r!   r   r   expected_typereturnc                 X    [        X5      (       d  [        U SUR                   35      eU $ )z>Ensure a JSON value has the expected type, returning it if so.zmust have type )
isinstancer   r#   )r   r,   s     r   typecheckedr0   -   s-    e++1G1G0HIJJLr!   c                       \ rS rSrSrSrg)_Empty7   r    N)r#   r$   r%   r&   TOKENr*   r4   r!   r   r2   r2   7   s    Er!   r2   objcastkeydefaultc                      U" X   5      $ ! [          a    U[        La  Us $ [        U SU S35      S e[         a3  nSU S3UR                  X   La  SOS-   n[        X SU< 35      UeS nAff = f)Nzattribute 'z
' required'z
 elements:: )KeyError_emptyr   r   )r6   r7   r8   r9   exctargets         r   _getrB   >   s    ;CH~ F& N{3%z:;E ;se1%#(9RX[\xq01s:;s   	 A0A0.A++A0c                     [        U S X5      $ )Nc                 "    [        U [        5      $ r   )r0   boolvs    r   <lambda>get_bool.<locals>.<lambda>K       {1d3r!   rB   r6   r8   r9   s      r   get_boolrM   J       3SBBr!   c                     [        U S X5      $ )Nc                 "    [        U [        5      $ r   )r0   intrF   s    r   rH   get_int.<locals>.<lambda>O       {1c2r!   rK   rL   s      r   get_intrT   N       2CAAr!   c                     [        U S X5      $ )Nc                 "    [        U [        5      $ r   r0   r)   rF   s    r   rH   get_str.<locals>.<lambda>S   rS   r!   rK   rL   s      r   get_strrZ   R   rU   r!   c                     [        U S X5      $ )Nc                 ,    U c  S $ [        U [        5      $ r   rX   rF   s    r   rH   !get_str_or_none.<locals>.<lambda>W   s    qytIk!S6IIr!   rK   rL   s      r   get_str_or_noner^   V   s    I3XXr!   c                 V    S[         S[        [        [        4   4S jn[	        XX5      $ )Nr   r-   c                 T    [        U [        [        45      (       d  [        U S5      eU $ )Nzmust be a string or integer)r/   r)   rQ   r   r"   s    r   as_str_or_int%get_str_or_int.<locals>.as_str_or_int[   s&    %#s,,E#@AAr!   )r   r   r)   rQ   rB   )r6   r8   r9   ra   s       r   get_str_or_intrc   Z   s,    Y 5c? 
 C11r!   c                     [        U S X5      $ )Nc                 "    [        U [        5      $ r   r0   dictrF   s    r   rH   get_dict.<locals>.<lambda>d   rJ   r!   rK   rL   s      r   get_dictri   c   rN   r!   constructorc                 &   ^ [        U U4S jX5      $ )Nc                 0   > T" [        U [        5      5      $ r   rf   )rG   rj   s    r   rH   get_object.<locals>.<lambda>m   s    {;q$+?@r!   rK   )r6   r8   rj   r9   s     ` r   
get_objectrn   g   s     @#OOr!   c                 J    S[         S[        [           4S jn[        XX5      $ )Nr   r-   c                 B    [        S [        U [        5       5       5      $ )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr   rX   ).0items     r   	<genexpr>,get_strv.<locals>.as_strv.<locals>.<genexpr>r   s     Q8P[s++8Ps   tupler0   listr"   s    r   as_strvget_strv.<locals>.as_strvq   s    QE48PQQQr!   )r   r
   r)   rB   )r6   r8   r9   ry   s       r   get_strvr{   p   s)    Ry RXc] Rc++r!   choicesc                 D   ^ S[         S[        4U4S jjn[        XX5      $ )Nr   r-   c                 b   > [        U [        5      (       a  U T;   a  U $ [        U SU  ST 35      e)Nzinvalid value "z	" not in )r/   r)   r   )r   r|   s    r   	as_choiceget_enum.<locals>.as_choicey   s8     eS!!ew&6Ly	JKKr!   )r   r)   rB   )r6   r8   r|   r9   r   s     `  r   get_enumr   v   s(    L Ls L --r!   c                 T   ^ S[         S[        [           4U4S jjn[        XUS5      $ )Nr   r-   c                 J   > [        U4S j[        U [        5       5       5      $ )Nc              3   P   >#    U  H  nT" [        U[        5      5      v   M     g 7fr   rf   )rr   rs   rj   s     r   rt   ,get_objv.<locals>.as_objv.<locals>.<genexpr>   s"     _F^d[T4!899F^s   #&rv   )r   rj   s    r   as_objvget_objv.<locals>.as_objv   s    _kRWY]F^___r!   r4   )r   r
   r   rB   )r6   r8   rj   r   s     ` r   get_objvr      s,    `y `Xa[ `c2&&r!   messagezJsonObject | Nonekwargsc                     [        U =(       d    0 5      nUR                  5        H  u  p4UR                  SS5      nXBU'   M     U$ )a  Constructs a JSON object based on message and kwargs.

If only message is given, it is returned, unmodified.  If message is None,
it is equivalent to an empty dictionary.  A copy is always made.

If kwargs are present, then any underscore ('_') present in a key name is
rewritten to a dash ('-').  This is intended to bridge between the required
Python syntax when providing kwargs and idiomatic JSON (which uses '-' for
attributes).  These values override values in message.

The idea is that `message` should be used for passing data along, and
kwargs used for data originating at a given call site, possibly including
modifications to an original message.
_-)rg   itemsreplace)r   r   resultr8   r   json_keys         r   create_objectr      sC     '-R Flln
;;sC( x %
 Mr!   currentpatchc                    [        U 5      nUR                  5        Hm  u  p4[        U[        5      (       a8  U R	                  US5      n[        U[        5      (       d  0 n[        XT5      X#'   MR  Ub  XBU'   M[  UR                  US5        Mo     U$ )u   Perform a JSON merge patch (RFC 7396) using 'current' and 'patch'.
Neither of the original dictionaries is modified — the result is returned.
N)rg   r   r/   r   getjson_merge_patchpop)r   r   r   r8   patch_valuecurrent_values         r   r   r      s}    
 ']F!KKMk7++#KKT2MmW55 "*=FFK$%3KJJsD! * Mr!   c                 >   [        UR                  5       5       H  u  p#U R                  US5      n[        U[        5      (       a@  [        U[        5      (       d  0 =X'   n[        XC5        MT  [        XC5        U(       d  X	 Mj  Ml  XC:X  a  X	 Mu  Ub  X0U'   M~  X	 M     g)z~Perform a JSON merge patch (RFC 7396) modifying 'current' with 'patch'.
Also modifies 'patch' to remove redundant operations.
N)rw   r   r   r/   rg   json_merge_and_filter_patch)r   r   r8   r   r   s        r   r   r      s     "%++-0C.k4((mT22/11}+MG+MG"
 #)
$&CL! 1r!   )-enumr   typingr   r   r   r   r   r	   r
   r   r   r   r)   floatrE   JsonLiteralr   r   JsonDocumentr   r   r   r   	Exceptionr   r0   r2   r5   r?   rB   rM   rQ   rT   rZ   r^   rc   ri   rn   r{   r   r   r   r   r   r4   r!   r   <module>r      s  $  e e eCd*+ , 5{BC	S)^$
 Z[89\!" T]CL	 y a Q T  
	;j 	;)a 8 	;s 	;USUW]S]M^ 	;chijlninco 	; FL C* C3 Cr6z1B CPUVXZ^V^P_ C EK B B# Bb&j0A BuUWY\U\~ B EK B B# Bb&j0A BuUWY\U\~ BY Y# Y Y(SV- Y2
 2 2xc3h7P 2U]^cdgildl^mUn 2 FL C* C3 Cr6z1B CPUVXZdVdPe C "(	P	P	P :,/*P 2v:	P
 2q5\P FL ,* ,3 ,r6z1B ,PUVXZbcfZgVgPh , V\	.		.	.(1#	.AFr6zAR	.
2s7^	.'* '3 'XzlAo5N 'SXY[]efg]hYhSi '. 
 z 2j  
 ( ( t r!   