
    3~h                         d dl mZmZ d dlmZmZmZ d dlmZm	Z	  G d d      Z
 G d d      Z G d d	      Z G d
 d      Z G d d      Z e
       Z e       Z e       Z e       Z e       Zy)   )AlreadyRegisteredNotRegistered)content_requiredexistence_requiredsource_saved)autodiscovercall_strategy_methodc                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)GeneratorRegistryz
    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                     i | _         t        j                  | j                         t	        j                  | j
                         y N)_generatorsr   connectcontent_required_receiverr   existence_required_receiverselfs    Z/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/imagekit/registry.py__init__zGeneratorRegistry.__init__   s2      !?!?@""4#C#CD    c                     | j                   j                  |      }|r || j                   |   k7  rt        d|z        || j                   |<   y )Nz.The generator with id %s is already registered)r   getr   )r   id	generatorregistered_generators       r   registerzGeneratorRegistry.register   sZ    #//33B7I1A1A"1E$E# %:<>%? @ @(r   c                 V    	 | j                   |= y # t        $ r t        d|z        w xY w)N*The generator with id %s is not registered)r   KeyErrorr   r   r   s     r   
unregisterzGeneratorRegistry.unregister   s>    	4  $ 	4 !.02!3 4 4	4s    (c                     t                	 | j                  |   }t	        |      r |di |S |S # t        $ r t        d|z        w xY w)Nr    )r   r   r   r   callable)r   r   kwargsr   s       r   r   zGeneratorRegistry.get    se    	4((,I I&v&&  	4 !.02!3 4 4	4s	   0 Ac                 J    t                | j                  j                         S r   )r   r   keysr   s    r   get_idszGeneratorRegistry.get_ids-   s    $$&&r   c                 (    | j                  |d       y )Non_content_required_receiver   senderfiler%   s       r   r   z+GeneratorRegistry.content_required_receiver1   s    d12r   c                 (    | j                  |d       y )Non_existence_requiredr+   r-   s       r   r   z-GeneratorRegistry.existence_required_receiver4   s    d34r   c                     |j                   }|j                  | j                  j                         v rt	        ||       y y r   )r   	__class__r   valuesr	   )r   r/   callbackr   s       r   r,   zGeneratorRegistry._receive7   s9    NN	 $"2"2"9"9";; x0 <r   N)__name__
__module____qualname____doc__r   r   r!   r   r(   r   r   r,   r#   r   r   r   r      s0    E
)4'351r   r   c                   0    e Zd ZdZediZd Zd Zd Zd Z	y)SourceGroupRegistrya3  
    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.

    on_source_savedc                     i | _         | j                  j                         D ]  }|j                  | j                          y r   )_source_groups_signalsr'   r   source_group_receiver)r   signals     r   r   zSourceGroupRegistry.__init__N   s8     mm((* 	7FNN4556	7r   c                     ddl m} | j                  j                  |t	                     }|j                  |       t        j                  | |||             y Nr   )SourceGroupFilesGenerator)specs.sourcegroupsrD   r>   
setdefaultsetaddcachefile_registryr   r   generator_idsource_grouprD   generator_idss        r   r   zSourceGroupRegistry.registerS   sH    A++66|SUK,'##L),E	Gr   c                     ddl m} | j                  j                  |t	                     }||v r/|j                  |       t        j                  | |||             y y rC   )rE   rD   r>   rF   rG   removerI   r!   rJ   s        r   r!   zSourceGroupRegistry.unregisterZ   sU    A++66|SUK=(  .)),-lLIK )r   c                     ddl m} |}|| j                  vry| j                  |   D cg c]  }t        j	                  ||       }}| j
                  |   }	|D ]  }
 ||
      }t        ||	        yc c}w )zO
        Relay source group signals to the appropriate spec strategy.

        r   )ImageCacheFileN)source)
cachefilesrQ   r>   generator_registryr   r?   r	   )r   r.   rR   rA   r%   rQ   rL   r   specscallback_namespecr/   s               r   r@   z)SourceGroupRegistry.source_group_receiverb   s    
 	/ t222 ##L13r#''6': 3 3f- 	6D!$'D }5	6	3s   A4N)
r6   r7   r8   r9   r   r?   r   r   r!   r@   r#   r   r   r;   r;   @   s,     	'H7
GK6r   r;   c                   (    e Zd ZdZd Zd Zd Zd Zy)CacheFileRegistrya  
    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                     i | _         y r   )_cachefilesr   s    r   r   zCacheFileRegistry.__init__   s
    r   c                     || j                   vrt               | j                   |<   | j                   |   j                  |       y)zA
        Associates generated files with a generator id

        N)r[   rG   rH   r   rK   rS   s      r   r   zCacheFileRegistry.register   s=    
 T---+.5DZ($((6r   c                 `    	 | j                   |   j                  |       y# t        $ r Y yw xY w)zD
        Disassociates generated files with a generator id

        N)r[   rO   r   r]   s      r   r!   zCacheFileRegistry.unregister   s2    
	Z(//= 		s   ! 	--c              #   |   K   | j                   j                         D ]  \  }}||v s |       E d {     y 7 wr   )r[   items)r   rK   kvs       r   r   zCacheFileRegistry.get   s<     $$**, 	DAqq 3	s   %<
<:<N)r6   r7   r8   r9   r   r   r!   r   r#   r   r   rY   rY   w   s    7r   rY   c                   $    e Zd ZdZddZd Zd Zy)Registerz3
    Register generators and generated files.

    Nc                 H     | fd}|S t         j                  |       y )Nc                 ,    j                  |        | S r   )r   )clsr   r   s    r   	decoratorz%Register.generator.<locals>.decorator   s    r3'
r   )rT   r   )r   r   r   rh   s   ``  r   r   zRegister.generator   s&     ##B	2r   c                 0    t         j                  ||       y r   )rI   r   r]   s      r   rS   zRegister.cachefiles   s    ##L*=r   c                 0    t         j                  ||       y r   )source_group_registryr   r   rK   rL   s      r   rL   zRegister.source_group   s    &&|\Br   r   r6   r7   r8   r9   r   rS   rL   r#   r   r   rd   rd      s    3>Cr   rd   c                   "    e Zd ZdZd Zd Zd Zy)
Unregisterz5
    Unregister generators and generated files.

    c                 .    t         j                  |       y r   )rT   r!   r    s     r   r   zUnregister.generator   s    %%b)r   c                 0    t         j                  ||       y r   )rI   r!   r]   s      r   rS   zUnregister.cachefiles   s    %%lJ?r   c                 0    t         j                  ||       y r   )rk   r!   rl   s      r   rL   zUnregister.source_group   s    ((|Dr   Nrm   r#   r   r   ro   ro      s    *@Er   ro   N)
exceptionsr   r   signalsr   r   r   utilsr   r	   r   r;   rY   rd   ro   rT   rI   rk   r   r!   r#   r   r   <module>rv      su    8 G G 571 71t46 46n$ $NC C.E E '( &( +- :\
r   