
    (i;                        d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZ ddlmZ  G d d      Zd Zd!d	Zed!d
       Zed!d       Zd Z G d dej,                        Z G d d      Z G d d      Zd Z G d dej                   j6                        Zd Zed        Zd Z ej@                  dejB                        Z"d Z#ed        Z$ G d de jJ                        Z& G d dee&       Z'y)"    N)to_dictto_setto_tuple)ListDeserializationErrorListSerializationErrorObjectDeserializationErrorObjectSerializationError   )Listc                       e Zd ZdZdZdZdZy)MetaBaseN)__name__
__module____qualname__fieldsfield_namesfield_attrssedes     G/var/www/br/venv/lib/python3.12/site-packages/rlp/sedes/serializable.pyr   r      s    FKKEr   r   c                 l    t        j                  |       }t        d |j                         D              S )Nc              3   2   K   | ]  \  }}|d kD  s|  yw)r
   Nr   ).0itemnums      r   	<genexpr>z"_get_duplicates.<locals>.<genexpr>"   s     A)$qAs   )collectionsCountertupleitems)valuescountss     r   _get_duplicatesr$       s)      (FAv||~AAAr   c                    t        |      }|rt        dt        |             |t        |       d  }t	        |d t        |              }|j                  |j                               }|rt        dt        |             t	        |j                               j                  |      }|rt        dt        |             t	        |      j                  |j                               }	|s|	rt        dt        |	             y y )NzDuplicate argument names: zDuplicate kwargs: zUnknown kwargs: zMissing kwargs: )r$   	TypeErrorsortedlensetintersectionkeys
difference)
argskwargs	arg_namesallow_missingduplicate_arg_namesneeded_kwargsused_kwargsduplicate_kwargsunknown_kwargsmissing_kwargss
             r   validate_args_and_kwargsr7   %   s    ))44V<O5P4QRSSc$ik*Mi#d),-K"//>,V4D-E,FGHH'229=N*6.+A*BCDD'226;;=AN^*6.+A*BCDD ,=r   c              #   z   K   t        | |||       |t        |       d  }| E d {    |D ]	  }||     y 7 wNr0   )r7   r(   )r-   r.   r/   r0   r2   arg_names         r   merge_kwargs_to_argsr<   :   sJ     T69MRc$ik*MOO! X s   #;9;c              #      K   t        | |||       |j                         E d {    t        | |      D ]  \  }}||f  y 7 wr9   )r7   r!   zip)r-   r.   r/   r0   valuenames         r   merge_args_to_kwargsrA   E   sL     T69MR||~4+ tEk s   #AA Ac                     t        | t        t        f      rKt        |t        t        f      r5t        |       t        |      k(  xr t	        d t        | |      D              S | |k(  S )zq
    Equality comparison that allows for equality between tuple and list types with
    equivalent elements.
    c              3   ,   K   | ]  }t        |   y wN)_eq)r   pairs     r   r   z_eq.<locals>.<genexpr>T   s     .WdsDz.Ws   )
isinstancer    listr(   allr>   )leftrights     r   rE   rE   N   sT    
 $&:eeT]+K4yCJ&W3.Wc$PUFV.W+WWu}r   c                       e Zd ZdZdZdZy)ChangesetStateINITIALIZEDOPENCLOSEDN)r   r   r   rN   rO   rP   r   r   r   rM   rM   Y   s    KDFr   rM   c                   $    e Zd ZdZd ZddZd Zy)ChangesetFieldNc                     || _         y rD   )field)selfrT   s     r   __init__zChangesetField.__init__b   s	    
r   c                     || S |j                   t        j                  urt        d      	 |j                  | j
                     S # t        $ r# t        |j                  | j
                        cY S w xY wNz6Changeset is not active.  Attribute access not allowed)		__state__rM   rO   AttributeError__diff__rT   KeyErrorgetattr__original__)rU   instancetypes      r   __get__zChangesetField.__get__e   st    K~':':: H B((44 Bx44djjAABs   A )A21A2c                     |j                   t        j                  urt        d      ||j                  | j
                  <   y rX   )rY   rM   rO   rZ   r[   rT   )rU   r_   r?   s      r   __set__zChangesetField.__set__r   s<    ^%8%88 H  ).$**%r   rD   )r   r   r   rT   rV   ra   rc   r   r   r   rR   rR   _   s    EB.r   rR   c                   D    e Zd ZdZdZdZd	dZd Zd Zd Z	d Z
