
    BThD                     t   d dl Z d dlZd dl mZ d dlmZ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mZ d dlmZmZ d dlmZmZ er-d dlmZmZmZmZmZ e
dgef   Z e
d	dgd	f   Z!eed   d
ed   f   Z" G d d      Z#ddZ$ddZ% G d de&      Z' G d de&      Z(de)de)de)fdZ* G d d      Z+ G d de+      Z,y)    N)OrderedDict)FunctionTypeGeneratorTypeMappingProxyType)TYPE_CHECKINGAnyCallableDict	GeneratorIterable
NamedTupleOptionalSetTupleUnion)SYMBOL_ELLIPSISTEXT_ENCODING)SnapshotSnapshotCollection)PropertyFilterPropertyMatcherPropertyNamePropertyPathSerializableDatar   r   PropertyValueGetterPropertyValueFilterc                   $    e Zd ZdefdZdefdZy)Repr_reprc                     || _         y Nr   )selfr   s     t/var/www/catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/syrupy/extensions/amber/serializer.py__init__zRepr.__init__5   s	    
    returnc                     | j                   S r!   r"   )r#   s    r$   __repr__zRepr.__repr__8   s    zzr&   N)__name__
__module____qualname__strr%   r)    r&   r$   r   r   4   s    c # r&   r   r'   c                 ,    t        | t        |            S r!   )getattrr-   ops     r$   attr_getterr4   <   s    1c!fr&   c                     | |   S r!   r.   r1   s     r$   item_getterr6   @   s    Q4Kr&   c                       e Zd ZdZy)MalformedAmberFilezL
    The Amber file is malformed. It should be deleted and regenerated.
    Nr*   r+   r,   __doc__r.   r&   r$   r8   r8   D       r&   r8   c                       e Zd ZdZy)MissingVersionErrorz'
    Missing Amber version marker.
    Nr9   r.   r&   r$   r=   r=   J   r;   r&   r=   stringsuffixc                 F    | j                  |      r| dt        |        S | S )zN
    Can be replaced with str.removesuffix once Py3.8 support is dropped.
    N)endswithlen)r>   r?   s     r$   removesuffixrC   P   s(    
 vnV%%Mr&   c                      e Zd ZU dZdZdZeed<   dZe	ed<   dZ
 G d d	      Zed
ddefd       Ze	 dQdddeddfd       Zededed   fd       Zededdfd       Zeddddddded   ded   ded   def
d        Zed!dddd"dd#ddd$e	ded   ded   ded   d%d&d'eee      defd(       Zed!d)dee	ef   d$e	d*edefd+       Zed!d)ded$e	d*edefd,       Zeded   d*edefd-       Zeded   d*edefd.       Zeded*edefd/       Z ede!d0   d*edefd1       Z"ed!d)de#d$e	d*edefd2       Z$ed!d)ded$e	d*edefd3       Z%ededd4fd5       Z&ededd6fd7       Z'ed8ed$e	defd9       Z(ed:ee   dee   fd;       Z)edddefd<       Z*ed=edefd>       Z+ed!d)ddd$e	defd?       Z,eddd!ddd"ddd@dddAdBdCee   dDee   d$e	ded   ded   d%d&dEee   dFed*edefdG       Z-ed!dHdIdJdddKee   dLedMed$e	dNedOedefdP       Z.y)RAmberDataSerializerz
    If extending the serializer, change the VERSION property to some unique value
    for your iteration of the serializer so as to force invalidation of existing
    snapshots.
    1z  _indentc   
_max_depthz# c                       e Zd ZdZdZdZy)AmberDataSerializer.Markerzserializer versionnamez---N)r*   r+   r,   VersionNameDividerr.   r&   r$   MarkerrK   g   s    &r&   rP   snapshotr   r'   c                     |j                   S r!   )rL   )clsrQ   s     r$   _snapshot_sort_keyz&AmberDataSerializer._snapshot_sort_keyl   s    }}r&   Fsnapshot_collectionr   mergeNc           	      d   |j                   }|r$| j                  |      }|j                  |       |}t        |dt        d      5 }|j                  | j                   | j                  j                   d| j                   d       t        || j                        D ]  }t        |j                        }||j                  | j                   | j                  j                   d|j                   d       |j!                  d      D ]#  }|j                  | j#                  |d	             % j%                  d      r!|j                  | j#                  d
d	             |j                  d| j                   | j                  j&                   d        	 ddd       y# 1 sw Y   yxY w)zY
        Writes the snapshot data into the snapshot file that can be read later.
        wNencodingnewline: 
