î
ÒáôW  ã               @   s„   d  d l  m Z d  d l m Z d  d l m Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z e ƒ  Z	 e	 j
 Z
 e	 j Z e	 j Z d S)	é    )Úunicode_literals)Úchain)Úis_iterablec               @   sF   e  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ÚmodelsÚsecurityÚsignalsÚ	templatesÚurlsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r	   r
   r   r   r   © r   r   ú=/tmp/pip-build-5ouued3s/Django/django/core/checks/registry.pyr   	   s   r   c               @   sm   e  Z d  Z d d „  Z d d d „ Z d d d d d „ Z d d	 d
 „ Z d d d „ Z d d d „ Z d S)ÚCheckRegistryc             C   s   g  |  _  g  |  _ d  S)N)Úregistered_checksÚdeployment_checks)Úselfr   r   r   Ú__init__   s    	zCheckRegistry.__init__Nc                s\   ˆ  j  d d ƒ ‡  ‡ ‡ f d d †  } t | ƒ r> | | ƒ S| rT ˆ | f 7‰ n  | Sd 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')
        ÚdeployFc                s^   ˆ |  _  ˆ  d r8 |  ˆ j k rZ ˆ j j |  ƒ qZ n" |  ˆ j k rZ ˆ j j |  ƒ n  |  S)Nr   )Útagsr   Úappendr   )Úcheck)Úkwargsr   r   r   r   Úinner/   s    	
z%CheckRegistry.register.<locals>.innerN)Ú
setdefaultÚcallable)r   r   r   r   r   r   )r   r   r   r   Úregister   s    	
zCheckRegistry.registerFc                sŠ   g  } |  j  | ƒ } ˆ  d k	 r= ‡  f d d †  | Dƒ } n  xF | D]> } | d | ƒ } t | ƒ su t d | ƒ ‚ | j | ƒ qD W| S)zS
        Run all registered checks and return list of Errors and Warnings.
        Nc                s>   g  |  ]4 } t  | d  ƒ r t | j ƒ t ˆ  ƒ @r | ‘ q S)r   )ÚhasattrÚsetr   )Ú.0r   )r   r   r   ú
<listcomp>G   s   	 z,CheckRegistry.run_checks.<locals>.<listcomp>Ú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ÚerrorsÚchecksr   Z
new_errorsr   )r   r   Ú
run_checks?   s    
zCheckRegistry.run_checksc             C   s   | |  j  | ƒ k S)N)Útags_available)r   Útagr*   r   r   r   Ú
tag_existsR   s    zCheckRegistry.tag_existsc             C   s&   t  t d d „  |  j | ƒ Dƒ Œ  ƒ S)Nc             S   s(   g  |  ] } t  | d  ƒ r | j ‘ q S)r   )r"   r   )r$   r   r   r   r   r%   V   s   	 z0CheckRegistry.tags_available.<locals>.<listcomp>)r#   r   r'   )r   r   r   r   r   r.   U   s    zCheckRegistry.tags_availablec             C   s,   t  |  j ƒ } | r( | j |  j ƒ n  | S)N)Úlistr   r)   r   )r   r*   r,   r   r   r   r'   X   s    zCheckRegistry.get_checks)	r   r   r   r   r!   r-   r0   r.   r'   r   r   r   r   r      s   "r   N)Ú
__future__r   Ú	itertoolsr   Zdjango.utils.itercompatr   Úobjectr   r   Úregistryr!   r-   r0   r   r   r   r   Ú<module>   s   H			