
    hI                         d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lZ G d dej0                        Z G d d      Z G d de      Zy
)    )BytesIO)path)TestCase)filesutilssignals
exceptionsmodelsengine)settings)ThumbnailOptions)r   )Image)
LogCaptureNc                   v    e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Z ej                   dej$                  vd      d        Z ej                   dej$                  vd       ej                   edu d      d               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!d Z" xZ#S ) 	FilesTestc                    t         |           t        j                         | _        t        j
                         | _        | j                  | j                  d      }t        j                  | j                  |      | _
        | j                  | j                  _        | j                  | j                  d      }t        j                  | j                  |      | _        | j                  | j                  _        t        j                  | j                  |      | _        | j                  | j                  _        | j                  | j                  ddd      }t        j                  | j                  |      | _        | j                  | j                  _        | j                  | j                  ddd      }t        j                  | j                  |      | _        | j                  | j                  _        y )Nztest.jpgztransparent.pngRGBAPNG)
image_modeimage_formatztransparent-greyscale.pngLA)supersetUptestTemporaryStoragestorageFakeRemoteStorageremote_storagecreate_imager   get_thumbnailerthumbnailerthumbnail_storageremote_thumbnailerext_thumbnailertransparent_thumbnailer!transparent_greyscale_thumbnailer)selffilename	__class__s     P/home/dcms/DCMS/lib/python3.12/site-packages/easy_thumbnails/tests/test_files.pyr   zFilesTest.setUp   s   ,,."446 $$T\\:> 00xH-1\\*$$T%8%8*E"'"7"7#+484G4G1  %44T\\8L15. $$LL+ %   (-'<'<LL(($$9=$$6$$LL5$ %   271F1FLL(2$.CG<<..@    c                     | j                   j                          | j                  j                          t        |           y N)r   delete_temporary_storager   r   tearDown)r'   r)   s    r*   r/   zFilesTest.tearDown2   s0    --/446r+   c           	      >   | j                   j                  ddi      }| j                  j                  ddi      }| j                  |j	                         d|j
                  z         | j                  |j	                  d      d|j
                  z         | j                  |j	                  d      d	|j
                  z         | j                  |j	                         d|j
                  z         | j                  j                  ddi      }| j                  |j	                         d	|j
                  z         | j                  |j	                  d
      d|j
                  z         | j                   |j                  di dddd|j
                  z         y )Nsized   r3   /<img alt="" height="75" src="%s" width="100" />zA & B)altz8<img alt="A &amp; B" height="75" src="%s" width="100" />F)use_sizez<img alt="" src="%s" />TzA&Bfish)relclasszJ<img alt="" class="fish" height="75" rel="A&amp;B" src="%s" width="100" /> )r!   get_thumbnailr#   assertEqualtagurl)r'   localremotes      r*   test_tagzFilesTest.test_tag7   s     ..
/CD((66
7KLIIK 99	 	II'I" %&(-		%2	3
 	JJJ&(AFJJ(N	P
 	JJL=

J	L ((66
7KLJJL3fjj@	B 	JJJ%=

J	L
 	EII878&(-		2	3r+   c                     dt         _        | j                  j                  ddi       | j                  j                  ddi      }| j	                  |j                         d|j                  z         y )NTr1   r2   r4   )r   THUMBNAIL_CACHE_DIMENSIONSr#   r;   r<   r=   r>   )r'   r@   s     r*   test_tag_cached_dimensionsz$FilesTest.test_tag_cached_dimensions\   sd    .2+--vz.BC ((66
7KLJJL=

J	Lr+   c                 B   | j                   j                  ddi      }|j                  d       t        j                  |      5 }| j                  t        j                  |      d|j                  z         d d d        | j                  j                  ddi      }|j                  d       t        j                  |      5 }| j                  t        j                  |      d|j                  z         d d d        | j                  j                  ddi      }|j                  d       t        j                  |      5 }| j                  t        j                  |      d|j                  z         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr1   r2   r   z%s shouldn't be transparent.z%s should be transparent.)r!   r;   seekr   openassertFalser   is_transparentnamer%   
assertTruer&   )r'   
thumb_filethumbs      r*   test_transparent_thumbnailingz'FilesTest.test_transparent_thumbnailingf   sk   %%33Z "
ZZ
# 	Bu$$U+.@B	B
 11??Z "