keyTkeepends    )location	read_filerV   openr   write_marker_prefixrP   rM   VERSIONsortedrT   r-   datarN   rL   
splitlineswith_indentrA   rO   )	rS   rU   rV   filepathbase_snapshotfrQ   snapshot_data	data_lines	            r$   
write_filezAmberDataSerializer.write_filep   s    '//MM(3M 34"/(C-F 	M!GGs))*3::+=+=*>bRPQ"#** M !$HMM 2 ,GGs1123::??2C2hmm_TVWX%2%=%=t%=%L ?		1 =>? ))$/ A 67GGb!3!3 4SZZ5G5G4HKLM	M 	M 	Ms   A3F&:C"F&&F/rn   )r   NNc           	   #     K   t        | j                        }t        | j                        }d }d}d}d}	 t        |t        d       5 }t        |      D ]Z  \  }	}
|
j                  | j                        r|
|d  j                  dd      ^}}|j                  d      }|r|d	   j                         nd }|| j                  j                  k(  r#|	rt        d
      |r|| j                  k7  rd}d}|| j                  j                  k(  r|st        d      |j                  d      }|| j                  j                  k(  s|r9|r7t!        ||j#                  d      rt%        |d      nt%        |d      |       d }d}2|6|
j                  | j                        sS||
|d  z  }] 	 d d d        |rt&        y # 1 sw Y   xY w# t(        $ r Y y w xY ww)Nrc   FTrY   :rb   )maxsplitz 
r   z1Version must be specified at the top of the file.zMissing snapshot name.
r]   )rL   rk   tainted)rB   rh   rG   rf   r   	enumerate
startswithsplitrstripstriprP   rM   r8   ri   rN   rO   r   rA   rC   r=   FileNotFoundError)rS   rn   marker_offset
indent_len	test_namerq   rx   missing_versionrp   line_noline
marker_keymarker_restmarker_values                 r$   __read_file_with_markersz,AmberDataSerializer.__read_file_with_markers   s     C../%
	+	*hE %;%.q\ $;MGTs'9'9:373G3M3M! 4N 40
[ &0%6%6w%?
AL{1~';';'=RV%););;&&8$W'" !" $0<3;;3N*. (.3O%8#/&89Q&R R(4(:(:7(CI$%););;(]&.)2'4'='=f'E *6mV)L)5mT)J,3'" !" )-I,.M".4??3;;3O%jk)::I$;%;R )) S%; %;L ! 		sT   3GG C<GAG
G'G3G ;	GG	G 	GGGGc                     t        |      }	 | j                  |      D ]&  }|j                  rd|_        |j                  |       ( 	 |S # t        $ r d|_        Y |S w xY w)z
        Read the raw snapshot data (str) from the snapshot file into a dict
        of snapshot name to raw data. This does not attempt any deserialization
        of the snapshot data.
        )rd   T)r   ,_AmberDataSerializer__read_file_with_markersrx   addr=   )rS   rn   rU   rQ   s       r$   re   zAmberDataSerializer.read_file   sv     1(C	/88B 2##26'/#''12 #" # 	/*.'""	/s   :A AAexcludeincludematcherrk   r   r   r   r   r   r   c                p    | j                  ||||      }|j                  dd      j                  dd      S )a_  
        After serializing, new line control characters are normalised. This is needed
        for interoperablity of snapshot matching between systems that do not use the
        same new line control characters. Example snapshots generated on windows os
        should not break when running the tests on a unix based system and vice versa.
        r   rw   r]   )
_serializereplace)rS   rk   r   r   r   
serializeds         r$   	serializezAmberDataSerializer.serialize   sB     ^^'7G $ 

 !!&$/77dCCr&   r   r.   )depthr   r   r   pathvisitedr   r   r   r   c                   |
