@@ -93,41 +93,51 @@ def process_request(self, request):
9393 if request .user .is_authenticated () and "REMOTE_USER" not in request .META :
9494 request .META ["REMOTE_USER" ] = request .user .username
9595
96- def get_patterns (module ):
97- all = []
96+ def get_url_patterns (module ):
97+ res = []
9898 try :
9999 patterns = module .urlpatterns
100100 except AttributeError :
101101 patterns = []
102102 for item in patterns :
103103 try :
104- subpatterns = get_patterns (item .urlconf_module )
104+ subpatterns = get_url_patterns (item .urlconf_module )
105105 except :
106- subpatterns = ["" ]
107- for sub in subpatterns :
106+ subpatterns = [( "" , None ) ]
107+ for sub , subitem in subpatterns :
108108 if not sub :
109- all .append (item .regex .pattern )
109+ res .append (( item .regex .pattern , item ) )
110110 elif sub .startswith ("^" ):
111- all .append (item .regex .pattern + sub [1 :])
111+ res .append (( item .regex .pattern + sub [1 :], subitem ) )
112112 else :
113- all .append (item .regex .pattern + ".*" + sub )
114- return all
113+ res .append (( item .regex .pattern + ".*" + sub , subitem ) )
114+ return res
115115
116116def check_url_coverage ():
117- patterns = get_patterns ( ietf .urls )
117+ import ietf .urls
118118
119- IGNORED_PATTERNS = ( "admin" , )
119+ url_patterns = get_url_patterns ( ietf . urls )
120120
121- patterns = [(p , re .compile (p )) for p in patterns if p [1 :].split ("/" )[0 ] not in IGNORED_PATTERNS ]
121+ # skip some patterns that we don't bother with
122+ def ignore_pattern (regex , pattern ):
123+ import django .views .static
124+ return (regex in ("^_test500/" ,)
125+ or regex .startswith ("^admin/" )
126+ or getattr (pattern .callback , "__name__" , "" ) == "RedirectView"
127+ or getattr (pattern .callback , "__name__" , "" ) == "TemplateView"
128+ or pattern .callback == django .views .static .serve )
129+
130+ patterns = [(regex , re .compile (regex )) for regex , pattern in url_patterns
131+ if not ignore_pattern (regex , pattern )]
122132
123133 covered = set ()
124134 for url in visited_urls :
125- for pattern , compiled in patterns :
126- if pattern not in covered and compiled .match (url [1 :]): # strip leading /
127- covered .add (pattern )
135+ for regex , compiled in patterns :
136+ if regex not in covered and compiled .match (url [1 :]): # strip leading /
137+ covered .add (regex )
128138 break
129139
130- missing = list (set (p for p , compiled in patterns ) - covered )
140+ missing = list (set (regex for regex , compiled in patterns ) - covered )
131141
132142 if missing :
133143 print "The following URL patterns were not tested"
@@ -225,8 +235,8 @@ def run_tests(self, test_labels, extra_tests=None, **kwargs):
225235 failures = super (IetfTestRunner , self ).run_tests (test_labels , extra_tests = extra_tests , ** kwargs )
226236
227237 if check_coverage and not failures :
228- check_url_coverage ()
229238 check_template_coverage ()
239+ check_url_coverage ()
230240
231241 print "0 test failures - coverage shown above"
232242
0 commit comments