|
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
|
|
42 | 43 | except ImportError:
|
43 | 44 | from django.urls import Resolver404, resolve
|
44 | 45 |
|
45 |
| -try: |
46 |
| - from django.utils.deprecation import MiddlewareMixin |
47 |
| -except ImportError: |
48 |
| - MiddlewareMixin = object |
| 46 | +DJANGO_2_0 = django_version >= (2, 0) |
| 47 | + |
| 48 | +if DJANGO_2_0: |
| 49 | + # Since Django 2.0, only `settings.MIDDLEWARE` is supported, so new-style |
| 50 | + # middlewares can be used. |
| 51 | + class MiddlewareMixin: |
| 52 | + def __init__(self, get_response): |
| 53 | + self.get_response = get_response |
| 54 | + |
| 55 | + def __call__(self, request): |
| 56 | + self.process_request(request) |
| 57 | + response = self.get_response(request) |
| 58 | + return self.process_response(request, response) |
| 59 | + |
| 60 | + |
| 61 | +else: |
| 62 | + # Django versions 1.x can use `settings.MIDDLEWARE_CLASSES` and expect |
| 63 | + # old-style middlewares, which are created by inheriting from |
| 64 | + # `deprecation.MiddlewareMixin` since its creation in Django 1.10 and 1.11, |
| 65 | + # or from `object` for older versions. |
| 66 | + try: |
| 67 | + from django.utils.deprecation import MiddlewareMixin |
| 68 | + except ImportError: |
| 69 | + MiddlewareMixin = object |
| 70 | + |
49 | 71 |
|
50 | 72 | _logger = getLogger(__name__)
|
51 | 73 | _attributes_by_preference = [
|
|
0 commit comments