t               n|}t        |      }|| j                  kD  s||v rt        t              }n|r
 |||      }||||||h ||d}	| j
                  }
t        |t              r| j                  }
nt        |t        t        f      r| j                  }
nt        |t         t        f      r| j                  }
nt        |t        t        f      r| j                   }
nb| j#                  |      r| j$                  }
nDt        |t&        t(        t*        f      r| j,                  }
nt        |t.              r| j0                  }
 |
di |	S )N)rk   r   )rk   r   r   r   r   r   r   r.   )setidrI   r   r   serialize_unknown
isinstancer-   serialize_stringintfloatserialize_number	frozensetserialize_setdictr   serialize_dict#_AmberDataSerializer__is_namedtupleserialize_namedtuplelisttupler   serialize_iterabler   serialize_function)rS   rk   r   r   r   r   r   r   data_idserialize_kwargsserialize_methods              r$   r   zAmberDataSerializer._serialize   s>    #?#%T(3>>!W%7(D40D**'*
 00dC "33sEl+"33sI./"00t%567"11  &"77tUM:;"55l+"553"233r&   r   kwargsc                (    | j                  ||      S Nrk   r   )%_AmberDataSerializer__serialize_plainrS   rk   r   r   s       r$   r   z$AmberDataSerializer.serialize_number  s     $$$e$<<r&   c          	           t        fddD              r j                        S  j                   fdt              j	                  d      D        dddd	
      S )Nc              3   &   K   | ]  }|v 
 y wr!   r.   ).0crk   s     r$   	<genexpr>z7AmberDataSerializer.serialize_string.<locals>.<genexpr>!  s     -q}-s   rw   r   c              3   P   K   | ]  }j                  |rd z   n        ywrb   N)rm   )r   r   rS   r   s     r$   r   z7AmberDataSerializer.serialize_string.<locals>.<genexpr>&  s,       5eaieDs   #&Tr`   z'''Frc   )rk   linesr   open_tag	close_taginclude_typeends)allr   %_AmberDataSerializer__serialize_linesr-   rl   r   s   ``` r$   r   z$AmberDataSerializer.serialize_string  sr    -f--((d%(@@$$I00$0?  % 
 	
r&   c           	          d\  }}t        |t              rd\  }}t        |      } | j                  d|t        t	        |            t
        d f||d|S )N)NN)[]rk   resolve_entries
open_parenclose_parenr.   )r   r   serialize_custom_iterablerangerB   r6   )rS   rk   r   r   r   valuess         r$   r   z&AmberDataSerializer.serialize_iterable1  sk     #/
KdD!&0#Jd,s,, 
"3v;/dC!#	

 
 	
r&   c                 V     | j                   d|| j                  |      d d fddd|S )Nc                     |S r!   r.   )_r3   s     r$   <lambda>z3AmberDataSerializer.serialize_set.<locals>.<lambda>F  s    ! r&   {}r   r.   )r   sortrS   rk   r   s      r$   r   z!AmberDataSerializer.serialize_setB  sA    ,s,, 
 XXd^^TB	

 
 	
r&   c                 n     | j                   d|| j                  |j                        t        d fdd|S )N=)rk   r   	separatorr.   )r   r   _fieldsr4   r   s      r$   r   z(AmberDataSerializer.serialize_namedtupleL  sC    ,s,, 
 XXdll3[$G
 	
 	
r&   )r   r   c           
          t        |t        f      r|j                         n| j                  |j                               } | j                  d||t
        d fddddd|S )Nr   r   r\   T)rk   r   r   r   r   serialize_keyr.   )r   r   keysr   r   r6   )rS   rk   r   r   s       r$   r   z"AmberDataSerializer.serialize_dictU  sm    
 &d[N;DIIK$))+AV 	 -s,, 
!;5
 
 	
r&   c                |    | j                  |j                   t        t        j                  |             |      S r   )r   r,   r-   inspect	signaturer   s       r$   r   z&AmberDataSerializer.serialize_functiong  sB     $$%%&s7+<+<T+B'C&DEU % 
 	
