
    %^g                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ 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% d dl&m'Z'  ejP                  d      Z)ed        Z*d Z+d Z, G d d      Z- G d de-      Z. G d de-      Z/ G d de      Z0d Z1y)    N)	lru_cache)URLError)quote
quote_plusurlsplit
urlunsplit)Requesturlopen)ContentFileFile)Storage)	force_str)
LazyObjectempty)default)settingsstorage)ThumbnailErrordeserializeget_module_classtokey)parse_geometryz^(https?|ftp):\/\/c                 "     t        |              S N)r   r   s    Y/var/www/html/webapps/promises/venv/lib/python3.12/site-packages/sorl/thumbnail/images.pyget_or_create_storager      s    $G$&&    c                     | j                   t        d      | j                  | j                         | j                   d}t	        j
                  |      S )Nz:Trying to serialize an ``ImageFile`` with a ``None`` size.)namer   size)r!   r   r    serialize_storagejsondumps)
image_filedatas     r   serialize_image_filer'      sR     . / 	/ //1D
 ::dr   c                 z    t        |       }t        |d   t        |d               }|j                  |d          |S )Nr    r   r!   )r   	ImageFiler   set_size)sr&   r%   s      r   deserialize_image_filer,   )   s=    q>D4<)>tI)OPJV%r   c                   h    e Zd Zg Zd Zed        ZeZed        ZeZ	d Z
ed        Zed        ZeZy)BaseImageFilec                     t               r   NotImplementedErrorselfs    r   existszBaseImageFile.exists3   s    !##r   c                      | j                   d   S )Nr   r!   r2   s    r   widthzBaseImageFile.width6       yy|r   c                      | j                   d   S )N   r6   r2   s    r   heightzBaseImageFile.height<   r8   r   c                 4    | j                   | j                  kD  S r   )yxr2   s    r   is_portraitzBaseImageFile.is_portraitB   s    vvr   c                 X    t        | j                        t        | j                        z  S r   )floatr>   r=   r2   s    r   ratiozBaseImageFile.ratioE   s    TVV}uTVV},,r   c                     t               r   r0   r2   s    r   urlzBaseImageFile.urlI   s    !##r   N)__name__
__module____qualname__r!   r4   propertyr7   r>   r;   r=   r?   rB   rD   src r   r   r.   r.   0   st    D$   	A  	A - - $ $ Cr   r.   c                       e Zd ZdZddZd Zd ZddZd Ze	d        Z
e	d        Zd	 Zd
 Zd Zd Ze	d        Zd Zy)r)   Nc                 "   |st        d      t        |d      r|j                  | _        nt        |      | _        t        j
                  r#| j                  j                  d      d   | _        | j                  j                  d      rd| j                  z   | _        ||| _        nXt        |d      r|j                  | _        n:t        j                  | j                        rt               | _        nt        | _        t        | j                  d      rz| j                  j                  }| j                  j                  j                  d	      s|d	z  }| j                  j                  |      r| j                  t        |      d  | _        y y y )
NzFile is empty.r    ?r   z//zhttp:r   location/)r   hasattrr    r   r   THUMBNAIL_REMOVE_URL_ARGSsplit
startswithr   url_patmatch
UrlStoragedefault_storagerN   endswithlen)r3   file_r   rN   s       r   __init__zImageFile.__init__S   s0    !122 5&!

DI!%(DI --		,Q/DI 99%$))+DI "DLUI& ==DL]]499%%<DL*DL4<<,||,,H<<((11#6Cyy##H- IIc(mn5	 .	 -r   c                     | j                   S r   )r    r2   s    r   __str__zImageFile.__str__y   s    yyr   c                 L    | j                   j                  | j                        S r   )r   r4   r    r2   s    r   r4   zImageFile.exists|       ||""499--r   c                    |n| j                   y t        | j                  d      r&| j                  j                  | j                        }njt
        j                  j                  |       }t
        j                  j                  |      }| j                  |      rt        |      }|j                          t        |      | _         y )N
image_size)_sizerP   r   ra   r    r   engine	get_imageget_image_sizeflip_dimensionslistreverse)r3   r!   images      r   r*   zImageFile.set_size   s     ZZ#T\\<0 <<**4995D NN,,T2E>>007D##E*Dz$Z
r   c                 @    t         j                  j                  |      S )zw
        Do not manipulate image, but ask engine whether we'd be doing a 90deg
        rotation at some point.
        )r   rc   rf   )r3   ri   s     r   rf   zImageFile.flip_dimensions   s    
 ~~--e44r   c                     | j                   S r   )rb   r2   s    r   r!   zImageFile.size   s    zzr   c                 L    | j                   j                  | j                        S r   )r   rD   r    r2   s    r   rD   zImageFile.url   s    ||		**r   c                     | j                   j                  | j                        }	 |j                         |j	                          S # |j	                          w xY wr   )r   openr    readclose)r3   fs     r   ro   zImageFile.read   s;    LLdii(	668GGIAGGIs   A Ac                     t        |t              st        |      }d | _        | j                  j                  | j                  |      | _        | j                  S r   )
