σ
P'^c           @   sη   d  d l  m Z m Z d  d l m Z m Z m Z d  d l m Z m	 Z	 d e
 f d     YZ d e
 f d     YZ d e
 f d	     YZ d
 e
 f d     YZ d e
 f d     YZ e   Z e   Z e   Z e   Z e   Z d S(   i   (   t   AlreadyRegisteredt   NotRegistered(   t   content_requiredt   existence_requiredt   source_saved(   t   autodiscovert   call_strategy_methodt   GeneratorRegistryc           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   sΓ   
    An object for registering generators. This registry provides
    a convenient way for a distributable app to define default generators
    without locking the users of the app into it.

    c         C   s-   i  |  _  t j |  j  t j |  j  d  S(   N(   t   _generatorsR   t   connectt   content_required_receiverR   t   existence_required_receiver(   t   self(    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt   __init__   s    	c         C   sO   |  j  j |  } | r> | |  j  | k r> t d |   n  | |  j  | <d  S(   Ns.   The generator with id %s is already registered(   R   t   getR    (   R   t   idt	   generatort   registered_generator(    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt   register   s
    c         C   s6   y |  j  | =Wn! t k
 r1 t d |   n Xd  S(   Ns*   The generator with id %s is not registered(   R   t   KeyErrorR   (   R   R   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt
   unregister   s
    c         K   sZ   t    y |  j | } Wn! t k
 r; t d |   n Xt |  rR | |   S| Sd  S(   Ns*   The generator with id %s is not registered(   R   R   R   R   t   callable(   R   R   t   kwargsR   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR       s    
c         C   s   t    |  j j   S(   N(   R   R   t   keys(   R   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt   get_ids-   s    c         K   s   |  j  | d  d  S(   Nt   on_content_required(   t   _receive(   R   t   sendert   fileR   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR
   1   s    c         K   s   |  j  | d  d  S(   Nt   on_existence_required(   R   (   R   R   R   R   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   4   s    c         C   s5   | j  } | j |  j j   k r1 t | |  n  d  S(   N(   R   t	   __class__R   t   valuesR   (   R   R   t   callbackR   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   7   s    	(   t   __name__t
   __module__t   __doc__R   R   R   R   R   R
   R   R   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR      s   							t   SourceGroupRegistryc           B   s?   e  Z d  Z i d e 6Z d   Z d   Z d   Z d   Z RS(   s3  
    The source group registry is responsible for listening to source_* signals
    on source groups, and relaying them to the image generated file strategies
    of the appropriate generators.

    In addition, registering a new source group also registers its generated
    files with that registry.

    t   on_source_savedc         C   s7   i  |  _  x' |  j j   D] } | j |  j  q Wd  S(   N(   t   _source_groupst   _signalsR   R	   t   source_group_receiver(   R   t   signal(    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   N   s    	c         C   sR   d d l  m } |  j j | t    } | j |  t j | | | |   d  S(   Ni   (   t   SourceGroupFilesGenerator(   t   specs.sourcegroupsR*   R&   t
   setdefaultt   sett   addt   cachefile_registryR   (   R   t   generator_idt   source_groupR*   t   generator_ids(    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   S   s
    	c         C   sa   d d l  m } |  j j | t    } | | k r] | j |  t j | | | |   n  d  S(   Ni   (   R*   (   R+   R*   R&   R,   R-   t   removeR/   R   (   R   R0   R1   R*   R2   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   Z   s    	c         K   s   d d l  m } | } | |  j k r) d Sg  |  j | D] } t j | d | ^ q7 } |  j | }	 x' | D] }
 | |
  } t | |	  ql Wd S(   sO   
        Relay source group signals to the appropriate spec strategy.

        i   (   t   ImageCacheFileNt   source(   t
   cachefilesR4   R&   t   generator_registryR   R'   R   (   R   R   R5   R)   R   R4   R1   R   t   specst   callback_namet   specR   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR(   b   s    ,(	   R!   R"   R#   R   R'   R   R   R   R(   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR$   @   s   	
			t   CacheFileRegistryc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   sΞ  
    An object for registering generated files with image generators. The two are
    associated with each other via a string id. We do this (as opposed to
    associating them directly by, for example, putting a ``cachefiles``
    attribute on image generators) so that image generators can be overridden
    without losing the associated files. That way, a distributable app can
    define its own generators without locking the users of the app into it.

    c         C   s   i  |  _  d  S(   N(   t   _cachefiles(   R   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR      s    c         C   s:   | |  j  k r" t   |  j  | <n  |  j  | j |  d S(   sA   
        Associates generated files with a generator id

        N(   R<   R-   R.   (   R   R0   R6   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR      s    c         C   s0   y |  j  | j |  Wn t k
 r+ n Xd S(   sD   
        Disassociates generated files with a generator id

        N(   R<   R3   R   (   R   R0   R6   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR      s    c         c   sL   xE |  j  j   D]4 \ } } | | k r x |   D] } | Vq2 Wq q Wd  S(   N(   R<   t   items(   R   R0   t   kt   vR   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR      s    (   R!   R"   R#   R   R   R   R   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR;   w   s
   					
t   Registerc           B   s,   e  Z d  Z d d  Z d   Z d   Z RS(   s3   
    Register generators and generated files.

    c            s6   | d  k r"    f d   } | St j   |  d  S(   Nc            s    j    |   |  S(   N(   R   (   t   cls(   R   R   (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt	   decorator§   s    (   t   NoneR7   R   (   R   R   R   RB   (    (   R   R   s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   €   s    c         C   s   t  j | |  d  S(   N(   R/   R   (   R   R0   R6   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR6   ―   s    c         C   s   t  j | |  d  S(   N(   t   source_group_registryR   (   R   R0   R1   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR1   ²   s    N(   R!   R"   R#   RC   R   R6   R1   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR@      s   	t
   Unregisterc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s5   
    Unregister generators and generated files.

    c         C   s   t  j |  d  S(   N(   R7   R   (   R   R   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR   »   s    c         C   s   t  j | |  d  S(   N(   R/   R   (   R   R0   R6   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR6   Ύ   s    c         C   s   t  j | |  d  S(   N(   RD   R   (   R   R0   R1   (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyR1   Α   s    (   R!   R"   R#   R   R6   R1   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyRE   Ά   s   		N(   t
   exceptionsR    R   t   signalsR   R   R   t   utilsR   R   t   objectR   R$   R;   R@   RE   R7   R/   RD   R   R   (    (    (    s3   /tmp/pip-unpacked-wheel-XxTEJK/imagekit/registry.pyt   <module>   s   :7(				