U
    mf                     @   s\   d dl mZ d dlmZ d dlmZ G dd dZG dd dZe Zej	Z	ej
Z
ejZdS )	    )chain)func_accepts_kwargs)is_iterablec                   @   sH   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdS )Tagsz,
    Built-in tags for internal checks.
    adminasync_supportcachescompatibilitydatabasefilesmodelssecuritysignalssitesstaticfiles	templatestranslationurlsN)__name__
__module____qualname____doc__r   r   r   r	   r
   r   r   r   r   r   r   r   r   r    r   r   ?/tmp/pip-unpacked-wheel-siwebuq3/django/core/checks/registry.pyr      s   r   c                   @   sF   e Zd Zdd ZdddZdddZdd	d
ZdddZdddZdS )CheckRegistryc                 C   s   t  | _t  | _d S N)setregistered_checksdeployment_checks)selfr   r   r   __init__   s    zCheckRegistry.__init__Nc                    s6    fdd}t |r ||S |r.|f7 |S dS )a  
        Can be used as a function or a decorator. Register given function
        `f` labeled with given `tags`. The function should receive **kwargs
        and return list of Errors and Warnings.

        Example::

            registry = CheckRegistry()
            @registry.register('mytag', 'anothertag')
            def my_check(app_configs, **kwargs):
                # ... perform checks and collect `errors` ...
                return errors
            # or
            registry.register(my_check, 'mytag', 'anothertag')
        c                    s:   t | std| _ dr&jnj}||  | S )Nz9Check functions must accept keyword arguments (**kwargs).Zdeploy)r   	TypeErrortagsgetr   r   add)checkcheckskwargsr   r"   r   r   inner2   s    
z%CheckRegistry.register.<locals>.innerN)callable)r   r%   r"   r(   r)   r   r'   r   register!   s    
zCheckRegistry.registerFc           	         s`   g }|  |} dk	r( fdd|D }|D ].}|||d}t|sPtd| || q,|S )zS
        Run all registered checks and return list of Errors and Warnings.
        Nc                    s    g | ]}t |j s|qS r   )r   r"   
isdisjoint.0r%   r"   r   r   
<listcomp>U   s      z,CheckRegistry.run_checks.<locals>.<listcomp>)app_configs	databaseszlThe function %r did not return a list. All functions registered with the checks registry must return a list.)
get_checksr   r!   extend)	r   r1   r"   include_deployment_checksr2   errorsr&   r%   Z
new_errorsr   r/   r   
run_checksG   s    

zCheckRegistry.run_checksc                 C   s   ||  |kS r   )tags_available)r   tagr5   r   r   r   
tag_existsa   s    zCheckRegistry.tag_existsc                 C   s   t tdd | |D S )Nc                 s   s   | ]}|j V  qd S r   r/   r-   r   r   r   	<genexpr>f   s    z/CheckRegistry.tags_available.<locals>.<genexpr>)r   r   from_iterabler3   )r   r   r   r   r   r8   d   s
    
zCheckRegistry.tags_availablec                 C   s   t | j}|r|| j |S r   )listr   r4   r   )r   r5   r&   r   r   r   r3   k   s    
zCheckRegistry.get_checks)N)NNFN)F)F)F)	r   r   r   r    r+   r7   r:   r8   r3   r   r   r   r   r      s   
(    


r   N)	itertoolsr   Zdjango.utils.inspectr   Zdjango.utils.itercompatr   r   r   registryr+   r7   r:   r   r   r   r   <module>   s   V