o
    `oi                     @   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   Y/var/www/html/kuke-dev/django-kuke/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	generatorZ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 )NZon_content_required_receiver   senderfiler   r   r   r   r   1      z+GeneratorRegistry.content_required_receiverc                 K   r    )NZ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.

    Z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.sourcegroupsr4   r/   
setdefaultsetaddcachefile_registryr   r   generator_idsource_groupr4   Z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 r3   )r5   r4   r/   r6   r7   remover9   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   r?   r   r   
<listcomp>n   s    z=SourceGroupRegistry.source_group_receiver.<locals>.<listcomp>)
cachefilesr>   r/   r0   r   )r   r$   r@   r2   r   r>   r<   specsZcallback_namespecr%   r   r?   r   r1   b   s   


z)SourceGroupRegistry.source_group_receiverN)
r*   r+   r,   r-   r   r0   r   r   r   r1   r   r   r   r   r.   @   s    
r.   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)rH   r7   r8   r   r;   rD   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)rH   r=   r   rI   r   r   r   r      s
   zCacheFileRegistry.unregisterc                 c   s.    | j  D ]\}}||v r| E d H  qd S r
   )rH   items)r   r;   kvr   r   r   r      s   zCacheFileRegistry.getN)r*   r+   r,   r-   r   r   r   r   r   r   r   r   rG   w   s    
	
rG   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)rA   r   )r   r   r   rP   r   rO   r   r      s   zRegister.generatorc                 C      t || d S r
   )r9   r   rI   r   r   r   rD      r&   zRegister.cachefilesc                 C   rQ   r
   )source_group_registryr   r   r;   r<   r   r   r   r<      r&   zRegister.source_groupr
   r*   r+   r,   r-   r   rD   r<   r   r   r   r   rM      s
    
rM   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
   )rA   r   r   r   r   r   r      s   zUnregister.generatorc                 C   rQ   r
   )r9   r   rI   r   r   r   rD      r&   zUnregister.cachefilesc                 C   rQ   r
   )rR   r   rS   r   r   r   r<      r&   zUnregister.source_groupNrT   r   r   r   r   rU      s
    rU   N)
exceptionsr   r   Zsignalsr   r   r   utilsr   r   r	   r.   rG   rM   rU   rA   r9   rR   r   r   r   r   r   r   <module>   s    :7'