d Zd Zy)
BaseChangesetNc                 R    || _         t        j                  | _        |xs i | _        y rD   )r^   rM   rN   rY   r[   )rU   objchangess      r   rV   zBaseChangeset.__init__   s"    '332r   c                 F    | j                         }| j                          |S rD   )	build_rlpclose)rU   rg   s     r   commitzBaseChangeset.commit   s    nn


r   c           	      <   | j                   t        j                  k(  rp| j                  j                  j
                  D ci c],  }|| j                  j                  || j                  |         . }} t        | j                        di |S t        d      c c}w )Nz4Cannot open Changeset which is not in the OPEN stater   )
rY   rM   rO   r^   _metar   r[   getr`   
ValueError)rU   r@   field_kwargss      r   rj   zBaseChangeset.build_rlp   s    >>^000 !--33?? dmm''d.?.?.EFFL  +4))*:\::STTs    1Bc                 ~    | j                   t        j                  k(  rt        j                  | _         y t	        d      Nz;Cannot open Changeset which is not in the INITIALIZED state)rY   rM   rN   rO   rp   rU   s    r   openzBaseChangeset.open   s1    >>^777+00DNM r   c                 ~    | j                   t        j                  k(  rt        j                  | _         y t	        d      )Nz5Cannot close Changeset which is not in the OPEN state)rY   rM   rO   rP   rp   rt   s    r   rk   zBaseChangeset.close   s-    >>^000+22DNTUUr   c                 v    | j                   t        j                  k(  r| j                          | S t	        d      rs   )rY   rM   rN   ru   rp   rt   s    r   	__enter__zBaseChangeset.__enter__   s2    >>^777IIKKM r   c                 `    | j                   t        j                  k(  r| j                          y y rD   )rY   rM   rO   rk   )rU   exc_type	exc_value	tracebacks       r   __exit__zBaseChangeset.__exit__   s"    >>^000JJL 1r   rD   )r   r   r   r^   rY   r[   rV   rl   rj   ru   rk   rx   r}   r   r   r   re   re   z   s6    LIH&

UVr   re   c                     | j                   j                  D ci c]  }|t        |       }}t        | j                  j
                   dt        f|      } || |      S c c}w )N	Changeset)rn   r   rR   r`   	__class__r   re   )rg   rh   r@   	namespaceclss        r   r   r      sf    8;		8M8MN~d++NIN
==!!
"),	C
 sG Os   A c                       e Zd Zd ZdZd Zd Zd Zd Zd Z	d Z
dZd	 Zd
 Zed        Zed        Zd Zd Zd ZdZd Zy)BaseSerializablec                    |r"t        ||| j                  j                        }n|}t        |      t        | j                  j                        k7  rit	        dt        | j                  j                         dt        |       ddj                  | j                  j                  t        |      d               t        || j                  j                        D ]  \  }}t        | |t        |              y )Nz"Argument count mismatch. expected z - got z - missing ,)
r<   rn   r   r(   r&   joinr>   r   setattrmake_immutable)rU   r-   r.   field_valuesr?   attrs         r   rV   zBaseSerializable.__init__   s    /fdjj>T>TULL|DJJ$:$: ;;4S9O9O5P4Q R<() *88DJJ$:$:3|;L;N$OPQS  |TZZ-C-CD 	7KE4D$u 56	7r   Nc                 v    t        | j                  j                  |       D ci c]  \  }}||
 c}}S c c}}w rD   )r>   rn   r   )rU   rT   r?   s      r   as_dictzBaseSerializable.as_dict   s/    14TZZ5K5KT1RSuSSSs   5c              #   ^   K   | j                   j                  D ]  }t        | |        y wrD   )rn   r   r]   rU   r   s     r   __iter__zBaseSerializable.__iter__   s,     JJ** 	&D$%%	&s   +-c                 N    t        |t              r% j                  j                  |   }t	         |      S t        |t
              r- j                  j                  |   }t         fd|D              S t        |t              rt	         |      S t        dt        |             )Nc              3   6   K   | ]  }t        |        y wrD   r]   )r   rT   rU   s     r   r   z/BaseSerializable.__getitem__.<locals>.<genexpr>   s     G%u-Gs   z"Unsupported type for __getitem__: )
rG   intrn   r   r]   slicer    str
IndexErrorr`   )rU   idxr   field_slices   `   r   __getitem__zBaseSerializable.__getitem__   s    c3::))#.D4&&U#**005KG;GGGS!4%%A$s)MNNr   c                 @    t        | j                  j                        S rD   )r(   rn   r   rt   s    r   __len__zBaseSerializable.__len__   s    4::$$%%r   c                 T    t        |t              xr t        |       t        |      k(  S rD   )rG   Serializablehash)rU   others     r   __eq__zBaseSerializable.__eq__   s!    %.L4:e3LLr   c                 D    | j                   j                         }d |d<   |S )N_hash_cache)__dict__copy)rU   states     r   __getstate__zBaseSerializable.__getstate__   s%    ""$
  $mr   c                 d    | j                   t        t        |             | _         | j                   S rD   )r   r   r    rt   s    r   __hash__zBaseSerializable.__hash__   s+    ##E$K0Dr   c                     t        d | j                         j                         D              }t        |       j                   ddj                  |       dS )Nc              3   0   K   | ]  \  }}| d |  yw)=Nr   )r   kvs      r   r   z,BaseSerializable.__repr__.<locals>.<genexpr>   s     Mdas!A5\Ms   (z, ))r    r   r!   r`   r   r   )rU   keyword_argss     r   __repr__zBaseSerializable.__repr__   sI    Mdlln6J6J6LMMt*%%&a		,(?'@BBr   c                     	 | j                   j                  j                  |      S # t        $ r}t	        || |      d }~ww xY w)N)rg   r   list_exception)rn   r   	serializer   r	   )r   rg   es      r   r   zBaseSerializable.serialize   sB    	Q99??,,S11% 	Q*s#aPP	Qs   $' 	A>Ac                     	 | j                   j                  j                  |      }t        |i | j                   j                        } | di ||S # t        $ r}t	        || |      d }~ww xY w)N)serialr   r   r   )rn   r   deserializer   r   rA   r   )r   r   extra_kwargsr"   r   args_as_kwargss         r   r   zBaseSerializable.deserialize  sq    	YYY__008F .fb#)):O:OP4^4|44	 ( 	Y,F#VWXX	Ys   %A 	A.A))A.c                    t        | j                  j                        j                  |j	                               j                  | j                  j                  d t        |             }| j                         j                         D ci c]  \  }}||v r|t        j                  |      ! }}}t        di ||}t        ||| j                  j                        } t        |       di |S c c}}w )Nr   )r)   rn   r   r,   r+   r(   r   r!   r   deepcopydictrA   r`   )	rU   r-   r.   missing_overrideskeyr?   unchanged_kwargscombined_kwargs
