Skip to content

Commit 1ab854d

Browse files
authored
Django 3.2 support (#1064)
* Use `elasticapm` as Django app label Django 3.2 now verifies that the app label is a valid Python identifier name. * use `re_path` instead of `url` if available this reduces the deprecation warning noise in newer Django releases * added Django 3.2 to test matrix * Fix issue when resetting config after new value has been added (#1068) * add test that demonstrates problem from #1067 * check if key existed in original config before setting up callback for it * update changelog
1 parent 8f26f47 commit 1ab854d

File tree

7 files changed

+32
-22
lines changed

7 files changed

+32
-22
lines changed

.ci/.jenkins_framework.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ FRAMEWORK:
55
- django-1.11
66
- django-2.0
77
- django-3.1
8+
- django-3.2
89
- flask-0.12
910
- flask-1.1
1011
- opentracing-newest

.ci/.jenkins_framework_full.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ FRAMEWORK:
88
- django-2.2
99
- django-3.0
1010
- django-3.1
11-
# - django-master
11+
- django-3.2
12+
# - django-master
1213
- flask-0.10
1314
- flask-0.11
1415
- flask-0.12

CHANGELOG.asciidoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ endif::[]
5050
* Fix transaction names for Starlette Mount routes {pull}1037[#1037]
5151
* Fix for elastic excepthook arguments {pull}1050[#1050]
5252
* Fix issue with remote configuration when resetting config values {pull}1068[#1068]
53+
* Use a label for the elasticapm Django app that is compatible with Django 3.2 validation {pull}1064[#1064]
5354
5455
5556
[[release-notes-6.x]]

elasticapm/contrib/django/apps.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
class ElasticAPMConfig(AppConfig):
5656
name = "elasticapm.contrib.django"
57-
label = "elasticapm.contrib.django"
57+
label = "elasticapm"
5858
verbose_name = "ElasticAPM"
5959

6060
def __init__(self, *args, **kwargs):

tests/contrib/django/fixtures.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def django_elasticapm_client(request):
5757
client_config.setdefault("service_name", "app")
5858
client_config.setdefault("secret_token", "secret")
5959
client_config.setdefault("span_frames_min_duration", -1)
60-
app = apps.get_app_config("elasticapm.contrib.django")
60+
app = apps.get_app_config("elasticapm")
6161
old_client = app.client
6262
client = TempStoreClient(**client_config)
6363
register_handlers(client)
@@ -83,7 +83,7 @@ def django_sending_elasticapm_client(request, validating_httpserver):
8383
client_config.setdefault("secret_token", "secret")
8484
client_config.setdefault("transport_class", "elasticapm.transport.http.Transport")
8585
client_config.setdefault("span_frames_min_duration", -1)
86-
app = apps.get_app_config("elasticapm.contrib.django")
86+
app = apps.get_app_config("elasticapm")
8787
old_client = app.client
8888
client = DjangoClient(**client_config)
8989
register_handlers(client)

tests/contrib/django/testapp/urls.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,16 @@
3232

3333
import django
3434
from django.conf import settings
35-
from django.conf.urls import url
3635
from django.http import HttpResponse
3736

3837
from tests.contrib.django.testapp import views
3938

39+
try:
40+
from django.conf.urls import re_path
41+
except ImportError:
42+
# Django < 2
43+
from django.conf.urls import url as re_path
44+
4045

4146
def handler500(request):
4247
if getattr(settings, "BREAK_THAT_500", False):
@@ -45,27 +50,27 @@ def handler500(request):
4550

4651

4752
urlpatterns = (
48-
url(r"^render-heavy-template$", views.render_template_view, name="render-heavy-template"),
49-
url(r"^render-user-template$", views.render_user_view, name="render-user-template"),
50-
url(r"^no-error$", views.no_error, name="elasticapm-no-error"),
51-
url(r"^no-error-slash/$", views.no_error, name="elasticapm-no-error-slash"),
52-
url(r"^http-error/(?P<status>[0-9]{3})$", views.http_error, name="elasticapm-http-error"),
53-
url(r"^logging$", views.logging_view, name="elasticapm-logging"),
54-
url(r"^ignored-exception/$", views.ignored_exception, name="elasticapm-ignored-exception"),
55-
url(r"^fake-login$", views.fake_login, name="elasticapm-fake-login"),
56-
url(r"^trigger-500$", views.raise_exc, name="elasticapm-raise-exc"),
57-
url(r"^trigger-500-ioerror$", views.raise_ioerror, name="elasticapm-raise-ioerror"),
58-
url(r"^trigger-500-decorated$", views.decorated_raise_exc, name="elasticapm-raise-exc-decor"),
59-
url(r"^trigger-500-django$", views.django_exc, name="elasticapm-django-exc"),
60-
url(r"^trigger-500-template$", views.template_exc, name="elasticapm-template-exc"),
61-
url(r"^trigger-500-log-request$", views.logging_request_exc, name="elasticapm-log-request-exc"),
62-
url(r"^streaming$", views.streaming_view, name="elasticapm-streaming-view"),
63-
url(r"^name-override$", views.override_transaction_name_view, name="elasticapm-name-override"),
53+
re_path(r"^render-heavy-template$", views.render_template_view, name="render-heavy-template"),
54+
re_path(r"^render-user-template$", views.render_user_view, name="render-user-template"),
55+
re_path(r"^no-error$", views.no_error, name="elasticapm-no-error"),
56+
re_path(r"^no-error-slash/$", views.no_error, name="elasticapm-no-error-slash"),
57+
re_path(r"^http-error/(?P<status>[0-9]{3})$", views.http_error, name="elasticapm-http-error"),
58+
re_path(r"^logging$", views.logging_view, name="elasticapm-logging"),
59+
re_path(r"^ignored-exception/$", views.ignored_exception, name="elasticapm-ignored-exception"),
60+
re_path(r"^fake-login$", views.fake_login, name="elasticapm-fake-login"),
61+
re_path(r"^trigger-500$", views.raise_exc, name="elasticapm-raise-exc"),
62+
re_path(r"^trigger-500-ioerror$", views.raise_ioerror, name="elasticapm-raise-ioerror"),
63+
re_path(r"^trigger-500-decorated$", views.decorated_raise_exc, name="elasticapm-raise-exc-decor"),
64+
re_path(r"^trigger-500-django$", views.django_exc, name="elasticapm-django-exc"),
65+
re_path(r"^trigger-500-template$", views.template_exc, name="elasticapm-template-exc"),
66+
re_path(r"^trigger-500-log-request$", views.logging_request_exc, name="elasticapm-log-request-exc"),
67+
re_path(r"^streaming$", views.streaming_view, name="elasticapm-streaming-view"),
68+
re_path(r"^name-override$", views.override_transaction_name_view, name="elasticapm-name-override"),
6469
)
6570

6671

6772
if django.VERSION >= (1, 8):
68-
urlpatterns += (url(r"^render-jinja2-template$", views.render_jinja2_template, name="render-jinja2-template"),)
73+
urlpatterns += (re_path(r"^render-jinja2-template$", views.render_jinja2_template, name="render-jinja2-template"),)
6974

7075
if django.VERSION >= (2, 2):
7176
from django.urls import path
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Django>=3.2b1,<3.3
2+
-r reqs-base.txt

0 commit comments

Comments
 (0)