isinstancer   r   rb   r   saver    )r3   contents     r   writezImageFile.write   sC    '4(!'*G
LL%%dii9	yyr   c                 L    | j                   j                  | j                        S r   )r   deleter    r2   s    r   rx   zImageFile.delete   r_   r   c                 F   t        | j                  t              rW| j                  j                  t        u r| j                  j                          | j                  j                  j                  }n| j                  j                  }|j                  d|j                  S )N.)	rs   r   r   _wrappedr   _setup	__class__rF   rE   )r3   clss     r   r"   zImageFile.serialize_storage   sk    dllJ/ ||$$-##%,,''11C,,((C..#,,77r   c                 J    t        | j                  | j                               S r   )r   r    r"   r2   s    r   keyzImageFile.key   s    TYY 6 6 899r   c                     t        |       S r   )r'   r2   s    r   	serializezImageFile.serialize   s    #D))r   r   )rE   rF   rG   rb   r[   r]   r4   r*   rf   rH   r!   rD   ro   rv   rx   r"   r   r   rJ   r   r   r)   r)   P   sv    E$6L. *5   + +.	8 : :*r   r)   c                   (    e Zd Zd Zd Zed        Zy)DummyImageFilec                 B    t        |t        j                        | _        y r   )r   r   THUMBNAIL_DUMMY_RATIOr!   )r3   geometry_strings     r   r[   zDummyImageFile.__init__   s    "**
	r   c                      y)NTrJ   r2   s    r   r4   zDummyImageFile.exists   s    r   c                 V    t         j                  | j                  | j                  dz  S )N)r7   r;   )r   THUMBNAIL_DUMMY_SOURCEr>   r=   r2   s    r   rD   zDummyImageFile.url   s%    ..ff/
 	
r   N)rE   rF   rG   r[   r4   rH   rD   rJ   r   r   r   r      s     
 
 
r   r   c                   .    e Zd ZddZddZd Zd Zd Zy)	rV   c                     |j                  |d      }|j                  dd      }t        |      \  }}}}}t        |d      }t	        |d      }t        |||||f      S )Nignore)errorsasciis   /%s   :&%=)encodedecoder   r   r   r   )r3   rD   charsetschemenetlocpathqsanchors           r   normalize_urlzUrlStorage.normalize_url   sh    jjj2jjj2+3C=(b&T5!G$664V<==r   c                     | j                  |      }t        j                         d   }dj                  |      }t	        |d|i      }t        |t        j                        S )Nr   z!python-urllib{python_version}/0.6)python_versionz
User-Agent)headers)timeout)r   platformpython_version_tupleformatr	   r
   r   THUMBNAIL_URL_TIMEOUT)r3   r    moderD   r   
user_agentreqs          r   rn   zUrlStorage.open   s\      &!668;8??~?^
cL*#=>sH$B$BCCr   c                 F    	 | j                  |       y# t        $ r Y yw xY w)NFT)rn   r   r3   r    s     r   r4   zUrlStorage.exists   s+    	IIdO   		s    	  c                     |S r   rJ   r   s     r   rD   zUrlStorage.url   s    r   c                      y r   rJ   r   s     r   rx   zUrlStorage.delete   s    r   N)zutf-8)rb)rE   rF   rG   r   rn   r4   rD   rx   rJ   r   r   rV   rV      s    	>Dr   rV   c                  d    t         j                  t        j                  } fd |        y )Nc                 d   j                  |       \  }}|D ]1  }j                  t        j                  j	                  | |             3 |D ]Q  }t        j                  j	                  | |      } |       	 j                  |      }t        j                  |       S y # t
        $ r Y `w xY wr   )listdirrx   osr   join	Exceptionrmdir)	r   dirsfilesrq   d	directory	full_pathr   walks	          r   r   z#delete_all_thumbnails.<locals>.walk   s    ood+e 	2ANN277<<a01	2 	 AT1-IO#LL3	 HHY	 
  s   :B##	B/.B/)r   r   r   THUMBNAIL_PREFIX)r   r   r   s    @@r   delete_all_thumbnailsr      s%    ooG$$D  	Jr   )2r#   r   r   re	functoolsr   urllib.errorr   urllib.parser   r   r   r   urllib.requestr	   r
   django.core.files.baser   r   django.core.files.storager   django.utils.encodingr   django.utils.functionalr   r   sorl.thumbnailr   sorl.thumbnail.confr   sorl.thumbnail.defaultr   rW   sorl.thumbnail.helpersr   r   r   r   sorl.thumbnail.parsersr   compilerT   r   r'   r,   r.   r)   r   rV   r   rJ   r   r   <module>r      s     	  	  ! @ @ + 4 - + 5 " ( = W W 1
"***
+ ' '	 @v* v*r
] 
" Br   