ZZ
# 	?uOO$$U++joo=?	?
 ;;IIZ "
ZZ
# 	?uOO$$U++joo=?	? 	?!	B 	B	? 	?	? 	?s$   3E<3F	 3F<F	FFc                 .   ddi}| j                   j                  |      }| j                   j                  |j                        }|j	                          |j
                  j	                  |j                         | j                   j                  |       y Nr1   r2   )thumbnail_name)r!   r;   get_thumbnail_cacherJ   deleter   r'   optsrM   thumb_caches       r*   test_missing_thumbzFilesTest.test_missing_thumb   sz    
#  ..t4&&:: :: ; 'UZZ(&&t,r+   c                 v   ddi}| j                   j                  |      }|j                  j                  |j                         | j                   j                  |      }| j                  |j                  |j                         | j                  |j                  j                  |j                               y Nr1   r2   )r!   r;   r   rS   rJ   r<   rK   exists)r'   rU   rM   	new_thumbs       r*   test_missing_thumb_from_storagez)FilesTest.test_missing_thumb_from_storage   s    
#  ..t4UZZ($$2248	Y^^4,,Y^^<=r+   c                 .   ddi}| j                   j                  |      }| j                   j                  |j                        }|j	                          |j
                  j	                  |j                         | j                   j                  |       y rP   )r#   r;   rR   rJ   rS   r   rT   s       r*   test_missing_remote_thumbz#FilesTest.test_missing_remote_thumb   s{    
#''55d;--AA :: B 'UZZ(--d3r+   c                     ddi}| j                   j                  | j                  j                         | j	                  t
        j                  | j                  j                  |       y rY   )r   rS   r!   rJ   assertRaisesr	   InvalidImageFormatErrorr;   r'   rU   s     r*   test_missing_sourcezFilesTest.test_missing_source   sR    
#D,,112..**D	2r+   c                    d| j                   _        | j                   j                  ddi      }| j                  t	        j
                  |j                        d   d       d| j                   _        | j                   j                  ddi      }| j                  t	        j
                  |j                        d   d       d| j                   _        | j                   j                  ddi      }| j                  t	        j
                  |j                        d   d       d	| j                   _        | j                   j                  ddi      }| j                  t	        j
                  |j                        d   d       y )
Npngr1   r2      z.png)fooTz.jpg)rg   jpg)r$   thumbnail_extensionr;   r<   r   splitextrJ   thumbnail_preserve_extensions)r'   rM   s     r*   test_extensionszFilesTest.test_extensions   s.   380$$22FJ3GHuzz215v>=E:$$22FJ3GHuzz215v>=A:$$22FJ3GHuzz215v>=K:$$22FJ3GHuzz215v>r+   c                 r   dddd}| j                   j                  ddi      }t        j                  |j                        5 }| j                  d|j                         |j                  d   d	d
 |j                  d	   d	d
 z   |j                  d   d	d
 z   }| j                  ||d          d d d        | j                   j                  dd	d      }t        j                  |j                        5 }| j                  d|j                         |j                  d   d	d
 |j                  d	   d	d
 z   |j                  d   d	d
 z   }| j                  ||d	          d d d        | j                   j                  ddd      }t        j                  |j                        5 }| j                  d|j                         |j                  d   d	d
 |j                  d	   d	d
 z   |j                  d   d	d
 z   }| j                  ||d          d d d        y # 1 sw Y   ixY w# 1 sw Y   xY w# 1 sw Y   y xY w)N)rf   rf   rf   rf   rf   rf      rf   rf   rf   rf   rf   )ro   ro   rf   rf   rf   rf   )r   rf   ro   r1   r2   ssr   rf      ro   )r1   subsamplingss1ss0)
r$   r;   r   rG   r   assertNotInrJ   layerr<   assertIn)r'   	samplingsrM   imsamplings        r*   test_subsamplingzFilesTest.test_subsampling   s   !!!
	
 $$22FJ3GHZZ

# 	5rT5::.xx{1Q'"((1+a*::RXXa[1=MMHXy|4	5
 $$2224ZZ

