
     i'                        d dl mZmZ d dlmZmZ d dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZ ddlmZ dd	lmZm Z m!Z! dd
l"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 deee f         de fdZ7d Z8dede#e         dee         dee
e
ge
f         de9dee         fdZ:dee         deee                  fdZ;dee         fdZ<deee
                  fdZ=defdZ>de
ddfdZ?dedefdZ@dee         dee         deee
e
f                  fd ZAdefd!ZBdee         deee                  fd"ZCde#d#e9d$edefd%ZDde#d#e9d$edefd&ZEdS )'    )is_dataclassMISSING)dumpsloads)
attrgettergetitem)AnyCallableDictListOptionalSequenceTypeUnion   )AbstractFactoryK
SerializerT)	FieldInfoget_dataclass_fieldsget_typeddict_fieldsget_namedtuple_fields)fix_generic_alias)CleanKey	CleanPathinit_structure)SchemaUnknown)hasargsis_anyis_iterableis_dictis_enumis_generic_concrete
is_newtypeis_optionalis_tupleis_type_varis_typeddictis_union
is_literalis_literal36instance_wont_have_dictis_noneis_namedtuplekeyreturnc                 6    t          | t                    r| S | fS N
isinstancetuple)r1   s    e/root/.openclaw/workspace/.venvs/songid/lib/python3.11/site-packages/dataclass_factory/serializers.pyto_pathr9      s     #u 
6M    c                 b    |D ]+}|                      |                     |i                      ,d S r4   )updatepop)destfieldsfs      r8   unpack_fieldsrA      s<     % %DHHQOO$$$$% %r:   factoryschemar?   getteromit_missingc                    	
 |j         ot          d |D                       }|r|pt          d |D                       }t           fd|D                       |j        
t          
t                    rdnt          
t                    rd
g
nd|j        rt          d |j        	                                D                       rft          d |D                       }t          t          |                    	|r%|j         rt          d          t          d	          	
fd
}n|r	
fd}n
fd}|S )z
    :param getter: functions used to get data for each field (attribute, key and so on)
    :param omit_missing: omit special MISSING values retrieved from getter. Is applied when all defaults are MISSING.
    c              3   6   K   | ]}|j         t          k    V  d S r4   defaultr   .0r@   s     r8   	<genexpr>z)get_complex_serializer.<locals>.<genexpr>+   s)      -S-Sqai7.B-S-S-S-S-S-Sr:   c              3   6   K   | ]}|j         t          k    V  d S r4   rH   rJ   s     r8   rL   z)get_complex_serializer.<locals>.<genexpr>-   s)      (N(N!g)=(N(N(N(N(N(Nr:   c              3   r   K   | ]1}|j                             |j                  |j        |j        fV  2d S r4   )
field_name
serializertype	data_namerI   )rK   r@   rB   s     r8   rL   z)get_complex_serializer.<locals>.<genexpr>.   sV         
w))!&111;	J     r:   FTc              3   @   K   | ]}t          |t                    V  d S r4   r5   )rK   r1   s     r8   rL   z)get_complex_serializer.<locals>.<genexpr>;   s,      "b"bc:c5#9#9"b"b"b"b"b"br:   c              3   >   K   | ]}t          |j                  V  d S r4   )r9   rR   rJ   s     r8   rL   z)get_complex_serializer.<locals>.<genexpr><   s,      ;;qgak**;;;;;;r:   z7Cannot use `omit_default` option with flattening schemaz1Cannot omit missing values with flattening schemac                     t          
          \  }}t          |          D ]#\  \  }}^}}} | 	| |                    ||<   $rt          |           |S r4   )r   ziprA   )data	containerfield_containersinner_containerrR   rO   rP   _
