Skip to content

Commit 4794988

Browse files
author
Emanuele Palazzetti
authored
Merge pull request #384 from joual/pyramid-render-missing-req
Keep request as part of pyramid render kwargs
2 parents 955af02 + 04325df commit 4794988

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

ddtrace/contrib/pyramid/trace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def includeme(config):
2828

2929
def trace_render(func, instance, args, kwargs):
3030
# If the request is not traced, we do not trace
31-
request = kwargs.pop('request', {})
31+
request = kwargs.get('request', {})
3232
if not request:
3333
log.debug("No request passed to render, will not be traced")
3434
return func(*args, **kwargs)

tests/contrib/pyramid/test_pyramid.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
# 3p
88
from pyramid.response import Response
99
from pyramid.config import Configurator
10+
from pyramid.renderers import render_to_response
1011
from pyramid.httpexceptions import HTTPInternalServerError
1112
import webtest
1213
from nose.tools import eq_
@@ -118,6 +119,29 @@ def test_json(self):
118119
eq_(s.error, 0)
119120
eq_(s.span_type, 'template')
120121

122+
def test_renderer(self):
123+
res = self.app.get('/renderer', status=200)
124+
assert self.rend._received['request'] is not None
125+
self.rend.assert_(foo='bar')
126+
writer = self.tracer.writer
127+
spans = writer.pop()
128+
eq_(len(spans), 2)
129+
spans_by_name = {s.name: s for s in spans}
130+
s = spans_by_name['pyramid.request']
131+
eq_(s.service, 'foobar')
132+
eq_(s.resource, 'GET renderer')
133+
eq_(s.error, 0)
134+
eq_(s.span_type, 'http')
135+
eq_(s.meta.get('http.method'), 'GET')
136+
eq_(s.meta.get('http.status_code'), '200')
137+
eq_(s.meta.get('http.url'), '/renderer')
138+
eq_(s.meta.get('pyramid.route.name'), 'renderer')
139+
140+
s = spans_by_name['pyramid.render']
141+
eq_(s.service, 'foobar')
142+
eq_(s.error, 0)
143+
eq_(s.span_type, 'template')
144+
121145
class TestPyramid(PyramidBase):
122146
def setUp(self):
123147
from tests.test_tracer import get_dummy_tracer
@@ -128,6 +152,7 @@ def setUp(self):
128152
'datadog_tracer': self.tracer
129153
}
130154
config = Configurator(settings=settings)
155+
self.rend = config.testing_add_renderer('template.pt')
131156
trace_pyramid(config)
132157

133158
app = get_app(config)
@@ -213,14 +238,19 @@ def exception(request):
213238
def json(request):
214239
return {'a': 1}
215240

241+
def renderer(request):
242+
return render_to_response('template.pt', {'foo': 'bar'}, request=request)
243+
216244
config.add_route('index', '/')
217245
config.add_route('error', '/error')
218246
config.add_route('exception', '/exception')
219247
config.add_route('json', '/json')
248+
config.add_route('renderer', '/renderer')
220249
config.add_view(index, route_name='index')
221250
config.add_view(error, route_name='error')
222251
config.add_view(exception, route_name='exception')
223252
config.add_view(json, route_name='json', renderer='json')
253+
config.add_view(renderer, route_name='renderer', renderer='template.pt')
224254
return config.make_wsgi_app()
225255

226256

tests/contrib/pyramid/test_pyramid_autopatch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def setUp(self):
1919
ddtrace.tracer = self.tracer
2020

2121
config = Configurator()
22-
22+
self.rend = config.testing_add_renderer('template.pt')
2323
app = get_app(config)
2424
self.app = webtest.TestApp(app)
2525

@@ -30,7 +30,7 @@ def setUp(self):
3030
ddtrace.tracer = self.tracer
3131

3232
config = Configurator(settings={'pyramid.tweens': 'pyramid.tweens.excview_tween_factory\n'})
33-
33+
self.rend = config.testing_add_renderer('template.pt')
3434
app = get_app(config)
3535
self.app = webtest.TestApp(app)
3636

0 commit comments

Comments
 (0)