r&   c          	          |j                   j                  t        j                  k7  r| j                  ||      S  | j                  d|| j                  | j                  |            t        d f|dd|S )Nr   c                     t        |        S r!   )callable)vs    r$   r   z7AmberDataSerializer.serialize_unknown.<locals>.<lambda>y  s    hqk/ r&   r   )rk   r   r   r   r.   )	__class__r)   objectr   r   r   object_attrsr4   r   s       r$   r   z%AmberDataSerializer.serialize_unknowno  s    >>""foo5((d%(@@,s,, 

))$/0)
 

 

 
	
r&   zIterable[str]c                 &    d t        |      D        S )Nc              3   D   K   | ]  }|j                  d       r|  yw)r   N)rz   )r   rL   s     r$   r   z3AmberDataSerializer.object_attrs.<locals>.<genexpr>  s     G$//#2FGs     )dirrS   rk   s     r$   r   z AmberDataSerializer.object_attrs  s    GTGGr&   zTuple[Any, ...]c                     t        | j                  |            } t        j                  |j                  j
                  |      di |D ci c]  }|t        ||       c}S c c}w )Nr.   )r   r   collections
namedtupler   r*   r0   )rS   rk   
attr_namesprops       r$   object_as_named_tuplez)AmberDataSerializer.object_as_named_tuple  s_    #**401
J{%%dnn&=&=zJ 
5?@TtWT4((@
 	
@s   A$r>   c                 (    | j                   |z   | S r!   )rG   )rS   r>   r   s      r$   rm   zAmberDataSerializer.with_indent  s    ++%&vh//r&   iterablec                 f    	 t        |      S # t        $ r t        || j                        cY S w xY w)Nr^   )rj   	TypeErrorr   )rS   r   s     r$   r   zAmberDataSerializer.sort  s2    	8(## 	8(77	8s   
  00c                 0    |j                   j                   S r!   )r   r*   r   s     r$   object_typezAmberDataSerializer.object_type  s    ..))*+r&   objc                 b    t        |t              xr t        d t        |dd g      D              S )Nc              3   >   K   | ]  }t        |t        f        y wr!   )r   r-   )r   ns     r$   r   z6AmberDataSerializer.__is_namedtuple.<locals>.<genexpr>  s      .
&'Jq3&!.
s   r   )r   r   r   r0   )rS   r   s     r$   __is_namedtuplez#AmberDataSerializer.__is_namedtuple  s5    #u% 
# .
+23	D6+J.
 +
 	
r&   c                8    | j                  t        |      |      S r!   )rm   repr)rS   rk   r   s      r$   __serialize_plainz%AmberDataSerializer.__serialize_plain  s     tDz511r&   )r   r   r   r   r   r   r   r   r   IterableEntriesr   r   r   r   c       
            	
 dz   d<   |\  }fd|D        }fd|D        }dddt         f 	
fdddd	d
dt         f 	fd j                  fd|D        d|xs d |xs d d      S )z9
        Utility to serialize a custom iterable.
        rb   r   c              3   d   K   | ]'  }r
 |       sr
 |       r| |      f ) yw))r   r   Nr.   )r   r_   rk   r   	get_valuer   r   s     r$   r   z@AmberDataSerializer.serialize_custom_iterable.<locals>.<genexpr>  s=      
