Esempio n. 1
0
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()
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
    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)
Esempio n. 6
0
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)
Esempio n. 7
0
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
Esempio n. 8
0
        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()
Esempio n. 9
0
    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)