# 	5rMM%,xx{1Q'"((1+a*::RXXa[1=MMHXy|4	5
 $$2224ZZ

# 	5rMM%,xx{1Q'"((1+a*::RXXa[1=MMHXy|4	5 	5	5 	5	5 	5	5 	5s'   A*H2A*H!!A*H-H!H*-H6c                    ddit         _        | j                  j                  ddi      }t	        j
                  |j                        5 }| j                  d|j                         |j                  d   dd |j                  d   dd z   |j                  d   dd z   }| j                  |d	       d d d        y # 1 sw Y   y xY w)
Nrr   rf   r1   r2   rs   r   rq   ro   rn   )r   THUMBNAIL_DEFAULT_OPTIONSr$   r;   r   rG   r   rw   rJ   rv   r<   )r'   rM   ry   rz   s       r*   test_default_subsamplingz"FilesTest.test_default_subsampling   s    .;Q-?*$$22FJ3GHZZ

# 	;rMM%,xx{1Q'"((1+a*::RXXa[1=MMHX'9:	; 	; 	;s   
A'B::Ceasy_thumbnails.optimizezoptimize app not installedc                 n   ddit         _        t               5 }d| j                  _        | j                  j                  ddi       t        |j                               d   }| j                  |d   d       | j                  |d   d	       | j                  |d
   d       ddd       y# 1 sw Y   yxY w)8use a mock image optimizing post processor doing nothingre   z-easy_thumbnails/tests/mockoptim.py {filename}r1   
   r   r   r   rf   INFOro   z;^easy_thumbnails/tests/mockoptim.py [^ ]+ returned nothing$N
r   THUMBNAIL_OPTIMIZE_COMMANDr   r$   ri   r;   tupleactualr<   assertRegexr'   logcapr   s      r*   test_postprocessorzFilesTest.test_postprocessor   s     B/D+\ 	OV7<D  4  ../AB6==?+B/FVAY(BCVAY/q	MO	O 	O 	O   B
B++B4Nztestfixtures not installedc                 n   ddit         _        t               5 }d| j                  _        | j                  j                  ddi       t        |j                               d   }| j                  |d   d       | j                  |d   d	       | j                  |d
   d       ddd       y# 1 sw Y   yxY w)r   re   z2easy_thumbnails/tests/mockoptim_fail.py {filename}r1   r   r   r   r   rf   ERRORro   z-^Command .+returned non-zero exit status 1.*$Nr   r   s      r*   test_postprocessor_failz!FilesTest.test_postprocessor_fail   s     G/I+\ 	MV7<D  4  ../AB6==?+B/FVAY(BCVAY0q	KM	M 	M 	Mr   c                     dt         _        | j                  j                  ddi       dt         _        | j                  j                  ddi       y )NTr1   r      F)r   (   )r   USE_TZr!   r;   r'   s    r*   test_USE_TZzFilesTest.test_USE_TZ   sB    &&'9:&&'9:r+   c                     dddd}| j                   j                  |      }| j                  |j                  t	        |             y )N2   r   T)r1   cropupscale)r!   r;   r<   thumbnail_optionsr   r'   rU   rM   s      r*   test_thumbnailfile_optionsz$FilesTest.test_thumbnailfile_options   s@     $4@  ..t4002B42HIr+   c                 h    ddddd}| j                  | j                  j                  |      d       y )Nr   smartTr   )r1   r   r   targetz6test.jpg.50x50_q85_crop-smart_target-10,10_upscale.jpg)r<   r!   get_thumbnail_namerb   s     r*   test_get_thumbnail_namez!FilesTest.test_get_thumbnail_name  s;    g$  	//5D	Fr+   c                     ddit         _        ddi}| j                  j                  |      }| j	                  |j
                  |j                  fd       y )Nr   Tr1   r   )r   r}   r!   r;   r<   widthheightr   s      r*   test_default_options_settingz&FilesTest.test_default_options_setting	  sK    .4d^*!  ..t4%++u||4h?r+   c                    ddi}| j                   j                  |      }| j                  |j                  |j                  fd       | j                   j                  |      }| j                  |j                  |j                  fd       y )Nr1   r   r   &   )r!   r;   r<   r   r   r   s      r*   test_dimensions_of_cached_imagez)FilesTest.test_dimensions_of_cached_image  st    !  ..t4%++u||4h?   ..t4%++u||4h?r+   c                 z   dt         _        ddi}| j                  j                  |      }| j	                  |j
                  |j                  fd       t        j                  j                  j                         d   }| j	                  |j
                  |j                  f|j
                  |j                  f       y NTr1   r   r   r   )r   rC   r!   r;   r<   r   r   r
   ThumbnailDimensionsobjectsallr'   rU   rM   
