
v^                 @   s   d  d l  m Z d  d l m Z d d l m Z m Z m Z m Z e e j	  d d    Z
 d d   Z e e j	  d	 d
    Z f  d d  Z d d   Z e e j	  d d    Z d d   Z d S)    )Counter)settings   )ErrorTagsWarningregisterc             K   s9   t  t d d   r5 d d l m } |   } t |  Sg  S)NROOT_URLCONFr   )get_resolver)getattrr   django.urlsr
   check_resolver)app_configskwargsr
   resolver r   9/tmp/pip-build-8lau8j11/django/django/core/checks/urls.pycheck_url_config   s
    	
r   c             C   sF   t  |  d d  } | d k	 r% |   St |  d  s> t |   Sg  Sd S)z)
    Recursively check the resolver.
    checkNresolve)r   hasattrget_warning_for_invalid_pattern)r   Zcheck_methodr   r   r   r      s    
r   c       	      K   s   t  t d d  s g  Sd d l m } |   } t |  } t |  } d d   | j   D } g  } x0 | D]( } | j t d j	 |  d d	  qm W| S)
zD
    Warn if URL namespaces used in applications aren't unique.
    r	   Nr   )r
   c             S   s(   g  |  ] \ } } | d  k r |  q S)r   r   ).0ncountr   r   r   
<listcomp>*   s   	 z/check_url_namespaces_unique.<locals>.<listcomp>zZURL namespace '{}' isn't unique. You may not be able to reverse all URLs in this namespaceidz	urls.W005)
r   r   r   r
   _load_all_namespacesr   itemsappendr   format)	r   r   r
   r   Zall_namespacescounterZnon_unique_namespaceserrors	namespacer   r   r   check_url_namespaces_unique   s    			r$   c                s   t  |  d g   }   f d d   | D } xU | D]M } t  | d d  }   } | d k	 ri | | f 7} | j t | |   q2 W| S)z<
    Recursively load all namespaces from URL patterns.
    url_patternsc                sA   g  |  ]7 } t  | d  d  d k	 r d j   | j f   q S)r#   N:)r   joinr#   )r   url)parentsr   r   r   ;   s   	 z(_load_all_namespaces.<locals>.<listcomp>r#   N)r   extendr   )r   r)   r%   
namespacespatternr#   currentr   )r)   r   r   5   s    r   c             C   sa   t  |  t  r! d j |   } n t  |  t  r9 d } n d } t d j |   d | d d g S)z
    Return a list containing a warning that the pattern is invalid.

    describe_pattern() cannot be used here, because we cannot rely on the
    urlpattern having regex or name attributes.
    zkTry removing the string '{}'. The list of urlpatterns should not have a prefix string as the first element.z$Try using path() instead of a tuple.NziYour URL pattern {!r} is invalid. Ensure that urlpatterns is a list of path() and/or re_path() instances.hintr   z	urls.E004)
isinstancestrr    tupler   )r,   r.   r   r   r   r   G   s    		r   c             K   sS   g  } xF d D]> } t  t |  } | r | j d  r | j t |   q W| S)N
STATIC_URL	MEDIA_URL/)r2   r3   )r   r   endswithr   E006)r   r   r"   namevaluer   r   r   check_url_settings`   s    r9   c             C   s   t  d j |   d d S)Nz%The {} setting must end with a slash.r   z	urls.E006)r   r    )r7   r   r   r   r6   j   s    r6   N)collectionsr   Zdjango.confr    r   r   r   r   urlsr   r   r$   r   r   r9   r6   r   r   r   r   <module>   s   "	
