|
3 | 3 | import io
|
4 | 4 | from importlib import import_module
|
5 | 5 |
|
| 6 | +import django |
6 | 7 | from django.conf import settings
|
7 | 8 | from django.core.exceptions import ImproperlyConfigured
|
8 | 9 | from django.core.handlers.wsgi import WSGIHandler
|
@@ -357,6 +358,13 @@ class APILiveServerTestCase(testcases.LiveServerTestCase):
|
357 | 358 | client_class = APIClient
|
358 | 359 |
|
359 | 360 |
|
| 361 | +def cleanup_url_patterns(cls): |
| 362 | + if hasattr(cls, '_module_urlpatterns'): |
| 363 | + cls._module.urlpatterns = cls._module_urlpatterns |
| 364 | + else: |
| 365 | + del cls._module.urlpatterns |
| 366 | + |
| 367 | + |
360 | 368 | class URLPatternsTestCase(testcases.SimpleTestCase):
|
361 | 369 | """
|
362 | 370 | Isolate URL patterns on a per-TestCase basis. For example,
|
@@ -385,14 +393,20 @@ def setUpClass(cls):
|
385 | 393 | cls._module.urlpatterns = cls.urlpatterns
|
386 | 394 |
|
387 | 395 | cls._override.enable()
|
| 396 | + |
| 397 | + if django.VERSION > (4, 0): |
| 398 | + cls.addClassCleanup(cls._override.disable) |
| 399 | + cls.addClassCleanup(cleanup_url_patterns, cls) |
| 400 | + |
388 | 401 | super().setUpClass()
|
389 | 402 |
|
390 |
| - @classmethod |
391 |
| - def tearDownClass(cls): |
392 |
| - super().tearDownClass() |
393 |
| - cls._override.disable() |
| 403 | + if django.VERSION < (4, 0): |
| 404 | + @classmethod |
| 405 | + def tearDownClass(cls): |
| 406 | + super().tearDownClass() |
| 407 | + cls._override.disable() |
394 | 408 |
|
395 |
| - if hasattr(cls, '_module_urlpatterns'): |
396 |
| - cls._module.urlpatterns = cls._module_urlpatterns |
397 |
| - else: |
398 |
| - del cls._module.urlpatterns |
| 409 | + if hasattr(cls, '_module_urlpatterns'): |
| 410 | + cls._module.urlpatterns = cls._module_urlpatterns |
| 411 | + else: |
| 412 | + del cls._module.urlpatterns |
0 commit comments