ó
P'—^c           @  sO  d  d l  m 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 d  d l m Z y d  d l m Z Wn! e k
 r¯ d  d l m Z n Xd  d	 l Td
 d l m Z m Z e j d ƒ Z e a d „  Z d „  Z i  a d „  Z d „  Z d e d „ Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d S(   iÿÿÿÿ(   t   unicode_literalsN(   t   NamedTemporaryFile(   t   md5(   t   settings(   t   ImproperlyConfigured(   t   File(   t   import_module(   t   *i   (   t   NullHandlert   force_bytesu   [ -\s]+c         c  sK   |  j  j s |  Vn  x0 |  j ƒ  D]" } x t | ƒ D] } | Vq4 Wq! Wd S(   u4    Returns all non-abstract descendants of the model. N(   t   _metat   abstractt   __subclasses__t   get_nonabstract_descendants(   t   modelt   st   m(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyR      s
    c         C  sï   y |  j  d ƒ } Wn' t k
 r< t d |  | f ƒ ‚ n X|  |  |  | d } } y t | ƒ } Wn, t k
 r” } t d | | | f ƒ ‚ n Xy t | | ƒ } | SWn< t k
 rê t d | d j ƒ  | d | | f ƒ ‚ n Xd  S(   Nu   .u   %s isn't a %s module.i   u"   Error importing %s module %s: "%s"u#   %s module "%s" does not define "%s"i    (   t   rindext
   ValueErrorR   R   t   ImportErrort   getattrt   AttributeErrort   upper(   t   patht   desct   dott   modulet   objnamet   modt   et   obj(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   get_by_qname   s     c         C  s<   t  |  | ƒ } t j | ƒ } | s8 | ƒ  } t | <n  | S(   N(   R   t   _singletonst   get(   t
   class_pathR   t   clst   instance(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   get_singleton5   s
    c          C  sÕ   t  r
 d Sd d l m }  y d d l m } Wn! t k
 rQ d d l m } n Xd d l m } t	 a  xf |  j
 D][ } yA | | ƒ } y | d | ƒ Wn | | d ƒ r¸ ‚  q¸ n XWqr t k
 rÌ qr Xqr Wd S(   uÛ   
    Auto-discover INSTALLED_APPS imagegenerators.py modules and fail silently
    when not present. This forces an import on them to register any admin bits
    they may want.

    Copied from django.contrib.admin
    Niÿÿÿÿ(   R   (   R   (   t   module_has_submoduleu   %s.imagegeneratorsu   imagegenerators(   t   _autodiscoveredt   django.confR   t	   importlibR   R   t   django.utils.importlibt   django.utils.module_loadingR&   t   Truet   INSTALLED_APPS(   R   R   R&   t   appR   (    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   autodiscover>   s&    
u   imagekitc         C  s,   t  j |  ƒ } | r( | j t ƒ  ƒ n  | S(   N(   t   loggingt	   getLoggert
   addHandlerR   (   t   logger_namet   add_null_handlert   logger(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt
   get_loggerf   s    c         C  s.   t  |  d d ƒ t  t  |  d d ƒ d d ƒ f S(   u
  
    A utility for easily extracting information about the host model from a
    Django FileField (or subclass). This is especially useful for when you want
    to alter processors based on a property of the source model. For example::

        class MySpec(ImageSpec):
            def __init__(self, source):
                instance, attname = get_field_info(source)
                self.processors = [SmartResize(instance.thumbnail_width,
                                               instance.thumbnail_height)]

    u   instanceu   fieldu   attnameN(   R   t   None(   t
   field_file(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   get_field_infom   s    c         C  sZ   |  j  ƒ  } t | d d ƒ sP t ƒ  } | j | j ƒ  ƒ | j d ƒ | } n  t | ƒ S(   u™   
    Calls the ``generate()`` method of a generator instance, and then wraps the
    result in a Django File object so Django knows how to save it.

    u   namei    N(   t   generateR   R7   R   t   writet   readt   seekR   (   t	   generatort   contentt   f(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyR:   €   s    		c         C  sA   t  |  d d  ƒ } t  | | d  ƒ } | d  k	 r= | |  ƒ n  d  S(   Nu   cachefile_strategy(   R   R7   (   t   filet   method_namet   strategyt   fn(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   call_strategy_method“   s    c         K  sJ   y d d l  m } Wn+ t k
 rA d d l  m } | |  |  SX| |  S(   Niÿÿÿÿ(   t   caches(   t	   get_cache(   t   django.core.cacheRF   R   RG   (   t   backendt   kwargsRF   RG   (    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyRG   š   s    c         C  sc   t  j r_ t j d |  ƒ } t | ƒ d k rV d | d  t t |  ƒ ƒ j ƒ  f } n  | }  n  |  S(   Nu    iÈ   u   %s:%si!   i§   (   R   t%   IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEYt   bad_memcached_key_charst   subt   lenR   R	   t	   hexdigest(   t   keyt   new_key(    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   sanitize_cache_key¤   s    	)	(&   t
   __future__R    R0   t   ret   tempfileR   t   hashlibR   R(   R   t   django.core.exceptionsR   t   django.core.filesR   R)   R   R   R*   t   pilkit.utilst   libR   R	   t   compileRL   t   FalseR'   R   R   R    R%   R/   R,   R6   R9   R:   RE   RG   RR   (    (    (    s0   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/utils.pyt   <module>   s4   
						(				
