Skip to content

Commit b2802dd

Browse files
authored
Migrate Django middleware to new-style (#533)
1 parent c100b21 commit b2802dd

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
([#543](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/543))
2424
- Require aiopg to be less than 1.3.0
2525
([#560](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/560))
26+
- `opentelemetry-instrumentation-django` Migrated Django middleware to new-style.
27+
([#533](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/533))
2628

2729
### Added
2830
- `opentelemetry-instrumentation-httpx` Add `httpx` instrumentation

Diff for: instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py

+26-4
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,10 +43,31 @@
4243
except ImportError:
4344
from django.urls import Resolver404, resolve
4445

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+
4971

5072
_logger = getLogger(__name__)
5173
_attributes_by_preference = [

0 commit comments

Comments
 (0)