field_inforD   pickledunknownunpack_unknowns           r8   	serializez)get_complex_serializer.<locals>.serializeD   s    */..'I' %z22R R ,).Jz:-7ZtZ8P8P-Q-Q	** 2i111r:   c                 L      fdD             }rt          |           |S )Nc                 V    i | ]%\  }}}} | |                    }||k    "||&S  rc   )rK   rO   rP   rR   rI   valuerW   rD   s         r8   
<dictcomp>z=get_complex_serializer.<locals>.serialize.<locals>.<dictcomp>P   sU       B
J	7",*VVD*-E-E"F"F'' u (''r:   rA   rW   rX   r\   rD   r^   r_   s   ` r8   r`   z)get_complex_serializer.<locals>.serializeO   sQ        FP  	 " 6!)W555  r:   c                 L      fdD             }rt          |           |S )Nc           	      F    i | ]\  }}}}| | |                    S rc   rc   )rK   rO   rP   rR   rI   rW   rD   s        r8   re   z=get_complex_serializer.<locals>.serialize.<locals>.<dictcomp>\   sI       B
J	7 zz&&z*B*BCC  r:   rf   rg   s   ` r8   r`   z)get_complex_serializer.<locals>.serialize[   sQ        FP  	 " 6!)W555  r:   )omit_defaultanyallr7   r^   r6   r   strname_mappingvaluesr   r   
ValueError)rB   rC   r?   rD   rE   has_defaultpathsr`   r\   r]   r^   r_   s   `  `    @@@@r8   get_complex_serializerrs       s	    %S#-S-SF-S-S-S*S*SK O!NS(N(Nv(N(N(N%N%N        J NG'7## 	GS	!	! ) '!s"b"bVEXE_E_EaEa"b"b"bbb '!;;F;;;;;u--.. 	V" V !Z[[[ !TUUU	 	 	 	 	 	 	 	 	 	  	!	! 	! 	! 	! 	! 	! 	! 	! 	!! ! ! ! ! ! ! ! r:   rP   c                       fd}|S )Nc                      fd| D             S )Nc                 &    g | ]} |          S rc   rc   rK   xrP   s     r8   
<listcomp>zLget_collection_serializer.<locals>.collection_serializer.<locals>.<listcomp>h   s!    ,,,!

1,,,r:   rc   rW   rP   s    r8   collection_serializerz8get_collection_serializer.<locals>.collection_serializerg   s    ,,,,t,,,,r:   rc   )rP   r{   s   ` r8   get_collection_serializerr|   f   s$    - - - - - ! r:   c                       fd}|S )Nc                 8    d t          |           D             S )Nc                 *    g | ]\  }} ||          S rc   rc   rw   s      r8   ry   zBget_tuple_serializer.<locals>.tuple_serializer.<locals>.<listcomp>o   s$    JJJ-!Z

1JJJr:   )rV   )rW   serializerss    r8   tuple_serializerz.get_tuple_serializer.<locals>.tuple_serializern   s!    JJ3t[3I3IJJJJr:   rc   )r   r   s   ` r8   get_tuple_serializerr   m   s)    K K K K K r:   c                      d S )Nc                      t          |           S r4   )listrW   s    r8   <lambda>z/get_collection_any_serializer.<locals>.<lambda>u   s    T

 r:   rc   rc   r:   r8   get_collection_any_serializerr   t   s    """r:   c                 @    t          |           dt          ffd}|S )NrW   c                 ^    fdt          |                                           D             S )Nc                 .    i | ]\  }}| |          S rc   rc   )rK   kvfield_serializers      r8   re   z@get_vars_serializer.<locals>.vars_serializer.<locals>.<dictcomp>|   s;     
 
 
1 ""
 
 
r:   )varsitems)rW   r   s    r8   vars_serializerz,get_vars_serializer.<locals>.vars_serializer{   s@    
 
 
 
T

((**
 
 
 	
r:   )get_lazy_serializerr	   )rB   r   r   s     @r8   get_vars_serializerr   x   s>    *733
c 
 
 
 
 
 
 r:   rW   Nc                 (    | t          d          d S )NzNone expected)rp   r   s    r8   serialize_noner      s    ))) r:   c                     | S r4   rc   r   s    r8   stub_serializerr      s    Kr:   key_serializerc                       fdS )Nc                 F    fd|                                  D             S )Nc                 @    i | ]\  }} |           |          S rc   rc   )rK   r   r   r   rP   s      r8   re   z9get_dict_serializer.<locals>.<lambda>.<locals>.<dictcomp>   s>       -1Qq::a==  r:   )r   )rW   r   rP   s    r8   r   z%get_dict_serializer.<locals>.<lambda>   s8         59ZZ\\   r:   rc   )r   rP   s   ``r8   get_dict_serializerr      s"         r:   c                       fd}|S )Nc                 Z                          t          |                     |           S r4   )rP   rQ   )rW   rB   s    r8   lazy_serializerz,get_lazy_serializer.<locals>.lazy_serializer   s'    -w!!$t**--d333r:   rc   )rB   r   s   ` r8   r   r      s$    4 4 4 4 4 r:   c                       fd}|S )Nc                 "    | d S  |           S r4   rc   rz   s    r8   optional_serializerz4get_optional_serializer.<locals>.optional_serializer   s    <4:d###r:   rc   )rP   r   s   ` r8   get_optional_serializerr      s$    $ $ $ $ $ r:   
debug_pathclass_c                 f    t          | |||          |j        |j        sr	fd}|S S )Nc                 R    r |           }  |           } r |           S | S r4   rc   )rW   postprerP   s    r8   serializer_with_stepsz0create_serializer.<locals>.serializer_with_steps   sB     !s4yy:d##D "tDzz!Kr:   )create_serializer_implpre_serializepost_serialize)rB   rC   r   r   r   r   r   rP   s        @@@r8   create_serializerr      sh    'VLLJ

