diff --git a/aws_xray_sdk/ext/django/templates.py b/aws_xray_sdk/ext/django/templates.py index 1eaa7736..a77f766b 100644 --- a/aws_xray_sdk/ext/django/templates.py +++ b/aws_xray_sdk/ext/django/templates.py @@ -1,6 +1,7 @@ import logging from django.template import Template +from django.utils.safestring import SafeString from aws_xray_sdk.core import xray_recorder @@ -22,6 +23,10 @@ def xray_render(self, context): template_name = self.name or getattr(context, 'template_name', None) if template_name: name = str(template_name) + # SafeString are not properly serialized by jsonpickle, + # turn them back to str by adding a non-safe str. + if isinstance(name, SafeString): + name += '' subsegment = xray_recorder.current_subsegment() if subsegment: subsegment.name = name diff --git a/tests/ext/django/app/settings.py b/tests/ext/django/app/settings.py index 6a78b6d6..3d33737d 100644 --- a/tests/ext/django/app/settings.py +++ b/tests/ext/django/app/settings.py @@ -44,7 +44,6 @@ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', diff --git a/tests/ext/django/app/templates/block.html b/tests/ext/django/app/templates/block.html new file mode 100644 index 00000000..cb179d16 --- /dev/null +++ b/tests/ext/django/app/templates/block.html @@ -0,0 +1 @@ +

Hello World

diff --git a/tests/ext/django/app/templates/block_user.html b/tests/ext/django/app/templates/block_user.html new file mode 100644 index 00000000..bfa2c370 --- /dev/null +++ b/tests/ext/django/app/templates/block_user.html @@ -0,0 +1,10 @@ + + + + +

Django Test App

+ +{% include "block.html" %} + + + diff --git a/tests/ext/django/app/views.py b/tests/ext/django/app/views.py index 6bb5edf9..1b3b6f62 100644 --- a/tests/ext/django/app/views.py +++ b/tests/ext/django/app/views.py @@ -9,6 +9,10 @@ class IndexView(TemplateView): template_name = 'index.html' +class TemplateBlockView(TemplateView): + template_name = 'block_user.html' + + def ok(request): return HttpResponse(status=200) @@ -32,4 +36,5 @@ def call_db(request): url(r'^500fault/$', fault, name='500fault'), url(r'^call_db/$', call_db, name='call_db'), url(r'^template/$', IndexView.as_view(), name='template'), + url(r'^template_block/$', TemplateBlockView.as_view(), name='template_block'), ] diff --git a/tests/ext/django/test_middleware.py b/tests/ext/django/test_middleware.py index 3c89c51e..8388b386 100644 --- a/tests/ext/django/test_middleware.py +++ b/tests/ext/django/test_middleware.py @@ -1,6 +1,6 @@ import django from aws_xray_sdk import global_sdk_config -from django.core.urlresolvers import reverse +from django.urls import reverse from django.test import TestCase from aws_xray_sdk.core import xray_recorder, lambda_launcher @@ -90,6 +90,17 @@ def test_template(self): assert not subsegment.in_progress assert subsegment.namespace == 'local' + def test_template_block(self): + url = reverse('template_block') + self.client.get(url) + segment = xray_recorder.emitter.pop() + assert len(segment.subsegments) == 1 + + subsegment = segment.subsegments[0] + assert subsegment.name == 'block_user.html' + assert not subsegment.in_progress + assert subsegment.namespace == 'local' + def test_trace_header_data_perservation(self): url = reverse('200ok') self.client.get(url, HTTP_X_AMZN_TRACE_ID='k1=v1') diff --git a/tox.ini b/tox.ini index d829182d..6039e008 100644 --- a/tox.ini +++ b/tox.ini @@ -19,7 +19,7 @@ deps = Flask-SQLAlchemy future # the sdk doesn't support earlier version of django - django >= 1.10, <2.0 + django >= 1.10 django-fake-model pynamodb >= 3.3.1 psycopg2