7$#?St < )D#&'
s   -0c              3   <   K   | ]  }r |d          r|  ywr   r.   )r   entryinclude_values     r$   r   z@AmberDataSerializer.serialize_custom_iterable.<locals>.<genexpr>  s'      
 M%($; 
s   r_   r   r'   c                     yr j                   dd| iz   S j                  t        |       dz         z   S )Nrc   rk   rb   r   r.   )r   rm   r-   )r_   rS   r   r   r   r   s    r$   key_strz>AmberDataSerializer.serialize_custom_iterable.<locals>.key_str  s_      ! 2C262 	  __SXUQY_?	 r&   valuer   c                      j                   d|g | t        |      fd}|S |j                  j                        S )N)rk   r   r   r   r.   )r   typelstriprG   )	r_   r  r   rS   r   r   r   r   r   s	      r$   	value_strz@AmberDataSerializer.serialize_custom_iterable.<locals>.value_str  sb    ' 0t0c4;/0	
 J "+!2:V
8I8I#++8VVr&   c              3   L   K   | ]  \  }} |        ||       d   yw),Nr.   )r   r_   r  r  r  s      r$   r   z@AmberDataSerializer.serialize_custom_iterable.<locals>.<genexpr>  s,     Wegcl^Ic5$9#:!<Ws   !$(rc   ))rk   r   r   r   r   )r-   r   )rS   rk   r   r   r   r   r   r   r   r   r   r   r   
key_valuesentriesr  r  r  r  s   ``   ```````   @@@@r$   r   z-AmberDataSerializer.serialize_custom_iterable  s    &  !)w)8&i



#
	 	C 	 		W> 	W2D 	W 	W 	W $$WwW)r*+$*+1- % 
 	
r&   Tr]   )r   r   r   r   r   r   r   r   c                    |j                  |      }|rdnd}|r| j                  |       nd}	| j                  |	 | |      }
| j                  ||      }|
 d| | | S )Nr]   rc   )joinr   rm   )rS   rk   r   r   r   r   r   r   	lines_endmaybe_obj_typeformatted_open_tagformatted_close_tags               r$   __serialize_linesz%AmberDataSerializer.__serialize_lines  sx     		% !Dr	7CCOOD12 __/?z-JER!ooi?$%Rwyk:M9NOOr&   )F)/r*   r+   r,   r:   ri   rG   r-   __annotations__rI   r   rh   rP   classmethodr   rT   boolrs   r   r   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   rm   r   r   r   r   r   r   r.   r&   r$   rE   rE   Z   s    GGSJN 
 *    FKM"6M?CM	M M: 6*6*	)	*6* 6*p # #)= # #" 
 /3.2/3D D *+	D
 *+D +,D 
D D& 
 .2.2/3!&*)4 )4 	)4
 *+)4 *+)4 +,)4 )4 #c(#)4 
)4 )4V 67=e$=03=CF=	= =
 9: 
C 
3 
c 
c 
 
" 
./
;>
	
 
  
%7!8 
C 
C 
 
 

 
c 
c 
 
 
:;
GJ
	
 
" 12

+.
>A
	
 
 :; 
S 
C 
s 
s 
 
  H H H H 
 
1B 
 
 0 0S 0S 0 0 8HSM 8hsm 8 8 ,1 ,c , , 
# 
$ 
 

 
 	2 !2 	2
 
2 2  %)%).2.2!#'#:
 !:
 +	:

 SM:
 c]:
 :
 *+:
 *+:
 :
 C=:
 :
 :
 
:
 :
x  !P !P }	P
 P P P P P 
P Pr&   rE   c            	       v    e Zd ZdZej
                   dZededee	e
ee	f   f   fd       Zedddefd       Zy	)
AmberDataSerializerSortedzK
    This is an experimental serializer with known performance issues.
    z-sortedpartr'   c                 l    	 t        |      }t        |      |k(  rd|fS d|fS # t        $ r d|fcY S w xY w)Nrb   r   )r   r-   
ValueError)rS   r  is      r$   __maybe_intz%AmberDataSerializerSorted.__maybe_int  sI    		 D	A1v~1vt9 	t9	s   # # 33rQ   r   c                 |    |j                   j                  d      D cg c]  }| j                  |       c}S c c}w )N.)rL   r{   %_AmberDataSerializerSorted__maybe_int)rS   rQ   r  s      r$   rT   z,AmberDataSerializerSorted._snapshot_sort_key  s.    2:--2E2Ec2JK$%KKKs   9N)r*   r+   r,   r:   rE   ri   r  r-   r   r   r   r&  r   rT   r.   r&   r$   r  r    st     %,,-W5G
s 
uS%S/-A'B 
 
 L* L L Lr&   r  )r2   r   r3   r   r'   r   )-r   r   r   typesr   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   syrupy.constantsr   r   syrupy.datar   r   syrupy.typesr   r   r   r   r   r  r   r   r   r   r4   r6   	Exceptionr8   r=   r-   rC   rE   r  r.   r&   r$   <module>r-     s      # 
   
   #N#3T#9:"	^,.@@  &'	)O  )  c c ]P ]P@L 3 Lr&   