3
v^                 @   sP   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)is_iterablec               @   s8   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S )Tagsz,
    Built-in tags for internal checks.
    admincachescompatibilitydatabasemodelssecuritysignals	templatestranslationurlsN)__name__
__module____qualname____doc__r   r   r   r   r	   r
   r   r   r   r    r   r   ?/usr/lib/python3.6/site-packages/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(apps, **kwargs):
                # ... perform checks and collect `errors` ...
                return errors
            # or
            registry.register(my_check, 'mytag', 'anothertag')
        c                s*   | _  jdrjnj}|j|  | S )NZdeploy)tagsgetr   r   add)checkchecks)kwargsr   r   r   r   inner,   s    
z%CheckRegistry.register.<locals>.innerN)callable)r   r   r   r    r!   r   )r    r   r   r   register   s    
zCheckRegistry.registerFc                sr   g }| j |} dk	r* fdd|D }ndd |D }x4|D ],}||d}t|s`td| |j| q>W |S )zS
        Run all registered checks and return list of Errors and Warnings.
        Nc                s    g | ]}t |jj s|qS r   )r   r   
isdisjoint).0r   )r   r   r   
<listcomp>A   s    z,CheckRegistry.run_checks.<locals>.<listcomp>c             S   s   g | ]}t j|jkr|qS r   )r   r   r   )r%   r   r   r   r   r&   E   s    )app_configszlThe function %r did not return a list. All functions registered with the checks registry must return a list.)
get_checksr   AssertionErrorextend)r   r'   r   include_deployment_checkserrorsr   r   Z
new_errorsr   )r   r   
run_checks9   s    



zCheckRegistry.run_checksc             C   s   || j |kS )N)tags_available)r   tagr+   r   r   r   
tag_existsO   s    zCheckRegistry.tag_existsc             C   s   t tjdd | j|D S )Nc             s   s   | ]}|j V  qd S )N)r   )r%   r   r   r   r   	<genexpr>T   s    z/CheckRegistry.tags_available.<locals>.<genexpr>)r   r   from_iterabler(   )r   r   r   r   r   r.   R   s    zCheckRegistry.tags_availablec             C   s   t | j}|r|j| j |S )N)listr   r*   r   )r   r+   r   r   r   r   r(   W   s    
zCheckRegistry.get_checks)N)NNF)F)F)F)	r   r   r   r   r#   r-   r0   r.   r(   r   r   r   r   r      s   



r   N)
	itertoolsr   Zdjango.utils.itercompatr   r   r   registryr#   r-   r0   r   r   r   r   <module>   s   H