all_kwargss	            r   r   zBaseSerializable.copy  s    

&&'Z&Z

..{T;< 	 #lln224
U'' u%%
 

 <!1<V<)$AWAWX
tDz'J''
s   $C3c                 "    | j                         S rD   r   rt   s    r   __copy__zBaseSerializable.__copy__      yy{r   c                 "    | j                         S rD   r   )rU   r-   s     r   __deepcopy__zBaseSerializable.__deepcopy__   r   r   Fc                 b    t        ||| j                  j                  d      }t        | |      S )NTr:   )rh   )rA   rn   r   r   )rU   r-   r.   r   s       r   build_changesetz BaseSerializable.build_changeset%  s1    -JJ""	
 ~66r   )r   r   r   rV   _cached_rlpr   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   _in_mutable_contextr   r   r   r   r   r      s    7  KT&
O&M K C Q Q 5 5(  7r   r   c                 J    t        | t              rt        d | D              S | S )Nc              3   2   K   | ]  }t        |        y wrD   )r   r   r   s     r   r   z!make_immutable.<locals>.<genexpr>1  s     <d^D)<   )rG   rH   r    r?   s    r   r   r   /  s"    %<e<<<r   c              #      K   t        |       j                  |      }| D ]"  }	 d|z   }||vr|j                  |       | #  y w)N_)r)   unionadd)r   extra_namespacer   rT   s       r   _mk_field_attrsr   6  sW     K &&7I %KEI%e$ s   AAc                 0    fd}fd}t        ||      S )Nc                     t        |       S rD   r   r   s    r   field_fn_getterz+_mk_field_property.<locals>.field_fn_getterC  s    tT""r   c                 N    | j                   st        d      t        | |       y )Nzcan't set attribute)r   rZ   r   )rU   r?   r   s     r   field_fn_setterz+_mk_field_property.<locals>.field_fn_setterF  s$    '' !677dE"r   )property)rT   r   r   r   s    `  r   _mk_field_propertyr   B  s    ##
 O_55r   z^[^\d\W]\w*\Zc                 `    t        | t              syt        t        j	                  |             S )NF)rG   r   boolIDENTIFIER_REGEXmatchr   s    r   _is_valid_identifierr   Q  s&    eS! &&u-..r   c              #      K   t        | d      r"| j                  j                         E d {    t        | d      r| j                  E d {    y y 7 &7 w)Nr   	__slots__)hasattrr   r+   r   )r   s    r   _get_class_namespacer   X  sK     sJ<<$$&&&sK ==   ! 	' s!   *AAAAAAc                        e Zd Z fdZ xZS )SerializableBasec                     t         |   }t        d |D              }t        |      dkD  }t	        |      }d|v }|s || |||      S |s8|rt        d      |d   }	t        |	d      r|	j                  j                  }
n$d}
n!t        d |j                  d      D              }
|
rt        |
 \  }}nd	\  }}t        |      }|r&t        d
dj                  t        |                   |D ch c]  }t        |      s| }}|r-t        ddj                  d t        |      D                     |D ch c]+  }t        |d      r|j                  j                  D ]  }| - }}}|j!                  |      }|r&t        ddj                  t        |                   t#        |j%                               j'                  d |D              }t)        ||      }|
||t+        |      d}|j                  dt,              }t/        d|f|      }||d<   t        d t        |j                  |j0                        D              } || ||t3        |t        |j5                               z               S c c}w c c}}w )Nc              3   B   K   | ]  }t        |t              s|  y wrD   )rG   r   )r   bs     r   r   z+SerializableBase.__new__.<locals>.<genexpr>d  s     "Wz!EU7V1"Ws   r
   r   ziCannot create subclass from multiple parent `Serializable` classes without explicit `fields` declaration.r   rn   r   c              3   2   K   | ]  }t        |        y wrD   )r    )r   rT   s     r   r   z+SerializableBase.__new__.<locals>.<genexpr>  s     IE5<Ir   )r   r   zAThe following fields are duplicated in the `fields` declaration: r   z<The following field names are not valid python identifiers: c              3   (   K   | ]
  }d | d   yw)`Nr   r   s     r   r   z+SerializableBase.__new__.<locals>.<genexpr>  s     PDavQKPs   zSubclasses of `Serializable` **must** contain a full superset of the fields defined in their parent classes.  The following fields are missing: c              3   b   K   | ]'  }|j                   D ]  }t        |      D ]  }|   ) y wrD   )__mro__r   )r   base
