o ʎ_ @sddlmZddlmZddlmZmZmZmZeej ddZ ddZ eej d d Z dd d Z ddZeej ddZddZdS))Counter)settings)ErrorTagsWarningregistercKs*ttddrddlm}|}t|SgS)N ROOT_URLCONFr get_resolver)getattrr django.urlsr check_resolver) app_configskwargsr resolverr9/usr/lib/python3/dist-packages/django/core/checks/urls.pycheck_url_configs  rcCs0t|dd}|dur |St|dst|SgS)z) Recursively check the resolver. checkNresolve)r hasattrget_warning_for_invalid_pattern)r check_methodrrrrs  rc KsnttddsgSddlm}|}t|}t|}dd|D}g}|D]}|td |dd q&|S) zD Warn if URL namespaces used in applications aren't unique. r Nrr cSsg|] \}}|dkr|qS)rr).0ncountrrr *sz/check_url_namespaces_unique..zZURL namespace '{}' isn't unique. You may not be able to reverse all URLs in this namespacez urls.W005id) r rr r _load_all_namespacesritemsappendrformat) rrr rall_namespacescounternon_unique_namespaceserrors namespacerrrcheck_url_namespaces_uniques   r)rcs^t|dg}fdd|D}|D]}t|dd}}|dur$||f7}|t||q|S)z< Recursively load all namespaces from URL patterns. url_patternscs.g|]}t|dddurd|jfqS)r(N:)r joinr()rurlparentsrrr:s z(_load_all_namespaces..r(N)r extendr )rr/r* namespacespatternr(currentrr.rr 5s    r cCs@t|tr d|}n t|trd}nd}td||ddgS)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.z urls.E004)hintr) isinstancestrr#tupler)r2r4rrrrGs  rcKs8g}dD]}tt|}|r|ds|t|q|S)N) STATIC_URL MEDIA_URL/)r rendswithr"E006)rrr'namevaluerrrcheck_url_settings`s r?cCstd|ddS)Nz%The {} setting must end with a slash.z urls.E006r)rr#)r=rrrr<jsr<N)r) collectionsr django.confrrrrrurlsrrr)r rr?r<rrrrs