ó
P'—^c           @   sª  d  d l  m Z m Z m Z d d l Z d d l m Z d d l m Z d e f d „  ƒ  YZ	 d „  Z
 d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d „ Z d e f d „  ƒ  YZ y d d l m Z Wn e k
 rn Xe d e d d ƒ e ƒ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ y d d l m Z Wn e k
 rwn Xe d d d ƒe ƒ Z d  e f d! „  ƒ  YZ d S("   i   (   t   get_singletont	   get_cachet   sanitize_cache_keyiÿÿÿÿN(   t   copy(   t   ImproperlyConfiguredt   CacheFileStatec           B   s   e  Z d  Z d Z d Z RS(   t   existst
   generatingt   does_not_exist(   t   __name__t
   __module__t   EXISTSt
   GENERATINGt   DOES_NOT_EXIST(    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR      s   c          C   s    d d l  m }  t |  j d ƒ S(   s(   
    Get the default file backend.

    iÿÿÿÿ(   t   settingss   file backend(   t   django.confR   R    t"   IMAGEKIT_DEFAULT_CACHEFILE_BACKEND(   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   get_default_cachefile_backend   s    	t   InvalidFileBackendErrorc           B   s   e  Z RS(    (   R	   R
   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR      s   t   AbstractCacheFileBackendc           B   s#   e  Z d  Z e d „ Z d „  Z RS(   sØ   
    An abstract cache file backend. This isn't used by any internal classes and
    is included simply to illustrate the minimum interface of a cache file
    backend for users who wish to implement their own.

    c         C   s
   t  ‚ d  S(   N(   t   NotImplementedError(   t   selft   filet   force(    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   generate"   s    c         C   s
   t  ‚ d  S(   N(   R   (   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   %   s    (   R	   R
   t   __doc__t   FalseR   R   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR      s   t   CachedFileBackendc           B   se   e  Z d  Z e d „  ƒ Z d „  Z e d „ Z d „  Z d „  Z	 d „  Z
 e d „ Z e d „ Z RS(	   i   c         C   s>   t  |  d d  ƒ s7 d d l m } t | j ƒ |  _ n  |  j S(   Nt   _cacheiÿÿÿÿ(   R   (   t   getattrt   NoneR   R   R   t   IMAGEKIT_CACHE_BACKENDR   (   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   cache4   s    c         C   s*   d d l  m } t d | j | j f ƒ S(   Niÿÿÿÿ(   R   s
   %s%s-state(   R   R   R   t   IMAGEKIT_CACHE_PREFIXt   name(   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   get_key;   s    c         C   sq   |  j  | ƒ } |  j j | ƒ } | d  k rm | rm |  j | ƒ } | rQ t j n t j } |  j | | ƒ n  | S(   N(	   R#   R    t   getR   t   _existsR   R   R   t	   set_state(   R   R   t   check_if_unknownt   keyt   stateR   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt	   get_state@   s    c         C   sQ   |  j  | ƒ } | t j k r: |  j j | | |  j ƒ n |  j j | | ƒ d  S(   N(   R#   R   R   R    t   sett   existence_check_timeout(   R   R   R)   R(   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR&   I   s    c         C   s#   t  |  j ƒ } | j d d  ƒ | S(   NR   (   R   t   __dict__t   popR   (   R   R)   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   __getstate__P   s    c         C   s   |  j  | ƒ t j k S(   N(   R*   R   R   (   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   W   s    c         C   s
   t  ‚ d  S(   N(   R   (   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   Z   s    c         C   sh   | s' |  j  | ƒ t j t j f k rd |  j | t j ƒ | j ƒ  |  j | t j ƒ | j ƒ  n  d  S(   N(   R*   R   R   R   R&   t	   _generatet   close(   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   generate_now]   s
    '
(   R	   R
   R,   t   propertyR    R#   t   TrueR*   R&   R/   R   R   R   R2   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   )   s   
					t   Simplec           B   s#   e  Z d  Z e d „ Z d „  Z RS(   s‚   
    The most basic file backend. The storage is consulted to see if the file
    exists. Files are generated synchronously.

    c         C   s   |  j  | d | ƒd  S(   NR   (   R2   (   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   l   s    c         C   s+   t  t | d d  ƒ p' | j j | j ƒ ƒ S(   Nt   _file(   t   boolR   R   t   storageR   R"   (   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR%   o   s    (   R	   R
   R   R   R   R%   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR5   e   s   c         C   s   |  j  | d | ƒd  S(   NR   (   R2   (   t   backendR   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   _generate_filet   s    t	   BaseAsyncc           B   s,   e  Z d  Z e Z e d „ Z e d „ Z RS(   sP   
    Base class for cache file backends that generate files asynchronously.
    c         C   sG   |  j  | d t ƒ} | t j t j f k rC |  j | d | ƒn  d  S(   NR'   R   (   R*   R   R   R   R   t   schedule_generation(   R   R   R   R)   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR   ~   s    c         C   s
   t  ‚ d  S(   N(   R   (   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR<   ˆ   s    (   R	   R
   R   R4   t   is_asyncR   R   R<   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR;   x   s   
(   t   taskt   ignore_resultt
   serializert   picklet   Celeryc           B   s#   e  Z d  Z d „  Z e d „ Z RS(   s<   
    A backend that uses Celery to generate the images.
    c         O   sM   y d d  l  } Wn t k
 r/ t d ƒ ‚ n Xt t |  ƒ j | | Ž  d  S(   NiÿÿÿÿsC   You must install celery to use imagekit.cachefiles.backends.Celery.(   t   celeryt   ImportErrorR   t   superRB   t   __init__(   R   t   argst   kwargsRC   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRF   š   s
    c         C   s   t  j |  | d | ƒd  S(   NR   (   t   _celery_taskt   delay(   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR<   ¢   s    (   R	   R
   R   RF   R   R<   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRB   –   s   	t   Asyncc           B   s   e  Z d  „  Z RS(   c         O   s?   d } t  j | j d t ƒ t ƒ t t |  ƒ j | | Ž  d  S(   Ns6   {path}.Async is deprecated. Use {path}.Celery instead.t   path(   t   warningst   warnt   formatR	   t   DeprecationWarningRE   RK   RF   (   R   RG   RH   t   message(    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRF   ¨   s    (   R	   R
   RF   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRK   §   s   (   t   jobt   defaultt
   result_ttli    t   RQc           B   s#   e  Z d  Z d „  Z e d „ Z RS(   s8   
    A backend that uses RQ to generate the images.
    c         O   sM   y d d  l  } Wn t k
 r/ t d ƒ ‚ n Xt t |  ƒ j | | Ž  d  S(   NiÿÿÿÿsB   You must install django-rq to use imagekit.cachefiles.backends.RQ.(   t	   django_rqRD   R   RE   RU   RF   (   R   RG   RH   RV   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRF   º   s
    c         C   s   t  j |  | d | ƒd  S(   NR   (   t   _rq_jobRJ   (   R   R   R   (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyR<   Â   s    (   R	   R
   R   RF   R   R<   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyRU   ¶   s   	(   t   utilsR    R   R   RM   R   t   django.core.exceptionsR   t   objectR   R   R   R   R   R5   R   R:   R;   RC   R>   RD   R4   RI   RB   RK   RV   RR   RW   RU   (    (    (    s>   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/cachefiles/backends.pyt   <module>   s0   	
<