parent_clsr   s       r   r   z+SerializableBase.__new__.<locals>.<genexpr>  sK      5
"ll5
 ,Z8	5
  5
5
5
s   -/)r   r   r   r   Metac              3   >   K   | ]  \  }}|t        ||      f  y wrD   )r   )r   rT   r   s      r   r   z+SerializableBase.__new__.<locals>.<genexpr>  s)      
t &ud34
s   )super__new__r    r(   anyr&   r   rn   r   popr>   r$   r   r'   r   r   r,   r)   r+   r   r   r   r   r`   r   r   r!   )r   r@   basesattrs	super_newserializable_bases!has_multiple_serializable_parentsis_serializable_subclassdeclares_fieldsparent_serializabler   r   r   duplicate_field_names
field_nameinvalid_field_namesr   parent_field_namesmissing_fieldsreserved_namespacer   meta_namespace	meta_basemetafield_propsr   s                            r   r   zSerializableBase.__new__a  s   GO	""We"WW,/0B,Ca,G)#&'9#: "e+' S$u55 0E  '9&;#.8066==F  F IUYYx5HIIF !$fK!'K !0 <   #0E)F GHJ  *
'
3 
 

 N88PF;N4OPPQS  +
tW%"jj44	
  

 
 ,66{C''*xx~0F'G&HJ  !.44 5
5
 
 &k3EF &&%[	
 IIgx0	L

 g  
"4#3#3T5E5EF
 

 uU[[]334	
 	
}

s   -I570I:)r   r   r   r   __classcell__)r   s   @r   r   r   `  s    s
 s
r   r   c                       e Zd ZdZy)r   z2
    The base class for serializable objects.
    N)r   r   r   __doc__r   r   r   r   r     s    r   r   )	metaclass)F)(abcr   r   enumre	eth_utilsr   r   r   rlp.exceptionsr   r   r   r	   listsr   r   r$   r7   r<   rA   rE   EnumrM   rR   re   r   Sequencer   r   r   r   compileUNICODEr   r   r   ABCMetar   r   r   r   r   <module>r     s'   
    	  
 B
E* 
 
 	 	TYY . .65 5pp7{// p7f 
 
	6 2::.

; / ! !t
s{{ t
n#/? r   