ó
    ` Éj!-  ã                   ó:  • S r SSKrSSKJs  Jr  SSKrSSKrSSK	r	SSK
r
SSKJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJrJr  \
R8                  " SS9S	 5       r\\S\4S
 jrS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/g)ui   GestiÃ³n de fotos del admin (corregir un QR mal leÃ­do, papelera) y compatibilidad con el layout antiguo.é    N)ÚImage)Úconfig)Úphoto_serviceÚschool_service)	Ú	DEMO_CODEÚLEGACY_CODEÚ
OTHER_CODEÚOTHER_SCHOOLÚPHOTOGRAPHERÚSCHOOLÚ
family_dirÚ	save_jpegÚplain_imageT)Úautousec               #   ó&  #   • Sv •  [        [        [        [        5      R	                  S5      5      [        [        [        [        5      R	                  S5      5      -    H  n U R                  SS9  M     [        R                  " [        5        g7f)uU   Las fotos temporales de estos tests no pueden contaminar las galerÃ­as de los demÃ¡s.Nz	tmp_*.jpgúdup*.jpgT)Ú
missing_ok)Úlistr   r   r   ÚglobÚunlinkr   Úinvalidate_families_cache)Úfs    ÚZD:\Ingenieria\TRABAJOS ONLINE\Projects\11- Photo School\backend\tests\test_photos_admin.pyÚ_clean_temporary_photosr      sg   é € ó 
Ü”*œV¤YÓ/×4Ñ4°[ÓAÓBÄTÌ*ÔU[Ô]fÓJg×JlÑJlÐmwÓJxÓEyÔyˆØ	�‰˜DˆÓ!ñ zä×+Ò+¬FÕ3ùs   ‚BBc                 ó¢   • U=(       d&    S[         R                  " 5       R                  S S  S3n[        [	        SSS9[        XU5      U-  5      $ )NÚtmp_é   ú.jpg)é�  é,  é	   ©Úseed)ÚuuidÚuuid4Úhexr   r   r   )ÚschoolÚcodeÚnameÚphotographers       r   Ú
_new_photor+      sJ   € Ø×4�Tœ$Ÿ*š*›,×*Ñ*¨2¨AÐ.Ð/¨tÐ4€DÜ”[ °!Ñ4´jÀÈ|Ó6\Ð_cÑ6cÓdÐdó    c              ƒ   ó¨	  #   • U R                  SUS9I S h  v•N R                  5       S    Vs1 s H  o3S   iM	     nnU R                  SUS9I S h  v•N R                  5       S    Vs1 s H  o3S   iM	     nn/ n[        U;   owo‡(       a
  [        U;  o™nU(       Gdù  [        R
                  " SU4S[        U45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS	.-  n
S
SU
0-  o¶R                  U5        U(       aÙ  [        R
                  " SW	4S[        U45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  oÖR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=py/ n[        U;   owo‡(       a
  [        U;  o™nU(       Gdù  [        R
                  " SU4S[        U45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS	.-  n
S
SU
0-  o¶R                  U5        U(       aÙ  [        R
                  " SU	4S[        U45      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  oÖR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pyg  GN¬s  snf  GNys  snf 7f)Nú/api/admin/photos/families©ÚheadersÚfamiliesÚqr_code©Úin)z%(py2)s in %(py4)sr   Úmine)Úpy2Úpy4z%(py6)sÚpy6)únot in)z%(py8)s not in %(py10)sr	   )Úpy8Úpy10z%(py12)sÚpy12r   zassert %(py15)sÚpy15Útheirs)ÚgetÚjsonr   r	   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚappendÚ_format_boolopÚAssertionErrorÚ_format_explanation)ÚclientÚadmin_headersÚother_admin_headersr   r5   r>   Ú@py_assert1Ú@py_assert3Ú@py_assert0Ú@py_assert9Ú@py_format5Ú@py_format7Ú@py_format11Ú@py_format13Ú@py_format14Ú@py_format16s                   r   Ú-test_families_listing_is_scoped_to_the_schoolrX      s€  é € Ø)/¯©Ð4PÐZg¨Ð)h×#h×"nÑ"nÓ"pÐq{Ò"|Ó}Ò"|˜QˆiŒLÑ"|€DÐ}Ø+1¯:©:Ð6RÐ\o¨:Ð+p×%p×$vÑ$vÓ$xð  zDò  %Eó  Fò  %E˜q�	Œlñ  %E€Fð  FÙ7Œ9˜Ñ×7¤°4Ñ!7×7×7×7Õ7Œ9˜×7×7×7×7×7Õ7Œ9×7×7×7Ñ7Œ9×7×7×7×7×7Ö7˜×7×7×7Ñ7˜×7×7×7×7×7×7×7Ô7¤°4×7×7×7×7×7Õ7¤×7×7×7Ñ7¤×7×7×7×7×7Ö7°4×7×7×7Ñ7°4×7×7×7×7×7×7×7×7×7×7×7×7×7Ð7Ù;Œ:˜Ñ×;¤I°VÑ$;×;×;×;Õ;Œ:˜×;×;×;×;×;Õ;Œ:×;×;×;Ñ;Œ:×;×;×;×;×;Ö;˜×;×;×;Ñ;˜×;×;×;×;×;×;×;Ô;¤I°V×;×;×;×;×;Õ;¤I×;×;×;Ñ;¤I×;×;×;×;×;Ö;°V×;×;×;Ñ;°V×;×;×;×;×;×;×;×;×;×;×;×;×;Ñ;ò $iùÒ}Ú%pùò  Fùs>   ‚S–S—S®S¼SÁS
ÁSÁ)SÁ7QSÓSÓSc              ƒ   ó”  ^$#   • [        5       m$[        R                  " [        5        U R	                  SUS9I S h  v•N R                  5       n[        U$4S jUS    5       5      n/ oCS   oU[        :H  ofov(       a   US   oˆ[        :H  o™oy(       a  US   n
SoºU:H  oÌnU(       Gdø  [        R                  " S	U4S
U[        45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS.-  nSSU0-  oäR                  U5        U(       Ga  [        R                  " S	W	4SW[        45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS.-  nSSU0-  nUR                  U5        U	(       ab  [        R                  " S	W4SW
W45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  nUR                  U5        [        R                   " US5      0 -  nSSU0-  n[#        [        R$                  " U5      5      eS =n=n=n=n=n=n	=n
=pËU R	                  US   5      I S h  v•N n/ nUR&                  nSnUU:H  nUnU(       a  UR(                  S   n	SnU	U:H  nUnU(       GdV  [        R                  " S	U4SUU45      S [        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS [        R                  " U5      [        R                  " U5      S!.-  nS"S#U0-  nUR                  U5        U(       ab  [        R                  " S	W4S$U	W45      [        R                  " U	5      [        R                  " U5      S%.-  nS&S'U0-  nUR                  U5        [        R                   " US5      0 -  nS(S)U0-  n[#        [        R$                  " U5      5      eS =n=n=n=n=n=n	=nn[*        R,                  n[.        R0                  nUR2                  nU" U5      n U" U 5      n!U!R4                  n[7        U5      n
S*oºU:*  oÌ(       Gd1  [        R                  " S+U4S,X«45      S-[        R                  " 5       ;   d  [        R                  " [6        5      (       a  [        R                  " [6        5      OS-S.[        R                  " 5       ;   d  [        R                  " [*        5      (       a  [        R                  " [*        5      OS.[        R                  " U5      S/[        R                  " 5       ;   d  [        R                  " [.        5      (       a  [        R                  " [.        5      OS/[        R                  " U5      S [        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS [        R                  " U5      [        R                  " U 5      [        R                  " U!5      [        R                  " U5      [        R                  " U
5      [        R                  " U5      S0.-  nS1SU0-  n[#        [        R$                  " U5      5      eS =n=n=n=n =n!=n=n
=pËU R	                  [8        R:                  " S2S3US   5      5      I S h  v•N owR&                  nS4nUU:H  of(       d…  [        R                  " S	U4S5UU45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S6.-  n"S7S8U"0-  n#[#        [        R$                  " U#5      5      eS =n=n=nnU R	                  [8        R:                  " S9S:US   5      5      I S h  v•N owR&                  nS4nUU:H  of(       d…  [        R                  " S	U4S5UU45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S6.-  n"S7S8U"0-  n#[#        [        R$                  " U#5      5      eS =n=n=nng  GN‚ GNý GNˆ N³7f);Nú/api/admin/photos/by-dater/   c              3   óP   >#   • U  H  oS    TR                   :X  d  M  Uv •  M     g7f)ÚfilenameN©r)   )Ú.0ÚpÚphotos     €r   Ú	<genexpr>ÚPtest_by_date_defaults_to_today_and_thumbs_are_signed_and_work.<locals>.<genexpr>'   s    øé € ÐHš.�Q¨j©M¸U¿Z¹ZÑ,G�q‰qš.ùs   ƒ&�	&Úphotosr*   r2   ÚkindÚoriginal©ú==)z%(py3)s == %(py5)sr   )Úpy3Úpy5z%(py7)sÚpy7)z%(py10)s == %(py12)sr   )r;   r<   z%(py14)sÚpy14)z%(py17)s == %(py20)s)Úpy17Úpy20z%(py22)sÚpy22r   zassert %(py25)sÚpy25Ú	thumb_urléÈ   zcontent-typez
image/webp©z3%(py4)s
{%(py4)s = %(py2)s.status_code
} == %(py7)sÚr©r6   r7   rj   ú%(py9)sÚpy9©z%(py12)s == %(py15)s©r<   r=   ú%(py17)srl   zassert %(py20)srm   r    ©ú<=)zã%(py17)s
{%(py17)s = %(py0)s(%(py15)s
{%(py15)s = %(py13)s
{%(py13)s = %(py3)s
{%(py3)s = %(py1)s.open
}(%(py11)s
{%(py11)s = %(py6)s
{%(py6)s = %(py4)s.BytesIO
}(%(py9)s
{%(py9)s = %(py7)s.content
})
})
}.size
})
} <= %(py20)sÚmaxr   Úio)Úpy0Úpy1rh   r7   r8   rj   rv   Úpy11Úpy13r=   rl   rm   úassert %(py22)szsig=\w+zsig=00é“  ©z3%(py3)s
{%(py3)s = %(py1)s.status_code
} == %(py6)s©r   rh   r8   úassert %(py8)sr:   zexp=\d+zexp=1)r+   r   r   r   r?   r@   Únextr   r   rA   rB   rF   rC   rD   rE   rG   rH   rI   rJ   Ústatus_coder0   r   Úopenr}   ÚBytesIOÚcontentÚsizer|   ÚreÚsub)%rK   rL   ÚbodyÚrowrN   Ú@py_assert2Ú@py_assert4rP   rQ   Ú@py_assert11Ú@py_assert16Ú@py_assert19Ú@py_assert18Ú@py_format6Ú@py_format8rU   Ú@py_format15Ú@py_format21Ú@py_format23Ú@py_format24Ú@py_format26rs   rO   Ú@py_assert6Ú@py_assert5Ú@py_assert14Ú@py_assert13Ú@py_format10rW   Ú@py_format18Ú@py_format19Ú@py_assert8Ú@py_assert10Ú@py_assert12rS   Ú@py_format9r`   s%                                       @r   Ú=test_by_date_defaults_to_today_and_thumbs_are_signed_and_workr©   #   sì  øé € Ü‹L€EÜ×+Ò+¬FÔ3Ø—*‘*Ð8À-�*ÐP×P×VÑVÓX€DÜ
ÔH˜$˜xš.ÓHÓ
H€CÙlˆ~ÑÐl¤,Ñ.×l°3°y±>ÐlÄYÑ3N×lÐSVÐW]ÑS^ÐlÐblÐlÐblÑSl×l×l×lÕlÐ¤,×l×lÔlÐ×l×l×l×l×lÔl¤,×l×l×lÑl¤,×l×l×l×l×l×l×lÕl°>ÄY×l×lÔl°>×l×l×l×l×lÔlÄY×l×l×lÑlÄY×l×l×l×l×l×l×lÕlÐS^Ðbl×l×lÔlÐS^×l×lÓlÐbl×l×l×l×l×l×l×l×l×l×l×l×l×l×lÑlØ�j‰j˜˜[Ñ)Ó*×*€AÙMˆ1�=‰=ÐM˜CÐMˆ=˜CÑ×MÑM A§I¡I¨nÑ$=ÐMÀÐMÐ$=ÀÑ$M×M×M×MÖMˆ=˜C×M×M×M×M×MÕMˆ1×M×M×MÑMˆ1×M×MÕMˆ=×M×MÓM˜C×M×M×M×M×M×M×MÓMÐ$=À×M×MÔMÐ$=×M×MÓMÀ×M×M×M×M×M×M×M×M×M×M×M×M×M×MÐMÜ�z‰zÐ=œ"Ÿ*™*Ð= Q§Y¡YÐ=™* YÓ/Ð=‰zÐ/Ó0Ð=Ð0×5Ñ5Ð=Œ3Ð5Ó6Ð=¸#Ð=¸#Ñ=×=×=×=Ó=Ð6×=×=×=×=×=Õ=Œ3×=×=×=Ñ=Œ3×=×=×=×=×=Ö=Œu×=×=×=Ñ=Œu×=×=Õ=ˆz×=×=×=×=×=Ô=œ"×=×=×=Ñ=œ"×=×=Õ=˜*×=×=×=×=×=Ô= Q×=×=×=Ñ= Q×=×=Õ= Y×=×=Ó=Ð/×=×=Ó=Ð0×=×=Ó=Ð5×=×=Ó=Ð6×=×=Ó=¸#×=×=×=×=×=×=×=×=Ø—*‘*œRŸVšV J°¸#¸kÑ:JÓKÓL×LÐ`×YÑYÐ`Ð]`Ð`ÐYÐ]`Ñ`×`×`×`Ò`ÐYÐ]`×`×`Ô`ÐL×`×`Ó`ÐY×`×`Ó`Ð]`×`×`×`×`×`×`Ö`Ø—*‘*œRŸVšV J°¸¸[Ñ9IÓJÓK×KÐ_×XÑXÐ_Ð\_Ð_ÐXÐ\_Ñ_×_×_×_Ò_ÐXÐ\_×_×_Ô_ÐK×_×_Ó_ÐX×_×_Ó_Ð\_×_×_×_×_×_×_×_ò Qò 	+ò MÙKùsI   ƒ8c»b=¼JcËc ËQ7cÜ;cÜ<CcàcàB+cã cãcãcc              ƒ   óô  #   • [        5         U R                  SUS9I S h  v•N R                  5       S   n/ o2U:H  oD(       dp  [        R                  " SU4SUU45      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=pCU R                  S	US9I S h  v•N o"R                  nS
otU:H  oˆ(       d…  [        R                  " SU4SUU45      [        R
                  " U5      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=n=p‡g  GNS N«7f)NzA/api/admin/photos/by-date?date_from=2001-01-01&date_to=2001-01-02r/   rc   rf   ©z%(py1)s == %(py4)s©r   r7   úassert %(py6)sr8   zO/api/admin/photos/by-date?date_from=2001-01-01&date_to=2001-01-02&time_from=abcé¦  r„   r…   r†   r:   )	r+   r?   r@   rA   rB   rF   rI   rJ   rˆ   )
rK   rL   rP   rO   r‘   rR   rS   rŸ   r’   r¨   s
             r   Ú%test_by_date_filters_by_date_and_hourr¯   0   s¼  é € Ü„LØ—*‘*Ð`Ø%2ð ð 4÷ 4ß59±T³V¸HñFð LØIKðLØIKñL÷ Ló Lß:KÑ:KôLð FØIK÷Lñ LßBKÁ)ðLð F÷ Lð LßBKÁ)ðLØIK÷L÷ L÷ Lñ Lß8KÑ8K÷L÷ Là—*‘*ÐnØ%2ð ð 4÷ 4ð Hß5@±[ðHØDGðHØDGñH÷ Hó Hß6GÑ6GôHð AØDG÷Hñ Hß>G¹iðHð 4÷ Hð Hß>G¹iðHð A÷ Hð Hß>G¹iðHØDG÷H÷ H÷ Hñ Hß4GÑ4G÷H÷ Hò Hò4ñ4ùs#   ‚E8 E3¡B)E8Ã
E6ÃB)E8Å6E8c              ƒ   óZ  #   • SSK Jn  [        5       nUR                  [        [
        [        UR                  5      nU R                  U5      I S h  v•N oUR                  nSovU:H  oˆ(       d„  [        R                  " SU4SXg45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=p‡U R                  UR                  S	[         S	3S	[          S	35      5      I S h  v•N oUR                  nS
ovU:H  oˆ(       d„  [        R                  " SU4SXg45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=p‡U R                  UR                  [        S5      5      I S h  v•N oUR                  nS
ovU:H  oˆ(       d„  [        R                  " SU4SXg45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS =n=n=p‡g  GNR GNz N­7f)Nr   )Úmedia_servicerq   rf   r„   r…   r†   r:   Ú/rƒ   zMAR-OTR-999)Úservicesr±   r+   Úadmin_thumb_urlr   r   r   r)   r?   rˆ   rA   rB   rF   rI   rJ   Úreplacer
   )rK   rL   r±   r`   ÚurlrP   r‘   rŸ   r’   rS   r¨   s              r   Ú0test_admin_thumb_is_bound_to_its_school_and_pathr·   8   s¤  é € Ý&Ü‹L€EØ
×
'Ñ
'¬´¼iÈÏÉÓ
T€CØ—*‘*˜S“/×!Ð5×.Ñ.Ð5°#Ð5°#Ñ5×5×5×5Ò5Ð.×5×5Ô5Ð!×5×5Ó5Ð.×5×5Ó5°#×5×5×5×5×5×5Õ5à—*‘*˜SŸ[™[¨1¬V¨H°A¨¸!¼L¸>ÈÐ8KÓLÓM×MÐa×ZÑZÐaÐ^aÐaÐ^aÑa×a×a×aÒaÐZ×a×aÔaÐM×a×aÓaÐZ×a×aÓaÐ^a×a×a×a×a×a×aÕaØ—*‘*˜SŸ[™[¬°MÓBÓC×CÐW×PÑPÐWÐTWÐWÐTWÑW×W×W×WÒWÐP×W×WÔWÐC×W×WÓWÐP×W×WÓWÐTW×W×W×W×W×W×WÖWò "âMÙCùs9   ‚AJ+ÁJ#ÁCJ+Ä,J&Ä-CJ+Ç;J)Ç<B(J+Ê&J+Ê)J+c           	   ƒ   óÆ
  #   • [        5       n[        R                  " US5      nUR                  R	                  SSS9  UR                  S5        U R                  SU[        [        UR                  SS.S9I S h  v•N nUR                  nS	oeU:H  ow(       dÛ  [        R                  " S
U4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " U5      [        R                   " U5      S.-  n[        R"                  " UR$                  5      S-   SU0-  n	['        [        R(                  " U	5      5      eS =n=pvUR+                  5       S   n
SozU:H  o»(       do  [        R                  " S
U4SX§45      [        R                   " U
5      [        R                   " U5      S.-  nSSU0-  n['        [        R(                  " U5      5      eS =n
=p·[-        [.        S5      UR                  -  n/ o^R0                  ow" 5       oÿo¯(       a?  UR0                  nU" 5       nU(       + nUn
U(       a  UR0                  nU" 5       nU(       + nUn
U
(       Gdò  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " U5      [        R                   " U5      S.-  oÕR3                  U5        U(       Ga  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " W5      [        R                   " W5      S.-  nUR3                  U5        W(       aŒ  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                   " U5      OS[        R                   " W5      [        R                   " W5      S.-  nUR3                  U5        [        R4                  " US5      0 -  nS S!U0-  n['        [        R(                  " U5      5      eS =n
=n=n=n=n=n=n=n=nn[        5       nU R                  SU[        [        UR                  SS.S9I S h  v•N nUR+                  5       S   n
SozU:H  o»(       do  [        R                  " S
U4SX§45      [        R                   " U
5      [        R                   " U5      S.-  nSSU0-  n['        [        R(                  " U5      5      eS =n
=p·g  GNâ N›7f)"Nz.wm.1000.webpT)ÚparentsÚexist_okó   xú/api/admin/photos/movezmar nw1 001©r*   r2   r\   Útarget_qr_code©r0   r@   rq   rf   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)srs   ©r~   r6   ri   ú
>assert %(py7)srj   r2   Ú	MARNW1001r«   r¬   r­   r8   z:%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.exists
}()
}Úmoved)r6   r7   r8   zBnot %(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s.exists
}()
}r`   )r:   r;   r<   zCnot %(py19)s
{%(py19)s = %(py17)s
{%(py17)s = %(py15)s.exists
}()
}Úderiv)r=   rl   Úpy19r   zassert %(py23)sÚpy23)r+   r   Úmirror_pathÚparentÚmkdirÚwrite_bytesÚpostr   r   r)   rˆ   rA   rB   rC   rD   rE   rF   Ú_format_assertmsgÚtextrI   rJ   r@   r   r   ÚexistsrG   rH   )rK   rL   r`   rÅ   rs   rN   r’   rO   r—   r˜   rP   r‘   rR   rS   rÄ   rŸ   rQ   r“   r¡   r”   r–   Ú@py_assert20rV   rš   Ú@py_format22rœ   Úphoto2s                              r   ÚJtest_move_photo_to_another_family_creates_the_folder_and_drops_derivativesrÓ   B   s;  é € Ü‹L€EÜ×%Ò% e¨_Ó=€EØ	‡L�L×Ñ˜t¨dÐÑ3Ø	×Ñ�dÔØ�k‰kÐ2¸MÜ$´ÈÏ
É
ÐfsñQuˆkð v÷ 	v€Aà�=‰=Ð'˜CÐ'˜CÑ×'×'×'Ò'ˆ=×'×'×'×'×'Õ'ˆ1×'×'×'Ñ'ˆ1×'×'Õ'ˆ=×'×'Ó'˜C×'×'×'Ð' §¡×'×'×'×'×'×'Ð'Ø�6‰6‹8�IÑÐ- +Ð- +Ñ-×-×-×-Ò-Ð×-×-Ô-Ð×-×-Ó- +×-×-×-×-×-×-Ó-Ü”v˜{Ó+¨e¯j©jÑ8€EÙG�<‰<ÐGˆ<‹>ÑG�> %§,¡,ÐG¡,£.ÐG .Ô0ÐGÐ0ÐGÖ0¸¿¹ÐG¹»ÐG¸Ô5GÐGÐ5G×G×G×G×G×G×GÒGˆ5×G×G×GÑGˆ5×G×GÕGˆ<×G×GÓGˆ>×G×G×GÐG�>×G×G×G×G×GÑG %×G×G×GÑG %×G×GÕG ,×G×GÓG .×G×G×GÑGÖ0×G×G×G×G×GÑG¸×G×G×GÑG¸×G×GÕG¸×G×GÓG¸×G×G×G×G×G×G×G×G×G×G×G×G×GÕGä‹\€FØ�k‰kÐ2¸MÜ$´ÈÏÉÐgrñQtˆkð u÷ 	u€Aà�6‰6‹8�IÑÐ- +Ð- +Ñ-×-×-×-Ò-Ð×-×-Ô-Ð×-×-Ó- +×-×-×-×-×-×-Ô-ò	vñ	uùs&   ‚A8U!Á:UÁ;QU!ÓUÓBU!ÕU!c              ƒ   óÎ  #   • [        SS9n[        [        S5      n[        [	        SSS9US-  5        U R                  SU[        [        SSS.S	9I S h  v•N n/ oTR                  nS
ovU:H  oˆo˜(       a3  UR                  n
Soº" U5      n[        U5      n[        U5      nSoþU:H  nUn	U	(       Gd›  [        R                  " SU4SXg45      S[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS[        R"                  " U5      [        R"                  " U5      S.-  nSSU0-  nUR%                  U5        U(       Ga§  [        R                  " SW4SWW45      S[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " [        5      (       a  [        R"                  " [        5      OSS[        R                  " 5       ;   d  [        R                   " U5      (       a  [        R"                  " U5      OS[        R"                  " W
5      [        R"                  " W5      [        R"                  " W5      [        R"                  " W5      [        R"                  " U5      [        R"                  " U5      S.	-  nSSU0-  nUR%                  U5        [        R&                  " US5      0 -  nSSU0-  n[)        [        R*                  " U5      5      eS =n	=n=n=n=n=n
=n=n=n=n=nng  GN7f)Nzdup.jpgr]   zMAR-DUP-001©éd   rÖ   é   r"   r¼   r½   r¿   rq   r   é   rf   rr   rs   rt   ru   rv   )z“%(py23)s
{%(py23)s = %(py11)s(%(py21)s
{%(py21)s = %(py12)s(%(py19)s
{%(py19)s = %(py15)s
{%(py15)s = %(py13)s.glob
}(%(py17)s)
})
})
} == %(py26)sÚlenr   Úother)	r€   r<   r�   r=   rl   rÆ   Úpy21rÇ   Úpy26z%(py28)sÚpy28r   zassert %(py31)sÚpy31)r+   r   r   r   r   rÌ   r   r   rˆ   r   r   rÙ   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   )rK   rL   ÚarÚ   rs   rN   rO   rž   rŸ   rP   r    r”   r–   rÐ   Ú@py_assert22Ú@py_assert25Ú@py_assert24r˜   r¢   Ú@py_format27Ú@py_format29Ú@py_format30Ú@py_format32s                          r   Ú4test_move_never_overwrites_a_file_with_the_same_namerç   T   sñ  é € Ü˜	Ñ"€AÜ”v˜}Ó-€EÜŒk˜*¨1Ñ-¨u°yÑ/@ÔAØ�k‰kÐ2¸MÜ$´È	ÐerñQtˆkð u÷ 	u€AáJ�=‰=ÐJ˜CÐJ˜CÑ×J¨U¯Z©ZÐJ¸
ÐJ¨Z¸
Ó-CÐJ¬Ð-CÓ(DÐJ¤CÐ(DÓ$EÐJÈÐJÈÑ$J×J×J×JÖJˆ=×J×J×J×J×JÕJˆ1×J×J×JÑJˆ1×J×JÕJˆ=×J×JÓJ˜C×J×J×J×J×J×J×JÔJÐ$EÈ×J×J×J×J×JÕJ¤C×J×J×JÑJ¤C×J×J×J×J×JÖJ¬×J×J×JÑJ¬×J×J×J×J×JÖJ¨U×J×J×JÑJ¨U×J×JÕJ¨Z×J×JÓJ¸
×J×JÓJÐ-C×J×JÓJÐ(D×J×JÓJÐ$E×J×JÓJÈ×J×J×J×J×J×J×J×J×J×J×J×J×J×J×JÑJò	uùs   ‚AM%ÁM"ÁLM%c              ƒ   ó   #   • [        5       n[        [        UR                  SS.nSS0S4SS0S4SS	0S4S
S0S4SS0S44 GHO  u  pEU R	                  SU0 UEUES9I S h  v•N nUR
                  owU:H  oˆ(       Gd  [        R                  " SU4SXu45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  n	[        R                  " XFR                  45      S-   SU	0-  n
[        [        R                  " U
5      5      eS =pxGMR     UR                   ow" 5       oˆ(       dš  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n	[        [        R                  " U	5      5      eS =pxg  GNì7f)NzMAR-XXX-111r½   r¾   z	../../etcr   r\   z../x.jpgr*   z..Útarget_photographerú	no-existezinexistente.jpgé”  r¼   r¿   rf   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py4)srs   Ústatus©r~   r6   r7   z
>assert %(py6)sr8   úAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r`   )r+   r   r   r)   rÌ   rˆ   rA   rB   rC   rD   rE   rF   rÍ   rÎ   rI   rJ   rÏ   )rK   rL   r`   ÚbaseÚpatchrì   rs   rN   rO   rR   rS   s              r   ÚAtest_move_rejects_traversal_unknown_photographer_and_missing_filerñ   ]   s•  é € Ü‹L€EÜ(´YÈEÏJÉJÐjwÑx€DØ,¨kÐ:¸CÐ@ÀJÐPZÐC[Ð]`ÐBaØ*¨DÐ1°3Ð7Ð;PÐR]Ð:^Ð`cÐ9dØ&Ð(9Ð:¸CÐ@ôB‰ˆð —+‘+Ð6ÀÐTeÐW[ÐTeÐ_dÐTe�+Ðf×fˆØ�}‰}Ð7 Ñ&×7×7×7Ó7ˆ}×7×7×7×7×7Õ7ˆq×7×7×7Ñ7ˆq×7×7Õ7ˆ}×7×7×7×7×7Ô7 ×7×7×7Ñ7 ×7×7×7Ò7¨·±¨×7×7×7×7×7×7Ñ7ñ	Bð
 �<‰<Ðˆ<‹>Ð�>×××××Ñˆ5×××Ñˆ5××Õˆ<××Óˆ>×××××Óò gùs   ‚AIÁIÁ G,Ic           	   ƒ   ó  #   • [        5       nU R                  SU[        [        UR                  SS.S9I S h  v•N n/ oCR
                  nSoeU:H  owo‡(       a  UR                  o™" 5       oªnU(       Gd}  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  oÄR                  U5        U(       a‹  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W	5      [        R                  " W
5      S.-  oÔR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=pšg  GNÅ7f)Nr¼   zMAR-HAK-001r½   r¿   rë   rf   rr   rs   rt   ru   rv   z?%(py15)s
{%(py15)s = %(py13)s
{%(py13)s = %(py11)s.exists
}()
}r`   ©r€   r�   r=   r   zassert %(py18)sÚpy18)r+   rÌ   r   r   r)   rˆ   rÏ   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   )rK   rM   r`   rs   rN   rO   rž   rŸ   rP   r§   r    r˜   r¢   rW   Ú@py_format17r¤   s                   r   Ú5test_an_operator_cannot_move_photos_of_another_schoolrö   h   s  é € Ü‹L€EØ�k‰kÐ2Ð<OÜ$´ÈÏ
É
ÐfsñWuˆkð v÷ 	v€Aá2�=‰=Ð2˜CÐ2˜CÑ×2 E§L¡LÐ2 L£N×2×2×2Õ2ˆ=×2×2×2×2×2Õ2ˆ1×2×2×2Ñ2ˆ1×2×2Õ2ˆ=×2×2Ó2˜C×2×2×2×2×2×2×2×2×2×2Ð2 E×2×2×2Ñ2 E×2×2Õ2 L×2×2Ó2 N×2×2×2×2×2×2×2×2×2×2×2×2Ö2ò	vùs   ‚6H ¸G=¹GH c              ƒ   ól  #   • [        5       nU R                  S[         S[         SUR                   3US9I S h  v•N n/ oCR
                  nSoeU:H  owo‡(       a  UR                  o™" 5       oª(       + o»nU(       Gd}  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  oÔR                  U5        U(       a‹  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W	5      [        R                  " W
5      S.-  oäR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n	=p«U R#                  SUS9I S h  v•N R%                  5       S   n['        S U 5       5      nUS   n[(        R*                  nUU:*  nU(       dÃ  [        R                  " SU4SUU45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [(        5      (       a  [        R                  " [(        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                   " U5      5      eS =n=nnU R#                  SUS9I S h  v•N R%                  5       S    Vs1 s H  nUS   iM
     nnS U 5       n[-        U5      oU(       + ow(       d¢  SS [        R                  " 5       ;   d  [        R                  " [,        5      (       a  [        R                  " [,        5      OS [        R                  " U5      [        R                  " U5      S!.-  n[        [        R                   " U5      5      eS =n=pWU R/                  S"US#    S$3US9I S h  v•N n/ oCR
                  nSoeU:H  owo‡(       a8  UR%                  5       S%   nS&n
UU
:H  nUnU(       a  UR                  nU" 5       nUnU(       Gdæ  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  oÔR                  U5        U(       aô  [        R                  " SW4S'WU
45      [        R                  " U5      [        R                  " U
5      S(.-  nS)S*U0-  oôR                  U5        U(       aŒ  S+S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W5      [        R                  " W5      S,.-  nUR                  U5        [        R                  " US5      0 -  nS-S.U0-  n[        [        R                   " U5      5      eS =n=n=n=n=n=n=n=n
=nng  GNh GNŒ GNjs  snf  GNh7f)/Nz/api/admin/photos/r²   r/   rq   rf   rr   rs   rt   ru   rv   úCnot %(py15)s
{%(py15)s = %(py13)s
{%(py13)s = %(py11)s.exists
}()
}r`   ró   r   úassert %(py19)srÆ   ú/api/admin/photos/trashÚentriesc              3   óp   #   • U  H,  oS    R                  S5      (       d  M  US   S:X  d  M(  Uv •  M.     g7f)rd   zphoto-Ú
file_countr×   N©Ú
startswith©r^   Úes     r   ra   ÚDtest_delete_goes_to_the_trash_and_can_be_restored.<locals>.<genexpr>t   s/   é € Ð_šG�q¨¡y×';Ñ';¸H×'E“È!ÈLÉ/Ð]^ÑJ^—‘šGùs   ‚6¢6­	6Úexpires_in_daysrz   )z<%(py1)s <= %(py5)s
{%(py5)s = %(py3)s.TRASH_RETENTION_DAYS
}r   )r   rh   ri   zassert %(py7)srj   r.   r1   r2   c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f)Ú.Nrþ   )r^   Úcs     r   ra   r  x   s   é € Ð3ªd¨—<‘< ×$Ð$ªdùs   ‚z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úanyrí   ú/api/admin/photos/trash/Úidú/restoreÚrestoredr×   rw   rx   ry   rl   z?%(py23)s
{%(py23)s = %(py21)s
{%(py21)s = %(py19)s.exists
}()
})rÆ   rÛ   rÇ   zassert %(py26)srÜ   )r+   Údeleter   r   r)   rˆ   rÏ   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r?   r@   r‡   r   ÚTRASH_RETENTION_DAYSr  rÌ   ) rK   rL   r`   rs   rN   rO   rž   rŸ   rP   r§   r    r”   r˜   r¢   rõ   r£   Ú@py_format20rû   Úentryr’   r‘   r—   r   Úfamsr“   r¡   rÐ   rà   rW   rœ   Ú@py_format25rã   s                                    r   Ú1test_delete_goes_to_the_trash_and_can_be_restoredr  o   sä  é € Ü‹L€EØ�m‰mÐ0´°¸aÄ	¸{È!ÈEÏJÉJÈ<ÐXÐboˆmÐp×p€AÙ6�=‰=Ð6˜CÐ6˜CÑ×6¨¯©Ð6¨«Ð6Ô$6×6×6×6Õ6ˆ=×6×6×6×6×6Õ6ˆ1×6×6×6Ñ6ˆ1×6×6Õ6ˆ=×6×6Ó6˜C×6×6×6×6×6×6×6×6×6×6Ð6¨×6×6×6Ñ6¨×6×6Õ6¨×6×6Ó6¨×6×6×6×6×6×6×6×6×6×6×6×6×6Ø—Z‘ZÐ 9À=�ZÐQ×Q×WÑWÓYÐZcÑd€GÜÑ_™GÓ_Ó_€EØÐ"Ñ#ÐB¤v×'BÑ'BÐBÐ#Ð'BÑB×B×B×BÓBÐ#Ð'B×B×BÔBÐ#×B×B×B×B×BÔB¤v×B×B×BÑB¤v×B×BÕBÐ'B×B×B×B×B×B×BÔBà)/¯©Ð4PÐZg¨Ð)h×#h×"nÑ"nÓ"pÐq{Ò"|Ó}Ò"|˜QˆAˆiŒLÑ"|€DÐ}Ù3©dÓ3Ð3ŒsÐ3Ó3Ð3Ô3Ð3Õ3×3×3×3×3×3Ñ3Œs×3×3×3Ñ3Œs×3×3Õ3Ð3×3×3Ó3Ð3×3×3×3×3×3Ô3Ø�k‰kÐ4°U¸4±[°MÀÐJÐTaˆkÐb×b€AÙP�=‰=ÐP˜CÐP˜CÑ×P A§F¡F£H¨ZÑ$8ÐP¸AÐPÐ$8¸AÑ$=×PÑPÀ%Ç,Á,ÐPÁ,Ã.ÐPÀ.×P×P×PÔPˆ=×P×P×P×P×PÕPˆ1×P×P×PÑPˆ1×P×PÕPˆ=×P×PÓP˜C×P×P×P×P×P×P×PÒPÐ$8¸A×P×PÔPÐ$8×P×PÓP¸A×P×P×P×P×P×P×P×P×P×PÐPÀ%×P×P×PÑPÀ%×P×PÕPÀ,×P×PÓPÀ.×P×P×P×P×P×P×P×P×P×P×P×P×PÖPò 	qâQò $iùÒ}âbùsU   ‚9Z4»Z#¼GZ4ÈZ&ÈD$Z4Ì?Z)Í Z4ÍZ,Í&C#Z4Ñ	Z1Ñ
IZ4Ú&Z4Ú)Z4Ú,Z4c              ƒ   ó¬  #   • SnS H+  n[        [        SSS9[        [        X#5      U S3-  5        M-     [        R
                  " [        5        U R                  SU 3US9I S h  v•N n/ oTR                  5       S	   nSovU:H  oˆo˜(       a(  [        [        U5      oªR                  o»" 5       oÌ(       + oÝn	U	(       Gdï  [        R                  " S
U4SXg45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  oõR                  U5        U(       GaG  SS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W
5      [        R                  " W5      [        R                  " W5      S.-  nUR                  U5        [        R                   " US5      0 -  nSSU0-  n[#        [        R$                  " U5      5      eS =n	=n=n=n=n=n
=n=pÍU R'                  SUS9I S h  v•N R                  5       S   n[)        S U 5       5      nU R+                  SUS    S3US9I S h  v•N   / nSn[        [        X'5      nSnUU-  nUR                  nU" 5       nUn	U(       a/  Sn[        [        UU5      nS nUU-  nUR                  nU" 5       nUn	U	(       Gd*  S!S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S".-  n UR                  U 5        U(       Gaq  S#S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W5      [        R                  " W5      [        R                  " W5      [        R                  " W5      [        R                  " W5      S$.-  n!UR                  U!5        [        R                   " US5      0 -  n"S%S&U"0-  n#[#        [        R$                  " U#5      5      eS =n	=n=n=n=n=n=n=n=n=n=n=n=nng  GNe GNÿ GNÀ7f)'NzMAR-FAM-001)Úcam1Úcam2rÕ   rØ   r"   r   z/api/admin/photos/family/r/   Údeletedrf   )z%(py3)s == %(py6)s)rh   r8   z%(py8)sr:   znnot %(py18)s
{%(py18)s = %(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py10)s(%(py11)s, %(py12)s)
}.exists
}()
}r   r   r(   )r;   r€   r<   rk   Úpy16rô   r   r‚   rn   rú   rû   c              3   óZ   #   • U  H!  oS    R                  S5      (       d  M  Uv •  M#     g7f)rd   zfamily-MARFAM001Nrþ   r   s     r   ra   Ú=test_delete_family_is_one_restorable_batch.<locals>.<genexpr>…   s"   é € ÐPšG�q¨¡y×';Ñ';Ð<N×'O—‘šGùs   ‚+¢	+r  r	  r
  r  zcam1.jpgr  zcam2.jpgz{%(py15)s
{%(py15)s = %(py13)s
{%(py13)s = (%(py8)s
{%(py8)s = %(py2)s(%(py3)s, %(py4)s, %(py6)s)
} / %(py10)s).exists
}()
})r6   rh   r7   r8   r:   r;   r�   r=   z�%(py30)s
{%(py30)s = %(py28)s
{%(py28)s = (%(py23)s
{%(py23)s = %(py17)s(%(py18)s, %(py19)s, %(py21)s)
} / %(py25)s).exists
}()
})rl   rô   rÆ   rÛ   rÇ   ro   rÝ   Úpy30zassert %(py33)sÚpy33)r   r   r   r   r   r   r  r@   rÏ   rA   rB   rF   rG   rC   rD   rE   rH   rI   rJ   r?   r‡   rÌ   )$rK   rL   r(   Úcamrs   rN   r‘   rŸ   r’   rP   r¡   Ú@py_assert15Ú@py_assert17r•   rS   r¨   r  rš   r›   rû   r  Ú@py_assert7rQ   r“   r§   r    rÐ   rà   râ   Ú@py_assert26Ú@py_assert27Ú@py_assert29rW   Ú@py_format31ræ   Ú@py_format34s$                                       r   Ú*test_delete_family_is_one_restorable_batchr%  }   s|  é € Ø€DÛˆÜ”+˜j¨qÑ1´:¼fÀdÓ3PÐVYÐUZÐZ^ÐS_Ñ3_Ö`ñ  ä×+Ò+¬FÔ3Ø�m‰mÐ7¸°vÐ>ÈˆmÐV×V€AÙM�6‰6‹8�IÑÐM !ÐM !Ñ#×M¬J´v¸tÓ,DÐM×,KÑ,KÐMÐ,KÓ,MÐMÔ(M×M×M×MÕMÐ×M×MÔMÐ×M×MÓM !×M×M×M×M×M×M×M×M×M×MÑM¬J×M×M×MÑM¬J×M×M×M×M×MÖM´v×M×M×MÑM´v×M×M×M×M×MÖM¸t×M×M×MÑM¸t×M×MÕMÐ,D×M×MÓMÐ,K×M×MÓMÐ,M×M×M×M×M×M×M×M×M×M×M×M×M×MÒMØ—Z‘ZÐ 9À=�ZÐQ×Q×WÑWÓYÐZcÑd€GÜÑP™GÓPÓP€EØ
�+‰+Ð0°°t±°¸XÐFÐP]ˆ+Ð
^×^Ð^ñ A Vð  AŒJ”v˜tÓ,ð  A¨zð  AÐ,¨zÑ9ð  AÐ9×AÑAð  AÑAÓCð  AÐCð  AÖCÐbhð  AÌÔTZÐ\`ÐbhÓIið  AÐlvð  AÐIiÐlvÑIvð  AÐIv×H~ÑH~ð  AÑH~ó  IAð  Að  IA÷  A÷  A÷  A÷  A÷  A÷  Aò  AŒJ÷  A÷  A÷  Añ  AŒJ÷  A÷  A÷  A÷  A÷  Aö  A”v÷  A÷  A÷  Añ  A”v÷  A÷  A÷  A÷  A÷  Aö  A˜t÷  A÷  A÷  Añ  A˜t÷  A÷  Aõ  A V÷  A÷  Aó  AÐ,÷  A÷  Aó  A¨z÷  A÷  Aó  AÐA÷  A÷  Aó  AÐC÷  A÷  A÷  Añ  A×C÷  A÷  A÷  A÷  A÷  Añ  AÌ÷  A÷  A÷  Añ  AÌ÷  A÷  A÷  A÷  A÷  Aö  AÔTZ÷  A÷  A÷  Añ  AÔTZ÷  A÷  A÷  A÷  A÷  Aö  AÐ\`÷  A÷  A÷  Añ  AÐ\`÷  A÷  Aõ  AÐbh÷  A÷  Aó  AÐIi÷  A÷  Aó  AÐlv÷  A÷  Aó  AÐH~÷  A÷  Aó  Að  IA÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  A÷  Aö  Aò 	WâQâ^ùs9   ‚A$[Á&[Á'I([Ë[ËA[Ì[ÌN:[Û[Û[c           
   ƒ   óÂ  #   • S[         R                  " 5       R                  S S  3n[        R                  " SUS9  SU 3US.n[        [        S5      [        US5      S	-  5        U R                  S
US9I S h  v•N oDR                  nSoeU:H  ow(       d„  [        R                  " SU4SXV45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=n=pvU R                  SUS9I S h  v•N oDR                  nSoeU:H  ow(       d„  [        R                  " SU4SXV45      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS =n=n=pvSn[        X%5      owR                  oª" 5       o»(       Gd  SS[         R"                  " 5       ;   d  [        R$                  " [        5      (       a  [        R                  " [        5      OSS[         R"                  " 5       ;   d  [        R$                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U
5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS =n=n=p«U R                  SUS9I S h  v•N n/ oíR                  nSo¯U
:H  ofoF(       aM  UR'                  5       S   nSnUU:H  nUnU(       a*  Sn[        UU5      nUR                  nU" 5       nU(       + nUnU(       Gdf  [        R                  " SU4SXú45      S[         R"                  " 5       ;   d  [        R$                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U
5      S.-  nSSU0-  oÎR)                  U5        U(       Gas  [        R                  " SW4S WW45      [        R                  " U5      [        R                  " U5      S!.-  nS"S#U0-  nUR)                  U5        U(       Ga	  S$S[         R"                  " 5       ;   d  [        R$                  " [        5      (       a  [        R                  " [        5      OSS[         R"                  " 5       ;   d  [        R$                  " U5      (       a  [        R                  " U5      OS[        R                  " W5      [        R                  " W5      [        R                  " W5      [        R                  " W5      S%.-  nUR)                  U5        [        R*                  " US&5      0 -  nS'S(U0-  n[        [        R                  " U5      5      eS =n=n=n=n=n
=n=n=n=n=n=n=nn[        [,        [.        5      nS)ooU-  nUR                  o»" 5       nU(       Gdr  S*S[         R"                  " 5       ;   d  [        R$                  " [        5      (       a  [        R                  " [        5      OSS+[         R"                  " 5       ;   d  [        R$                  " [,        5      (       a  [        R                  " [,        5      OS+S,[         R"                  " 5       ;   d  [        R$                  " [.        5      (       a  [        R                  " [.        5      OS,[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S-.-  n [        [        R                  " U 5      5      eS =n=n=n=nng  GN\ GN¥ GN«7f).Nzdel-é   ÚBorrado)ÚslugzBearer )ÚAuthorizationzX-SchoolrÕ   zMAR-DEL-001za.jpgz/api/admin/photos/allr/   r   rf   r„   r…   r†   r:   z /api/admin/photos/all?confirm=nozhassert %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}.exists
}()
}r   Úsid)r~   r   rh   ri   rj   rv   z$/api/admin/photos/all?confirm=borrarrq   r  r×   rr   rs   rt   ru   rv   rw   rx   ry   rl   znnot %(py28)s
{%(py28)s = %(py26)s
{%(py26)s = %(py24)s
{%(py24)s = %(py19)s(%(py20)s, %(py22)s)
}.exists
}()
})rÆ   rm   rn   Úpy24rÜ   rÝ   r   zassert %(py32)sÚpy32zportrait.jpgzvassert %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = (%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} / %(py6)s).exists
}()
}r   r   )r~   r   r6   r7   r8   rv   r€   )r$   r%   r&   r   Úcreate_schoolr   r   r   r  rˆ   rA   rB   rF   rI   rJ   rÏ   rC   rD   rE   r@   rG   rH   r   r   )!rK   Úadmin_tokenr+  r0   rP   r‘   rŸ   r’   rS   r¨   rž   r¥   r¢   rs   rN   rO   r“   r    r¡   Ú@py_assert21Ú@py_assert23rá   r!  r"  r˜   rW   r£   rå   r#  Ú@py_format33r  r¦   Ú@py_format12s!                                    r   ÚGtest_delete_all_needs_the_confirmation_word_and_only_touches_its_schoolr4  Š   sŒ  é € Ø”—’“×!Ñ! " 1Ð%Ð&Ð
'€CÜ× Ò  °Ò5Ø")¨+¨Ð 7ÀSÑI€GÜŒk˜*Ó%¤z°#°}Ó'EÈÑ'OÔPØ—-‘-Ð 7À�-ÐI×IÐ]×VÑVÐ]ÐZ]Ð]ÐZ]Ñ]×]×]×]Ò]ÐV×]×]Ô]ÐI×]×]Ó]ÐV×]×]Ó]ÐZ]×]×]×]×]×]×]Õ]Ø—-‘-Ð BÈG�-ÐT×TÐh×aÑaÐhÐehÐhÐehÑh×h×h×hÒhÐa×h×hÔhÐT×h×hÓhÐa×h×hÓhÐeh×h×h×h×h×h×hÕhØ(Ð2Œ:�cÓ)Ð2×0Ñ0Ð2Ð0Ó2Ð2Ö2×2×2×2×2×2Ñ2Œ:×2×2×2Ñ2Œ:×2×2×2×2×2Ö2�c×2×2×2Ñ2�c×2×2Õ2˜=×2×2Ó2Ð)×2×2Ó2Ð0×2×2Ó2Ð2×2×2×2×2×2Ö2Ø�m‰mÐBÈGˆmÐT×T€AÙl�=‰=Ðl˜CÐl˜CÑ×l A§F¡F£H¨YÑ$7Ðl¸1ÐlÐ$7¸1Ñ$<×lÑlÐUbÐlÄZÐPSÐUbÓEcÐlÐEc×EjÑEjÐlÑEjÓElÐlÐElÔAlÐlÐAl×l×l×lÔlˆ=×l×l×l×l×lÕlˆ1×l×l×lÑlˆ1×l×lÕlˆ=×l×lÓl˜C×l×l×l×l×l×l×lÓlÐ$7¸1×l×lÔlÐ$7×l×lÓl¸1×l×l×l×l×l×l×l×l×l×lÒlÄZ×l×l×lÑlÄZ×l×l×l×l×lÖlÐPS×l×l×lÑlÐPS×l×lÕlÐUb×l×lÓlÐEc×l×lÓlÐEj×l×lÓlÐEl×l×l×l×l×l×l×l×l×l×l×l×l×l×lÓlÜ”vœyÓ)ÐD¨NÐD¨NÑ:ÐDÐ:×BÑBÐDÐBÓDÐD×D×D×D×D×D×DÑDŒJ×D×D×DÑDŒJ×D×D×D×D×DÖD”v×D×D×DÑD”v×D×D×D×D×DÖDœy×D×D×DÑDœy×D×DÕDÐ)×D×DÓD¨N×D×DÓDÐB×D×DÓDÐD×D×D×D×D×D×DÒDò JÚTâTùs9   ‚A8_Á:_Á;B9_Ä4_Ä5G<_Ì1_Ì2R%_ß_ß_c              ƒ   ó:  #   • S GH  nU R                  SU S3US9I S h  v•N nUR                  nSoTU;   of(       dÑ  [        R                  " SU4SXE45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  n[        R                  " U5      S
-   SU0-  n[        [        R                  " U5      5      eS =n=peGM     g  Nø7f)N)z..%2F..%2Fphotoszx%2F..%2F..rê   r  r
  r/   )r   rë   r®   r3   )z3%(py2)s
{%(py2)s = %(py0)s.status_code
} in %(py5)srs   rÁ   rÂ   rj   )rÌ   rˆ   rA   rB   rC   rD   rE   rF   rÍ   rI   rJ   )	rK   rL   Úbadrs   rN   r’   rO   r—   r˜   s	            r   Ú)test_trash_restore_rejects_path_traversalr7  —   s°   é € Ü?ˆØ—+‘+Ð 8¸¸¸XÐFÐP]�+Ð^×^ˆØ�}‰}Ð4 Ð4 Ñ/×4×4×4Ò4ˆ}×4×4×4×4×4Õ4ˆq×4×4×4Ñ4ˆq×4×4Õ4ˆ}×4×4Ó4 ×4×4×4Ð4°×4×4×4×4×4×4Ó4ò @Ù^ùs   ‚D D¡C9Dc              ƒ   óÞ  #   • S GHÝ  u  p#[        X5      " X1S9I S h  v•N nUR                  nSoeU:H  ow(       dÑ  [        R                  " SU4SXV45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[        R                  " U5      S-   S	U0-  n	[        [        R                  " U	5      5      eS =n=pv[        X5      " U5      I S h  v•N oªR                  nS
oËU:H  of(       d›  [        R                  " SU4SX¼45      [        R                  " U
5      [        R                  " U5      [        R                  " U5      S.-  n[        R                  " U5      S-   SU0-  n[        [        R                  " U5      5      eS =n
=n=plGMà     g  GNË NÆ7f)N))r?   r.   )r?   rZ   )r?   rú   )r  z$/api/admin/photos/all?confirm=BORRARr/   rƒ   rf   rÀ   rs   rÁ   rÂ   rj   i‘  r„   r…   z
>assert %(py8)sr:   )Úgetattrrˆ   rA   rB   rC   rD   rE   rF   rÍ   rI   rJ   )rK   Údirector_headersÚmethodÚpathrs   rN   r’   rO   r—   r˜   rP   r‘   rŸ   rS   r¨   s                  r   Ú4test_photo_admin_endpoints_require_the_operator_roler=  �   s%  é € ôq‰ˆä˜&Ô)¨$ÑI×IˆØ�}‰}Ð) Ð) Ñ#×)×)×)Ò)ˆ}×)×)×)×)×)Õ)ˆq×)×)×)Ñ)ˆq×)×)Õ)ˆ}×)×)Ó) ×)×)×)Ð) T×)×)×)×)×)×)Ð)Ü˜fÔ-¨dÓ3×3ÐM×@Ñ@ÐMÀCÐMÀCÑG×M×M×MÒMÐ@×M×MÔMÐ3×M×MÓMÐ@×M×MÓMÀC×M×M×MÐMÈ×M×M×M×M×M×MÕMò	qâIá3ùs#   ‚G-�G(žDG-Ä$G+Ä%CG-Ç+G-c              ƒ   ó.  #   • U R                  S[         35      I S h  v•N R                  5       S   nU Vs/ s H  o"S   PM	     nnS/oCU:H  oU(       do  [        R                  " SU4SX445      [        R
                  " U5      [        R
                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=pTU R                  US
   S   5      I S h  v•N o3R                  nSo…U:H  o™(       d„  [        R                  " SU	4SXX45      [        R
                  " U5      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n
[        [        R                  " U
5      5      eS =n=n=p˜g  GNms  snf  N¯7f)Nú/api/portal/photos?code=rc   r\   úvieille.jpgrf   r«   r¬   r­   r8   r   r¶   rq   r„   r…   r†   r:   )	r?   r   r@   rA   rB   rF   rI   rJ   rˆ   )rK   rc   r_   rP   rO   r‘   rR   rS   rŸ   r’   r¨   s              r   Ú@test_families_with_the_old_layout_still_see_and_buy_their_photosrA  §   s  é € Ø—J‘JÐ!9¼+¸ÐGÓH×H×NÑNÓPÐQYÑZ€FÙ#)Ó*¢6˜aˆjŒM¡6Ð=Ð*¨}¨oÐ=¨oÑ=×=×=×=Ò=Ð*×=×=Ô=Ð*×=×=Ó=¨o×=×=×=×=×=×=Ó=Ø—*‘*˜V A™Y uÑ-Ó.×.ÐB×;Ñ;ÐB¸sÐB¸sÑB×B×B×BÒBÐ;×B×BÔBÐ.×B×BÓBÐ;×B×BÓB¸s×B×B×B×B×B×BÖBò IùÚ*Ù.ùs.   ‚FžFŸF¸FÁBFÃ#FÃ$B(FÆFc              ƒ   óª  #   • [        [        SSS9[        [        [        5      S-  5        U R                  S[         35      I S h  v•N R                  5       S    Vs1 s H  o"S   iM	     nnSS1oCU:H  oU(       d¥  [        R                  " S	U4S
X445      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =pT[        [        [        5      S-  R                  5         g  GNs  snf 7f)N)rq   rq   é   r"   z	nueva.jpgr?  rc   r\   r@  rf   )z%(py0)s == %(py3)sÚnames)r~   rh   zassert %(py5)sri   )r   r   r   r   r   r?   r@   rA   rB   rC   rD   rE   rF   rI   rJ   r   )rK   rL   r_   rD  r‘   rN   Ú@py_format4r—   s           r   Ú.test_a_family_with_both_layouts_sees_the_unionrF  ­   sã   é € ÜŒk˜*¨1Ñ-¬z¼&Ä+Ó/NÐQ\Ñ/\Ô]Ø+1¯:©:Ð8PÔQ\ÐP]Ð6^Ó+_×%_×$eÑ$eÓ$gÐhpÒ$qÓrÒ$q˜qˆzŒ]Ñ$q€EÐrØ" KÐ0Ð0Ð0Ñ0×0×0×0Ò0ˆ5×0×0×0×0×0Õ0ˆ5×0×0×0Ñ0ˆ5×0×0Õ0Ð0×0×0×0×0×0×0Ñ0Ü”œÓ$ {Ñ2×:Ñ:Õ<ò &`ùÒrùs%   ‚AEÁEÁEÁEÁ-CEÅEc              ƒ   ó†  #   • [         R                  [        -  S-  n[        [	        S5      U5        U R                  S[         S3US9I S h  v•N n/ oCR                  nSoeU:H  owo‡(       a  UR                  o™" 5       oª(       + o»nU(       Gd}  [        R                  " SU4SXV45      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  oÔR                  U5        U(       a‹  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " W	5      [        R                  " W
5      S.-  oäR                  U5        [        R                  " US5      0 -  nSSU0-  n[!        [        R"                  " U5      5      eS =n=n=n=n=n=n	=p«U R%                  SUS9I S h  v•N R'                  5       S   n[)        S U 5       5      nU R+                  SUS    S3US9I S h  v•N   UR                  oD" 5       oU(       dš  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[!        [        R"                  " U5      5      eS =pEUR-                  5         g  GNì GN NÐ7f)Nztemporal_legacy.jpgrÕ   z/api/admin/photos/_/z/temporal_legacy.jpgr/   rq   rf   rr   rs   rt   ru   rv   rø   Úlegacyró   r   rù   rÆ   rú   rû   c              3   óˆ   #   • U  H8  nS US   ;  d  M  US   S:X  d  M  US   R                  S5      (       d  M4  Uv •  M:     g7f)Útemporalrd   rý   r×   zphoto-OLD7007Nrþ   r   s     r   ra   Úatest_deleting_a_legacy_photo_goes_to_the_trash_and_comes_back_to_the_old_place.<locals>.<genexpr>º   sM   é € ð  GšG�q z¸¸6¹Ñ'B“ÀqÈÁÐZ[ÑG[“Ð`aÐbhÑ`i×`tÑ`tð  vE÷  aF—‘šGùs   ‚A“AžA¹	Ar  r	  r
  rî   rí   )r   Ú
PHOTOS_DIRr   r   r   r  rˆ   rÏ   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r?   r@   r‡   rÌ   r   )rK   rL   rH  rs   rN   rO   rž   rŸ   rP   r§   r    r”   r˜   r¢   rõ   r£   r  rû   r  rR   s                       r   ÚNtest_deleting_a_legacy_photo_goes_to_the_trash_and_comes_back_to_the_old_placerM  ´   sþ  é € Ü×Ñ¤Ñ,Ð/DÑD€FÜŒk˜*Ó% vÔ.Ø�m‰mÐ2´;°-Ð?SÐTÐ^kˆmÐl×l€AÙ7�=‰=Ð7˜CÐ7˜CÑ×7¨¯©Ð7¨«Ð7Ô$7×7×7×7Õ7ˆ=×7×7×7×7×7Õ7ˆ1×7×7×7Ñ7ˆ1×7×7Õ7ˆ=×7×7Ó7˜C×7×7×7×7×7×7×7×7×7×7Ð7¨×7×7×7Ñ7¨×7×7Õ7¨×7×7Ó7¨×7×7×7×7×7×7×7×7×7×7×7×7×7Ø—Z‘ZÐ 9À=�ZÐQ×Q×WÑWÓYÐZcÑd€GÜñ  G™Gó  Gó  G€EØ
�+‰+Ð0°°t±°¸XÐFÐP]ˆ+Ð
^×^Ð^Ø�=‰=Ðˆ=‹?Ð�?×××××Ñˆ6×××Ñˆ6××Õˆ=××Óˆ?×××××ÒØ
‡M�M…Oò 	mâQá^ùs9   ‚AMÁL9ÁGMÈ,L<È-AMÉ.L?É/CMÌ<MÌ?Mc              ƒ   óf  #   • U R                  SUS9I S h  v•N R                  5       nUS   nSoCU:¬  oU(       do  [        R                  " SU4SX445      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS =n=pTg  N˜7f)
Nz/api/admin/statsr/   Úphotos_receivedé   )ú>=)z%(py1)s >= %(py4)sr¬   r­   r8   )r?   r@   rA   rB   rF   rI   rJ   )rK   rL   ÚstatsrP   rO   r‘   rR   rS   s           r   Ú'test_stats_count_photos_of_both_layoutsrS  À   s{   é € Ø—:‘:Ð0¸-�:ÐH×H×NÑNÓP€EØÐ"Ñ#Ð( qÐ( qÑ(×(×(×(Ò(Ð#×(×(Ô(Ð#×(×(Ó( q×(×(×(×(×(×(Ô(ñ Iùs   ‚B1–B/—BB1)0Ú__doc__ÚbuiltinsrC   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterA   r}   r�   r$   ÚpytestÚPILr   Úcorer   r³   r   r   Úconftestr   r   r	   r
   r   r   r   r   r   Úfixturer   r+   rX   r©   r¯   r·   rÓ   rç   rñ   rö   r  r%  r4  r7  r=  rA  rF  rM  rS  © r,   r   Ú<module>r_     s¶   ðÙ oß  „ ƒ	Û 	Û ã Ý å ß 2ß × Õ ð ‡‚˜Ññ4ó ð4ð  9°4Àlô eò
<ò
`òHòXò.ò$Kòò3òQò
Aò
Eò5òNòCò=ò	ó)r,   