C D
 	%d 	%	 	 	 	 	 	 	 %$r:   c                 b    t          |          }|t          t          t          t          t
          t          t          fv rt          S t          |          rt          S t          |          st          |          st          |          rt          S t          |          rt           |||j                  S t!          |          rt#                     S t%          |          s#t'          |          r:t%          |j                  r&t+           |t-          ||          t.          d          S t1          |          r&t+           |t3          ||          t.          d          S t5          |          s#t'          |          rct5          |j                  rO|j        r&t+           |t9          ||          t:          d          S t+           |t9          ||          d d          S t=          |          rt#                     S |t          t          t          t          t
          t          t          fv r|S t?          |          r0|j         rtC          |j         d                   S t#                     S tE          |          rtG          d          S tI          |          rtK           fd|j         D                       }tM          |          dk    rt          S tM          |          dk    r	|d         }nt#                     }tM          |          tM          |j                   k     rtC          |          S |S tO          |          rtQ          |          stS                      S tM          |j                   dk    rC|j         d         tT          u r/ +                    |j         d                   }tY          |          S t[          tK           fd	|j         D                                 S t'          |          rt]          |j                  rl|j         r|j         d         nt^          }|j         r|j         d         nt^          }ta           +                    |           +                    |                    S t]          |          r*ta          t#                     t#                               S t'          |          rQtc          |j                  r= +                    |j         r|j         d         nt^                    }tY          |          S tc          |          rt#                     }tY          |          S te          |tf                    rMti          |          rtk          d
|           tm          |d          rd|j7        v rtk          d
| d          tq                     S )NFc                 8    |                      |t                    S r4   )getr   )objr1   s     r8   r   z(create_serializer_impl.<locals>.<lambda>   s    g!6!6 r:   Tr   rd   c              3   `   K   | ](}t          |                              |          V  )d S r4   )r/   rP   rK   rx   rB   s     r8   rL   z)create_serializer_impl.<locals>.<genexpr>   s@      ]]aRYZ[R\R\]G..q11]]]]]]r:   r      c              3   B   K   | ]}                     |          V  d S r4   )rP   r   s     r8   rL   z)create_serializer_impl.<locals>.<genexpr>  s1      -]-]g.@.@.C.C-]-]-]-]-]-]r:   zCan not create serializer for 	__slots____dict__z# that has __dict__ inside __slots__)9r   rm   	bytearraybytesintfloatcomplexboolr   r/   r   r,   r-   r&   r   __supertype__r)   r   r   r%   
__origin__rs   r   getattrr0   r   r*   	__total__r   r   r!   r'   __args__r   r$   r   r+   r7   lenr(   r    r   EllipsisrP   r|   r   r#   r	   r   r"   r6   rQ   r.   rp   hasattrr   r   )	rB   rC   r   r   r   rP   item_serializerkey_type_argvalue_type_args	   `        r8   r   r      s   v&&F#y%eWdCCCv & \&11 WV__ & Y%gvz6CWXXX6 ,"7+++F 
 3F ; ; 
VM^@_@_ 
% 00
 
 	
 V 
%!&&11
 
 	
 F  3F ; ; VM^@_@_  	)$VV44   *$VV4466   f~~ ,"7+++#y%eWdCCC6 0? 	0*6?1+=>>>&w///v #'""" ]]]]6?]]]]]{q  !!{q  $QJJ,W55J{c&/2222*:666 _v 	_0222!!Q&&6?1+=+I+I%001CDDO,_==='-]-]-]-]V_-]-]-](](]^^^6"" Gwv/@'A'A G-3_Evq))#/5G++C"7#5#5l#C#C#*#5#5n#E#EG G 	Gv _"#6w#?#?ATU\A]A]^^^6"" :{63D'E'E :!,,6?-[V_Q-?-?X[\\(9996 :-g66(999&$ "6** 	HFfFFGGG6;'' 	J&:J,J,J7 7 7 7  
 w'''r:   )Fdataclassesr   r   marshalr   r   operatorr   r   typingr	   r
   r   r   r   r   r   r   commonr   r   r   r   r?   r   r   r   r   genericsr   
path_utilsr   r   r   rC   r   r   type_detectionr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r9   rA   r   rs   r|   r   r   r   r   r   r   r   r   r   r   rc   r:   r8   <module>r      sq   - - - - - - - -                 ( ( ( ( ( ( ( ( M M M M M M M M M M M M M M M M M M M M 5 5 5 5 5 5 5 5 5 5 5 5            ( ' ' ' ' ' ; ; ; ; ; ; ; ; ; ; # # # # # # # #                                     x*+ 	    % % %
CC1IC YC c3Z_%	C
 C ]C C C CL!*Q- !JtAw<O ! ! ! !D)9    #z$s)'< # # # #	J 	 	 	 	* * * * * *
!     qM/9!}S#X   J    
1 *Xa[:Q    v 4  R\    "e(F e( e(#'e(,6e( e( e( e( e( e(r:   