We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Incorrect render patching in pyramid.
https://github.com/DataDog/dd-trace-py/blob/261136e112b23862a78308a2423e15364ae4aaa6/ddtrace/contrib/pyramid/trace.py#L31

Here we're removing request from kwargs but pyramid's render has a request kwarg so we need to keep it.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `ddtrace/contrib/pyramid/trace.py`
Content:
```
1 
2 # 3p
3 import logging
4 import pyramid.renderers
5 from pyramid.settings import asbool
6 import wrapt
7 
8 # project
9 import ddtrace
10 from ...ext import http, AppTypes
11 from .constants import SETTINGS_SERVICE, SETTINGS_TRACE_ENABLED, SETTINGS_TRACER
12 
13 log = logging.getLogger(__name__)
14 
15 DD_TWEEN_NAME = 'ddtrace.contrib.pyramid:trace_tween_factory'
16 DD_SPAN = '_datadog_span'
17 
18 def trace_pyramid(config):
19     config.include('ddtrace.contrib.pyramid')
20 
21 def includeme(config):
22     # Add our tween just before the default exception handler
23     config.add_tween(DD_TWEEN_NAME, over=pyramid.tweens.EXCVIEW)
24     # ensure we only patch the renderer once.
25     if not isinstance(pyramid.renderers.RendererHelper.render, wrapt.ObjectProxy):
26         wrapt.wrap_function_wrapper('pyramid.renderers', 'RendererHelper.render', trace_render)
27 
28 
29 def trace_render(func, instance, args, kwargs):
30     # If the request is not traced, we do not trace
31     request = kwargs.pop('request', {})
32     if not request:
33         log.debug("No request passed to render, will not be traced")
34         return func(*args, **kwargs)
35     span = getattr(request, DD_SPAN, None)
36     if not span:
37         log.debug("No span found in request, will not be traced")
38         return func(*args, **kwargs)
39 
40     tracer = span.tracer()
41     with tracer.trace('pyramid.render') as span:
42         span.span_type = http.TEMPLATE
43         return func(*args, **kwargs)
44 
45 def trace_tween_factory(handler, registry):
46     # configuration
47     settings = registry.settings
48     service = settings.get(SETTINGS_SERVICE) or 'pyramid'
49     tracer = settings.get(SETTINGS_TRACER) or ddtrace.tracer
50     enabled = asbool(settings.get(SETTINGS_TRACE_ENABLED, tracer.enabled))
51 
52     # set the service info
53     tracer.set_service_info(
54         service=service,
55         app="pyramid",
56         app_type=AppTypes.web)
57 
58     if enabled:
59         # make a request tracing function
60         def trace_tween(request):
61             with tracer.trace('pyramid.request', service=service, resource='404') as span:
62                 setattr(request, DD_SPAN, span)  # used to find the tracer in templates
63                 response = None
64                 try:
65                     response = handler(request)
66                 except BaseException:
67                     span.set_tag(http.STATUS_CODE, 500)
68                     raise
69                 finally:
70                     span.span_type = http.TYPE
71                     # set request tags
72                     span.set_tag(http.URL, request.path)
73                     span.set_tag(http.METHOD, request.method)
74                     if request.matched_route:
75                         span.resource = '{} {}'.format(request.method, request.matched_route.name)
76                         span.set_tag('pyramid.route.name', request.matched_route.name)
77                     # set response tags
78                     if response:
79                         span.set_tag(http.STATUS_CODE, response.status_code)
80                         if 500 <= response.status_code < 600:
81                             span.error = 1
82                 return response
83         return trace_tween
84 
85     # if timing support is not enabled, return the original handler
86     return handler
87
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/ddtrace/contrib/pyramid/trace.py b/ddtrace/contrib/pyramid/trace.py
--- a/ddtrace/contrib/pyramid/trace.py
+++ b/ddtrace/contrib/pyramid/trace.py
@@ -28,7 +28,7 @@
 
 def trace_render(func, instance, args, kwargs):
     # If the request is not traced, we do not trace
-    request = kwargs.pop('request', {})
+    request = kwargs.get('request', {})
     if not request:
         log.debug("No request passed to render, will not be traced")
         return func(*args, **kwargs)

{"golden_diff": "diff --git a/ddtrace/contrib/pyramid/trace.py b/ddtrace/contrib/pyramid/trace.py\n--- a/ddtrace/contrib/pyramid/trace.py\n+++ b/ddtrace/contrib/pyramid/trace.py\n@@ -28,7 +28,7 @@\n \n def trace_render(func, instance, args, kwargs):\n     # If the request is not traced, we do not trace\n-    request = kwargs.pop('request', {})\n+    request = kwargs.get('request', {})\n     if not request:\n         log.debug(\"No request passed to render, will not be traced\")\n         return func(*args, **kwargs)\n", "issue": "Incorrect render patching in pyramid.\nhttps://github.com/DataDog/dd-trace-py/blob/261136e112b23862a78308a2423e15364ae4aaa6/ddtrace/contrib/pyramid/trace.py#L31\r\n\r\nHere we're removing request from kwargs but pyramid's render has a request kwarg so we need to keep it.\n", "before_files": [{"content": "\n# 3p\nimport logging\nimport pyramid.renderers\nfrom pyramid.settings import asbool\nimport wrapt\n\n# project\nimport ddtrace\nfrom ...ext import http, AppTypes\nfrom .constants import SETTINGS_SERVICE, SETTINGS_TRACE_ENABLED, SETTINGS_TRACER\n\nlog = logging.getLogger(__name__)\n\nDD_TWEEN_NAME = 'ddtrace.contrib.pyramid:trace_tween_factory'\nDD_SPAN = '_datadog_span'\n\ndef trace_pyramid(config):\n    config.include('ddtrace.contrib.pyramid')\n\ndef includeme(config):\n    # Add our tween just before the default exception handler\n    config.add_tween(DD_TWEEN_NAME, over=pyramid.tweens.EXCVIEW)\n    # ensure we only patch the renderer once.\n    if not isinstance(pyramid.renderers.RendererHelper.render, wrapt.ObjectProxy):\n        wrapt.wrap_function_wrapper('pyramid.renderers', 'RendererHelper.render', trace_render)\n\n\ndef trace_render(func, instance, args, kwargs):\n    # If the request is not traced, we do not trace\n    request = kwargs.pop('request', {})\n    if not request:\n        log.debug(\"No request passed to render, will not be traced\")\n        return func(*args, **kwargs)\n    span = getattr(request, DD_SPAN, None)\n    if not span:\n        log.debug(\"No span found in request, will not be traced\")\n        return func(*args, **kwargs)\n\n    tracer = span.tracer()\n    with tracer.trace('pyramid.render') as span:\n        span.span_type = http.TEMPLATE\n        return func(*args, **kwargs)\n\ndef trace_tween_factory(handler, registry):\n    # configuration\n    settings = registry.settings\n    service = settings.get(SETTINGS_SERVICE) or 'pyramid'\n    tracer = settings.get(SETTINGS_TRACER) or ddtrace.tracer\n    enabled = asbool(settings.get(SETTINGS_TRACE_ENABLED, tracer.enabled))\n\n    # set the service info\n    tracer.set_service_info(\n        service=service,\n        app=\"pyramid\",\n        app_type=AppTypes.web)\n\n    if enabled:\n        # make a request tracing function\n        def trace_tween(request):\n            with tracer.trace('pyramid.request', service=service, resource='404') as span:\n                setattr(request, DD_SPAN, span)  # used to find the tracer in templates\n                response = None\n                try:\n                    response = handler(request)\n                except BaseException:\n                    span.set_tag(http.STATUS_CODE, 500)\n                    raise\n                finally:\n                    span.span_type = http.TYPE\n                    # set request tags\n                    span.set_tag(http.URL, request.path)\n                    span.set_tag(http.METHOD, request.method)\n                    if request.matched_route:\n                        span.resource = '{} {}'.format(request.method, request.matched_route.name)\n                        span.set_tag('pyramid.route.name', request.matched_route.name)\n                    # set response tags\n                    if response:\n                        span.set_tag(http.STATUS_CODE, response.status_code)\n                        if 500 <= response.status_code < 600:\n                            span.error = 1\n                return response\n        return trace_tween\n\n    # if timing support is not enabled, return the original handler\n    return handler\n", "path": "ddtrace/contrib/pyramid/trace.py"}], "after_files": [{"content": "\n# 3p\nimport logging\nimport pyramid.renderers\nfrom pyramid.settings import asbool\nimport wrapt\n\n# project\nimport ddtrace\nfrom ...ext import http, AppTypes\nfrom .constants import SETTINGS_SERVICE, SETTINGS_TRACE_ENABLED, SETTINGS_TRACER\n\nlog = logging.getLogger(__name__)\n\nDD_TWEEN_NAME = 'ddtrace.contrib.pyramid:trace_tween_factory'\nDD_SPAN = '_datadog_span'\n\ndef trace_pyramid(config):\n    config.include('ddtrace.contrib.pyramid')\n\ndef includeme(config):\n    # Add our tween just before the default exception handler\n    config.add_tween(DD_TWEEN_NAME, over=pyramid.tweens.EXCVIEW)\n    # ensure we only patch the renderer once.\n    if not isinstance(pyramid.renderers.RendererHelper.render, wrapt.ObjectProxy):\n        wrapt.wrap_function_wrapper('pyramid.renderers', 'RendererHelper.render', trace_render)\n\n\ndef trace_render(func, instance, args, kwargs):\n    # If the request is not traced, we do not trace\n    request = kwargs.get('request', {})\n    if not request:\n        log.debug(\"No request passed to render, will not be traced\")\n        return func(*args, **kwargs)\n    span = getattr(request, DD_SPAN, None)\n    if not span:\n        log.debug(\"No span found in request, will not be traced\")\n        return func(*args, **kwargs)\n\n    tracer = span.tracer()\n    with tracer.trace('pyramid.render') as span:\n        span.span_type = http.TEMPLATE\n        return func(*args, **kwargs)\n\ndef trace_tween_factory(handler, registry):\n    # configuration\n    settings = registry.settings\n    service = settings.get(SETTINGS_SERVICE) or 'pyramid'\n    tracer = settings.get(SETTINGS_TRACER) or ddtrace.tracer\n    enabled = asbool(settings.get(SETTINGS_TRACE_ENABLED, tracer.enabled))\n\n    # set the service info\n    tracer.set_service_info(\n        service=service,\n        app=\"pyramid\",\n        app_type=AppTypes.web)\n\n    if enabled:\n        # make a request tracing function\n        def trace_tween(request):\n            with tracer.trace('pyramid.request', service=service, resource='404') as span:\n                setattr(request, DD_SPAN, span)  # used to find the tracer in templates\n                response = None\n                try:\n                    response = handler(request)\n                except BaseException:\n                    span.set_tag(http.STATUS_CODE, 500)\n                    raise\n                finally:\n                    span.span_type = http.TYPE\n                    # set request tags\n                    span.set_tag(http.URL, request.path)\n                    span.set_tag(http.METHOD, request.method)\n                    if request.matched_route:\n                        span.resource = '{} {}'.format(request.method, request.matched_route.name)\n                        span.set_tag('pyramid.route.name', request.matched_route.name)\n                    # set response tags\n                    if response:\n                        span.set_tag(http.STATUS_CODE, response.status_code)\n                        if 500 <= response.status_code < 600:\n                            span.error = 1\n                return response\n        return trace_tween\n\n    # if timing support is not enabled, return the original handler\n    return handler\n", "path": "ddtrace/contrib/pyramid/trace.py"}]}