dimensionss       r*   &test_cached_dimensions_of_cached_imagez0FilesTest.test_cached_dimensions_of_cached_image  s    .2+!  ..t4%++u||4h? //77;;=a@
[[%,,'z001	3r+   c                 *   dt         _        ddi}| j                  j                  |      }|j                   | j                  j                  |      }| j                  d      5  | j                  |j                  d       d d d        y # 1 sw Y   y xY w)NTr1   r   r   r   )r   rC   r#   r;   r   assertNumQueriesr<   r   r   s      r*   %test_remote_cached_dimensions_queriesz/FilesTest.test_remote_cached_dimensions_queries$  s~    .2+!''55d;''55d;""1% 	.U[["-	. 	. 	.s   #B		Bc                    dt         _        ddi}| j                  j                  |      }| j	                  |j
                  |j                  fd       t        j                  j                  j                         j                          | j                  j                  |      }| j	                  t        j                  j                  j                         d       |j                   t        j                  j                  j                         }| j                  j                  |      }| j	                  |j
                  |j                  f|j
                  |j                  f       |j                          y r   )r   rC   r!   r;   r<   r   r   r
   r   r   r   rS   countgetcloser   s       r*   test_add_dimension_cachez"FilesTest.test_add_dimension_cache.  s   .2+!  ..t4%++u||4h?""**..0779  ..t433;;AACQG//77;;=
  ..t4[[%,,'z001	3
 	r+   c                 @   d }t         j                  j                  |       	 | j                  j	                  ddi      }| j                  t        |d             t         j                  j                  |       y # t         j                  j                  |       w xY w)Nc                     d| _         y )NT)signal_receivedsenderkwargss     r*   signal_handlerz?FilesTest.test_thumbnail_created_signal.<locals>.signal_handlerE  s
    %)F"r+   r1   r   r   )r   thumbnail_createdconnectr!   r;   rK   hasattr
disconnect)r'   r   rM   s      r*   test_thumbnail_created_signalz'FilesTest.test_thumbnail_created_signalC  s{    	* 	!!)).9	A$$22FH3EFEOOGE+<=>%%00@G%%00@s   8A< <!Bc                    ddi}| j                   j                  |d      }| j                  |d        d| j                   _        | j                   j                  |      }| j                  |d        | j                   j                  |d      }| j	                  |       | j                   j                  |      }| j	                  |       | j                   j                  |d      }| j	                  |       y )Nr1   r   FgenerateT)r!   r;   r<   r   rK   )r'   optionsrM   s      r*   test_passive_thumbnailerz"FilesTest.test_passive_thumbnailerO  s    8$   ..w.G% %*!  ..w7%   ..w.F   ..w7   ..w.Gr+   c                    d }t         j                  j                  |       	 | j                  j	                  ddi       | j                  t        | j                  d             | j                  j	                  ddid       | j                  t        | j                  d             ddi}| j                  j	                  |d      }| j                  |d        | j                  | j                  j                  t        |             t         j                  j                  |       y # t         j                  j                  |       w xY w)Nc                 0    |j                  d      | _        y )Nr   )r   missed_signalr   s     r*   r   z>FilesTest.test_thumbnail_missed_signal.<locals>.signal_handlern  s    #)::i#8F r+   r1   r2   r   Fr   r   )r   thumbnail_missedr   r!   r;   rH   r   r<   r   r   r   r   )r'   r   r   rM   s       r*   test_thumbnail_missed_signalz&FilesTest.test_thumbnail_missed_signall  s   	9 	  ((8	A**FJ+?@WT%5%5GH**$u + 6WT%5%5GHx(G$$227U2KEUD)  ..0@0IK %%00@G%%00@s   C(D, ,!Ec                 d   | j                   j                  ddd      }t        j                  |      5 }| j	                  t        j                  |             d d d        | j                   j                  ddd      }t        j                  |      5 }| j                  t        j                  |             d d d        | j                   j                  ddd      }t        j                  |      5 }| j                  t        j                  |             d d d        | j                   j                  ddi      }t        j                  |      5 }| j                  t        j                  |             d d d        y # 1 sw Y   *xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N)c   r   T)r1   r   )rf   r3   )r3   rf   r1      r   )r!   generate_thumbnailr   rG   rH   r   is_progressiverK   r'   rM   thumb_images      r*   test_progressive_encodingz#FilesTest.test_progressive_encoding  sl     33t,.ZZ 	@+U11+>?	@   33t,.ZZ 	?+OOE00=>	?  33t,.ZZ 	?+OOE00=>	?  33VZ4HIZZ 	?+OOE00=>	? 	?	@ 	@
	? 	?	? 	?	? 	?s/   %F%F4%F%F&FFF#&F/c                     dt         _        | j                  j                  ddi      }t	        j
                  |      5 }| j                  t        j                  |             d d d        y # 1 sw Y   y xY w)NFr1   r   )	r   THUMBNAIL_PROGRESSIVEr!   r   r   rG   rH   r   r   r   s      r*   test_no_progressive_encodingz&FilesTest.test_no_progressive_encoding  se    ).&  33VZ4HIZZ 	@+U11+>?	@ 	@ 	@s   %A,,A5)$__name__
