def _get_app(service=None, tracer=None): """ return a pyramid wsgi app with various urls. """ def index(request): return Response('idx') def error(request): raise HTTPInternalServerError("oh no") def exception(request): 1 / 0 def json(request): return {'a': 1} settings = { 'datadog_trace_service': service, 'datadog_tracer': tracer or ddtrace.tracer } config = Configurator(settings=settings) trace_pyramid(config) config.add_route('index', '/') config.add_route('error', '/error') config.add_route('exception', '/exception') config.add_route('json', '/json') config.add_view(index, route_name='index') config.add_view(error, route_name='error') config.add_view(exception, route_name='exception') config.add_view(json, route_name='json', renderer='json') return config.make_wsgi_app()
def create_app(settings, instrument): """Return a pyramid wsgi app""" def index(request): resp = Response("idx") resp.headers["my-response-header"] = "my_response_value" return resp def error(request): raise HTTPInternalServerError("oh no") def exception(request): 1 / 0 def json(request): return {"a": 1} def renderer(request): return render_to_response("template.pt", {"foo": "bar"}, request=request) def raise_redirect(request): raise HTTPFound() def raise_no_content(request): raise HTTPNoContent() def custom_exception_view(context, request): """Custom view that forces a HTTPException when no views are found to handle given request """ if "raise_exception" in request.url: raise HTTPNotFound() else: return HTTPNotFound() config = Configurator(settings=settings) config.add_route("index", "/") config.add_route("error", "/error") config.add_route("exception", "/exception") config.add_route("json", "/json") config.add_route("renderer", "/renderer") config.add_route("raise_redirect", "/redirect") config.add_route("raise_no_content", "/nocontent") config.add_view(index, route_name="index") config.add_view(error, route_name="error") config.add_view(exception, route_name="exception") config.add_view(json, route_name="json", renderer="json") config.add_view(renderer, route_name="renderer", renderer="template.pt") config.add_view(raise_redirect, route_name="raise_redirect") config.add_view(raise_no_content, route_name="raise_no_content") # required to reproduce a regression test config.add_notfound_view(custom_exception_view) # required for rendering tests renderer = config.testing_add_renderer("template.pt") if instrument: trace_pyramid(config) return config.make_wsgi_app(), renderer
def create_app(settings, instrument): """Return a pyramid wsgi app""" def index(request): return Response('idx') def error(request): raise HTTPInternalServerError('oh no') def exception(request): 1 / 0 def json(request): return {'a': 1} def renderer(request): return render_to_response('template.pt', {'foo': 'bar'}, request=request) def raise_redirect(request): raise HTTPFound() def raise_no_content(request): raise HTTPNoContent() def custom_exception_view(context, request): """Custom view that forces a HTTPException when no views are found to handle given request """ if 'raise_exception' in request.url: raise HTTPNotFound() else: return HTTPNotFound() config = Configurator(settings=settings) config.add_route('index', '/') config.add_route('error', '/error') config.add_route('exception', '/exception') config.add_route('json', '/json') config.add_route('renderer', '/renderer') config.add_route('raise_redirect', '/redirect') config.add_route('raise_no_content', '/nocontent') config.add_view(index, route_name='index') config.add_view(error, route_name='error') config.add_view(exception, route_name='exception') config.add_view(json, route_name='json', renderer='json') config.add_view(renderer, route_name='renderer', renderer='template.pt') config.add_view(raise_redirect, route_name='raise_redirect') config.add_view(raise_no_content, route_name='raise_no_content') # required to reproduce a regression test config.add_notfound_view(custom_exception_view) # required for rendering tests renderer = config.testing_add_renderer('template.pt') if instrument: trace_pyramid(config) return config.make_wsgi_app(), renderer
def create_app(settings, instrument): """Return a pyramid wsgi app""" def index(request): return Response('idx') def error(request): raise HTTPInternalServerError("oh no") def exception(request): 1 / 0 def json(request): return {'a': 1} def renderer(request): return render_to_response('template.pt', {'foo': 'bar'}, request=request) def raise_redirect(request): raise HTTPFound() def raise_no_content(request): raise HTTPNoContent() def custom_exception_view(context, request): """Custom view that forces a HTTPException when no views are found to handle given request """ if 'raise_exception' in request.url: raise HTTPNotFound() else: return HTTPNotFound() config = Configurator(settings=settings) config.add_route('index', '/') config.add_route('error', '/error') config.add_route('exception', '/exception') config.add_route('json', '/json') config.add_route('renderer', '/renderer') config.add_route('raise_redirect', '/redirect') config.add_route('raise_no_content', '/nocontent') config.add_view(index, route_name='index') config.add_view(error, route_name='error') config.add_view(exception, route_name='exception') config.add_view(json, route_name='json', renderer='json') config.add_view(renderer, route_name='renderer', renderer='template.pt') config.add_view(raise_redirect, route_name='raise_redirect') config.add_view(raise_no_content, route_name='raise_no_content') # required to reproduce a regression test config.add_notfound_view(custom_exception_view) # required for rendering tests renderer = config.testing_add_renderer('template.pt') if instrument: trace_pyramid(config) return config.make_wsgi_app(), renderer
def setUp(self): from tests.test_tracer import get_dummy_tracer self.tracer = get_dummy_tracer() settings = { 'datadog_trace_service': 'foobar', 'datadog_tracer': self.tracer } config = Configurator(settings=settings) trace_pyramid(config) app = get_app(config) self.app = webtest.TestApp(app)
def test_include(): """ Test that includes do not create conflicts """ from ...test_tracer import get_dummy_tracer from ...util import override_global_tracer tracer = get_dummy_tracer() with override_global_tracer(tracer): config = Configurator( settings={ 'pyramid.includes': 'tests.contrib.pyramid.test_pyramid' }) trace_pyramid(config) app = webtest.TestApp(config.make_wsgi_app()) app.get('/', status=404) spans = tracer.writer.pop() assert spans eq_(len(spans), 1)
def test_tween_overriden(): """ In case our tween is overriden by the user config we should not log rendering """ from ...test_tracer import get_dummy_tracer from ...util import override_global_tracer tracer = get_dummy_tracer() with override_global_tracer(tracer): config = Configurator( settings={ 'pyramid.tweens': 'pyramid.tweens.excview_tween_factory' }) trace_pyramid(config) def json(request): return {'a': 1} config.add_route('json', '/json') config.add_view(json, route_name='json', renderer='json') app = webtest.TestApp(config.make_wsgi_app()) app.get('/json', status=200) spans = tracer.writer.pop() assert not spans
return render_to_response('template.pt', {'foo': 'bar'}, request=request) config.add_route('index', '/') config.add_route('error', '/error') config.add_route('exception', '/exception') config.add_route('json', '/json') config.add_route('renderer', '/renderer') config.add_view(index, route_name='index') config.add_view(error, route_name='error') config.add_view(exception, route_name='exception') config.add_view(json, route_name='json', renderer='json') config.add_view(renderer, route_name='renderer', renderer='template.pt') return config.make_wsgi_app() if __name__ == '__main__': logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) ddtrace.tracer.debug_logging = True settings = { 'datadog_trace_service': 'foobar', 'datadog_tracer': ddtrace.tracer } config = Configurator(settings=settings) trace_pyramid(config) app = get_app(config) port = 8080 server = make_server('0.0.0.0', port, app) print('running on %s' % port) server.serve_forever()
return response with Configurator(settings=settings) as pyramid_config: pyramid_config.add_route("employees", "/employees") pyramid_config.add_view(employees, route_name="employees") engine = db.create_engine("sqlite:///employees.db") models.initialize_sql(engine) session_factory = get_session_factory(engine) pyramid_config.registry['dbsession_factory'] = session_factory pyramid_config.include('pyramid_tm') pyramid_config.include('pyramid_retry') pyramid_config.add_request_method( lambda r: get_tm_session(session_factory, r.tm), 'dbsession', reify=True) initialize(statsd_host=os.getenv("DATADOG_HOST"), statsd_port=8125, host_name="pyramid") tracer.configure(hostname=os.getenv("DATADOG_HOST"), port=8126, enabled=True) trace_pyramid(pyramid_config) patch(sqlalchemy=True, logging=True, sqlite3=True) wsgi_app = pyramid_config.make_wsgi_app() app = WsgiToAsgi(wsgi_app)