6666from django .template .loaders .base import Loader as BaseLoader
6767from django .test .runner import DiscoverRunner
6868from django .core .management import call_command
69- from django .urls import RegexURLResolver
69+ from django .urls import RegexURLResolver # type: ignore
7070
7171import debug # pyflakes:ignore
7272debug .debug = True
@@ -138,6 +138,20 @@ def pyflakes_test(self):
138138 warnings = pyflakes .checkPaths ([path ], verbosity = 0 )
139139 self .assertEqual ([], [str (w ) for w in warnings ])
140140
141+ class MyPyTest (TestCase ):
142+
143+ def __init__ (self , test_runner = None , ** kwargs ):
144+ self .runner = test_runner
145+ super (MyPyTest , self ).__init__ (** kwargs )
146+
147+ @unittest .skipIf (sys .version_info [0 ] < 3 , "Mypy and django-stubs not available under Py2" )
148+ def mypy_test (self ):
149+ from mypy import api
150+ out , err , code = api .run (['ietf' , ])
151+ self .assertEqual ([], err .splitlines ())
152+ self .assertEqual ([], out .splitlines ())
153+ self .assertEqual (code , 0 )
154+
141155class TemplateCoverageLoader (BaseLoader ):
142156 is_usable = True
143157
@@ -146,7 +160,7 @@ def load_template_source(self, template_name, dirs):
146160 if template_coverage_collection == True :
147161 loaded_templates .add (str (template_name ))
148162 raise TemplateDoesNotExist (template_name )
149- load_template_source .is_usable = True
163+ load_template_source .is_usable = True # type: ignore # https://github.com/python/mypy/issues/2087
150164
151165def record_urls_middleware (get_response ):
152166 def record_urls (request ):
@@ -694,6 +708,7 @@ def run_tests(self, test_labels, extra_tests=[], **kwargs):
694708 url_coverage_collection = True
695709 extra_tests += [
696710 PyFlakesTestCase (test_runner = self , methodName = 'pyflakes_test' ),
711+ MyPyTest (test_runner = self , methodName = 'mypy_test' ),
697712 CoverageTest (test_runner = self , methodName = 'interleaved_migrations_test' ),
698713 CoverageTest (test_runner = self , methodName = 'url_coverage_test' ),
699714 CoverageTest (test_runner = self , methodName = 'template_coverage_test' ),
@@ -705,7 +720,7 @@ def run_tests(self, test_labels, extra_tests=[], **kwargs):
705720 # parent classes to later subclasses, the parent classes will
706721 # determine the ordering, so use the most specific classes
707722 # necessary to get the right ordering:
708- self .reorder_by = (PyFlakesTestCase , ) + self .reorder_by + (StaticLiveServerTestCase , TemplateTagTest , CoverageTest , )
723+ self .reorder_by = (PyFlakesTestCase , MyPyTest , ) + self .reorder_by + (StaticLiveServerTestCase , TemplateTagTest , CoverageTest , )
709724
710725 failures = super (IetfTestRunner , self ).run_tests (test_labels , extra_tests = extra_tests , ** kwargs )
711726
0 commit comments