Skip to content

Commit c9614bb

Browse files
committed
Maintain support for legacy Django versions
1 parent eaa2618 commit c9614bb

File tree

1 file changed

+28
-9
lines changed
  • instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django

1 file changed

+28
-9
lines changed

instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py

+28-9
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from time import time
1717
from typing import Callable
1818

19+
from django import VERSION as django_version
1920
from django.http import HttpRequest, HttpResponse
2021

2122
from opentelemetry.context import attach, detach
@@ -42,6 +43,32 @@
4243
except ImportError:
4344
from django.urls import Resolver404, resolve
4445

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+
71+
4572
_logger = getLogger(__name__)
4673
_attributes_by_preference = [
4774
[
@@ -65,7 +92,7 @@
6592
]
6693

6794

68-
class _DjangoMiddleware:
95+
class _DjangoMiddleware(MiddlewareMixin):
6996
"""Django Middleware for OpenTelemetry"""
7097

7198
_environ_activation_key = (
@@ -84,9 +111,6 @@ class _DjangoMiddleware:
84111
[Span, HttpRequest, HttpResponse], None
85112
] = None
86113

87-
def __init__(self, get_response):
88-
self.get_response = get_response
89-
90114
@staticmethod
91115
def _get_span_name(request):
92116
try:
@@ -109,11 +133,6 @@ def _get_span_name(request):
109133
except Resolver404:
110134
return "HTTP {}".format(request.method)
111135

112-
def __call__(self, request):
113-
self.process_request(request)
114-
response = self.get_response(request)
115-
return self.process_response(request, response)
116-
117136
def process_request(self, request):
118137
# request.META is a dictionary containing all available HTTP headers
119138
# Read more about request.META here:

0 commit comments

Comments
 (0)