o
    vh                     @   s   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 dZ
G dd dZG dd	 d	ZG d
d dZG dd dZe
 Ze Ze Ze Ze ZdS )   )AlreadyRegisteredNotRegistered)content_requiredexistence_requiredsource_saved)autodiscovercall_strategy_methodc                   @   sP   e Zd ZdZ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S )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                 C   s"   i | _ t| j t| j d S N)_generatorsr   connectcontent_required_receiverr   existence_required_receiverself r   O/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/imagekit/registry.py__init__   s   zGeneratorRegistry.__init__c                 C   s8   | j |}|r|| j | krtd| || j |< d S )Nz.The generator with id %s is already registered)r   getr   )r   id	generatorregistered_generatorr   r   r   register   s   zGeneratorRegistry.registerc                 C   s*   z| j |= W d S  ty   td| w )N*The generator with id %s is not registered)r   KeyErrorr   r   r   r   r   r   
unregister   s   zGeneratorRegistry.unregisterc                 K   sJ   t   z| j| }W n ty   td| w t|r#|di |S |S )Nr   r   )r   r   r   r   callable)r   r   kwargsr   r   r   r   r       s   zGeneratorRegistry.getc                 C   s   t   | j S r
   )r   r   keysr   r   r   r   get_ids-   s   
zGeneratorRegistry.get_idsc                 K      |  |d d S )Non_content_required_receiver   senderfiler   r   r   r   r   1      z+GeneratorRegistry.content_required_receiverc                 K   r!   )Non_existence_requiredr#   r%   r   r   r   r   4   r(   z-GeneratorRegistry.existence_required_receiverc                 C   s(   |j }|j| j v rt|| d S d S r
   )r   	__class__r   valuesr   )r   r'   callbackr   r   r   r   r$   7   s   zGeneratorRegistry._receiveN)__name__
__module____qualname____doc__r   r   r   r   r    r   r   r$   r   r   r   r   r	      s    r	   c                   @   s8   e Zd ZdZediZdd Zdd Zdd Zd	d
 Z	dS )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                 C   s&   i | _ | j D ]}|| j qd S r
   )_source_groups_signalsr   r   source_group_receiver)r   signalr   r   r   r   N   s   zSourceGroupRegistry.__init__c                 C   s<   ddl m} | j|t }|| t|||| d S Nr   )SourceGroupFilesGenerator)specs.sourcegroupsr8   r3   
setdefaultsetaddcachefile_registryr   r   generator_idsource_groupr8   generator_idsr   r   r   r   S   s   
zSourceGroupRegistry.registerc                 C   sH   ddl m} | j|t }||v r"|| t|||| d S d S r7   )r9   r8   r3   r:   r;   remover=   r   r>   r   r   r   r   Z   s   
zSourceGroupRegistry.unregisterc                    s`   ddl m} |}|| jvrdS  fdd| j| D }| j| }|D ]}	||	}
t|
| q"dS )zO
        Relay source group signals to the appropriate spec strategy.

        r   )ImageCacheFileNc                    s   g | ]	}t j| d qS )source)generator_registryr   ).0r   rD   r   r   
<listcomp>n   s    z=SourceGroupRegistry.source_group_receiver.<locals>.<listcomp>)
cachefilesrC   r3   r4   r   )r   r&   rE   r6   r   rC   r@   specscallback_namespecr'   r   rD   r   r5   b   s   


z)SourceGroupRegistry.source_group_receiverN)
r-   r.   r/   r0   r   r4   r   r   r   r5   r   r   r   r   r1   @   s    
r1   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )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                 C   s
   i | _ d S r
   )_cachefilesr   r   r   r   r      s   
zCacheFileRegistry.__init__c                 C   s*   || j vrt | j |< | j | | dS )zA
        Associates generated files with a generator id

        N)rN   r;   r<   r   r?   rI   r   r   r   r      s   
zCacheFileRegistry.registerc                 C   s,   z| j | | W dS  ty   Y dS w )zD
        Disassociates generated files with a generator id

        N)rN   rB   r   rO   r   r   r   r      s
   zCacheFileRegistry.unregisterc                 c   s.    | j  D ]\}}||v r| E d H  qd S r
   )rN   items)r   r?   kvr   r   r   r      s   zCacheFileRegistry.getN)r-   r.   r/   r0   r   r   r   r   r   r   r   r   rM   w   s    
	
rM   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
Registerz3
    Register generators and generated files.

    Nc                    s*   |d u r fdd}|S t  | d S )Nc                    s     |  | S r
   )r   )clsr   r   r   r   	decorator   s   z%Register.generator.<locals>.decorator)rF   r   )r   r   r   rV   r   rU   r   r      s   zRegister.generatorc                 C      t || d S r
   )r=   r   rO   r   r   r   rI      r(   zRegister.cachefilesc                 C   rW   r
   )source_group_registryr   r   r?   r@   r   r   r   r@      r(   zRegister.source_groupr
   r-   r.   r/   r0   r   rI   r@   r   r   r   r   rS      s
    
rS   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	
Unregisterz5
    Unregister generators and generated files.

    c                 C   s   t | d S r
   )rF   r   r   r   r   r   r      s   zUnregister.generatorc                 C   rW   r
   )r=   r   rO   r   r   r   rI      r(   zUnregister.cachefilesc                 C   rW   r
   )rX   r   rY   r   r   r   r@      r(   zUnregister.source_groupNrZ   r   r   r   r   r[      s
    r[   N)
exceptionsr   r   signalsr   r   r   utilsr   r   r	   r1   rM   rS   r[   rF   r=   rX   r   r   r   r   r   r   <module>   s    :7'
