|
16 | 16 | from time import time
|
17 | 17 | from typing import Callable
|
18 | 18 |
|
| 19 | +from django import VERSION as django_version |
19 | 20 | from django.http import HttpRequest, HttpResponse
|
20 | 21 |
|
21 | 22 | from opentelemetry.context import attach, detach
|
|
48 | 49 | except ImportError:
|
49 | 50 | from django.urls import Resolver404, resolve
|
50 | 51 |
|
51 |
| -try: |
52 |
| - from django.utils.deprecation import MiddlewareMixin |
53 |
| -except ImportError: |
54 |
| - MiddlewareMixin = object |
| 52 | +DJANGO_2_0 = django_version >= (2, 0) |
| 53 | + |
| 54 | +if DJANGO_2_0: |
| 55 | + # Since Django 2.0, only `settings.MIDDLEWARE` is supported, so new-style |
| 56 | + # middlewares can be used. |
| 57 | + class MiddlewareMixin: |
| 58 | + def __init__(self, get_response): |
| 59 | + self.get_response = get_response |
| 60 | + |
| 61 | + def __call__(self, request): |
| 62 | + self.process_request(request) |
| 63 | + response = self.get_response(request) |
| 64 | + return self.process_response(request, response) |
| 65 | + |
| 66 | + |
| 67 | +else: |
| 68 | + # Django versions 1.x can use `settings.MIDDLEWARE_CLASSES` and expect |
| 69 | + # old-style middlewares, which are created by inheriting from |
| 70 | + # `deprecation.MiddlewareMixin` since its creation in Django 1.10 and 1.11, |
| 71 | + # or from `object` for older versions. |
| 72 | + try: |
| 73 | + from django.utils.deprecation import MiddlewareMixin |
| 74 | + except ImportError: |
| 75 | + MiddlewareMixin = object |
| 76 | + |
55 | 77 |
|
56 | 78 | _logger = getLogger(__name__)
|
57 | 79 | _attributes_by_preference = [
|
|
0 commit comments