__module____qualname__r   r/   rA   rD   rN   rW   r\   r^   rc   rl   r{   r~   unittestskipIfr   INSTALLED_APPSr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r)   s   @r*   r   r      s    PD
#3JL?2->42?"54; X__"(*A*AA$&O&O X__"(*A*AA$& X__Z4')EFM G&M;J
F@@
3.*
A:A.?$@r+   r   c                       e Zd ZddZd Zy)FakeSourceGeneratorc                     || _         y r-   fail)r'   r   s     r*   __init__zFakeSourceGenerator.__init__  s	    	r+   c                 4    | j                   rt        d      |S )NzFake source generator failed)r   
ValueError)r'   sourcer   s      r*   __call__zFakeSourceGenerator.__call__  s    99;<<r+   N)F)r   r   r   r   r   r:   r+   r*   r   r     s    r+   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)
EngineTestc                 $    t        d      | _        y )Ns   file-contents)r   r   r   s    r*   r   zEngineTest.setUp  s    ./r+   c                     t        d      g}| j                  t        t        j                  | j
                  i |d       y NTr   F)fail_silently)r   r`   r   r   generate_source_imager   r'   source_generatorss     r*   test_single_failzEngineTest.test_single_fail  s=    0d;<44KK.e 	 	Er+   c                     t        d      g}t        j                  | j                  i |      }| j	                  |d        y NTr   r   r   r   r   r<   r'   r   images      r*   test_single_silent_failz"EngineTest.test_single_silent_fail  s<    0d;<,,KK.0%r+   c                     t        d      t        d      g}| j                  t        j                  t        j                  | j
                  i |d       y r   )r   r`   r   NoSourceGeneratorr   r   r   s     r*   test_multiple_failzEngineTest.test_multiple_fail  sN    T*,?T,JL$$f&B&BKK.e 	 	Er+   c                     t        d      t        d      g}t        j                  | j                  i |      }| j	                  |d        y r   r   r   s      r*   test_multiple_silent_failz$EngineTest.test_multiple_silent_fail  sG    T*,?T,JL,,KK.0%r+   N)r   r   r   r   r   r   r  r  r:   r+   r*   r   r     s    0E&E&r+   r   )ior   osr   django.testr   easy_thumbnailsr   r   r   r	   r
   r   easy_thumbnails.confr   easy_thumbnails.optionsr   easy_thumbnails.testsr   PILr   testfixturesr   r   BaseTestr   r   r   r:   r+   r*   <module>r     sQ        M M ) 4 /  # K@ K@\ & &r+   