
2!V                 @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z 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 d a d d
 d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d a d d   Z  d d   Z! d d   Z" d  d!   Z# d" d#   Z$ d$ d% d&  Z% d$ d' d(  Z& d) d*   Z' d+ d,   Z( d- d d. d/  Z) e d0 d1    Z* d S)2    N)import_module)caches)ContentFile)
force_textsmart_bytes)SimpleLazyObject)settings)default_storage)get_mod_funcc             C   s3   t  j t |    j   } | r/ | d  |  S| S)N)hashlibmd5r   	hexdigest)	plaintextlengthdigest r   =/tmp/pip-build-0sboevxh/django-compressor/compressor/cache.pyget_hexdigest   s    r   c             C   s   d t  |   S)Nzdjango_compressor.%s)r   )keyr   r   r   simple_cachekey   s    r   c             C   s   d t  j   t |   f S)Nzdjango_compressor.%s.%s)socketgethostnamer   )r   r   r   r   socket_cachekey   s    r   c              O   s   t  d  k r y. t t j  \ } } t t |  |  a  Wq t t t f k
 r } z t d t j | f   WYd  d  } ~ Xq Xn  t  |  |   S)Nz)Couldn't import cache key function %s: %s)	_cachekey_funcr
   r   ZCOMPRESS_CACHE_KEY_FUNCTIONgetattrr   AttributeErrorImportError	TypeError)argskwargsmod_name	func_nameer   r   r   get_cachekey#   s    )r#   c             C   s   t  d t |    S)Nzmtime.%s)r#   r   )filenamer   r   r   get_mtime_cachekey0   s    r%   c             C   s
   t  |   S)N)r   )Zrender_template_stringr   r   r   get_offline_hexdigest4   s    r&   c             C   s   t  d t |    S)Nz
offline.%s)r#   r&   )sourcer   r   r   get_offline_cachekey8   s    r(   c              C   s(   t  j j d  }  t j j |  t  j  S)N/)r   ZCOMPRESS_OUTPUT_DIRstripospathjoinZCOMPRESS_OFFLINE_MANIFEST)
output_dirr   r   r   get_offline_manifest_filename<   s    r/   c           
   C   sj   t  d  k rf t   }  t j |   r] t j |   % } t j | j   j d   a  Wd  QXqf i  a  n  t  S)Nutf8)	_offline_manifestr/   r	   existsopenjsonloadsreaddecode)r$   fpr   r   r   get_offline_manifestD   s    	'	r9   c               C   s
   d  a  d  S)N)r1   r   r   r   r   flush_offline_manifestP   s    r:   c             C   sH   t    } t j |  d d j d  } t j | t |   t   d  S)Nindent   r0   )r/   r4   dumpsencoder	   saver   r:   )manifestr$   contentr   r   r   write_offline_manifestU   s    	rB   c             C   s   t  d |  j | | f  S)Nztemplatetag.%s.%s.%s)r#   Zcachekey)Z
compressormodekindr   r   r   get_templatetag_cachekey\   s    rE   c             C   so   t  j r_ t |   } t j |  } | d  k r[ t j j |   } t j | | t  j  n  | St j j |   S)N)	r   ZCOMPRESS_MTIME_DELAYr%   cachegetr+   r,   getmtimeset)r$   r   mtimer   r   r   	get_mtimea   s    	rK      c             C   sT   y. t  j j |   }  t t t |     } Wn t k
 rF d  SYn Xt | |  S)N)r+   r,   realpathstrintrK   OSErrorr   )r$   r   rJ   r   r   r   get_hashed_mtimel   s    	rQ   c             C   s^   y t  j j |   }  Wn t k
 r. d  SYn Xt |  d   } t | j   |  SWd  QXd  S)Nrb)r+   r,   rM   rP   r3   r   r6   )r$   r   filer   r   r   get_hashed_contentu   s    	rT   c             C   s#   t  j t d |  | f   j   S)Nzprecompiler.%s.%s)r   sha1r   r   )commandcontentsr   r   r   get_precompiler_cachekey   s    rX   c             C   sk   t  j |   } | d  k r d  S| \ } } } t j   | k rg | rg t |  | d d d t j d  S| S)N	refreshedTtimeout)rF   rG   time	cache_setr   COMPRESS_MINT_DELAY)r   
packed_valvalrefresh_timerY   r   r   r   	cache_get   s    
ra   Fc             C   sW   | d  k r t  j } n  | t j   } | t  j } | | | f } t j |  | |  S)N)r   ZCOMPRESS_REBUILD_TIMEOUTr[   r]   rF   rI   )r   r_   rY   rZ   r`   Zreal_timeoutr^   r   r   r   r\      s    r\   c               C   s   t  t j S)N)r   r   ZCOMPRESS_CACHE_BACKENDr   r   r   r   <lambda>   s    rb   )+r4   r   r+   r   r[   	importlibr   Zdjango.core.cacher   Zdjango.core.files.baser   Zdjango.utils.encodingr   r   Zdjango.utils.functionalr   Zcompressor.confr   Zcompressor.storager	   Zcompressor.utilsr
   r   r   r   r   r#   r%   r&   r(   r/   r1   r9   r:   rB   rE   rK   rQ   rT   rX   ra   r\   rF   r   r   r   r   <module>   sB   		