Skip to content

Commit b5d62ad

Browse files
committed
Revert "Revert "Merge branch '2.x-staging' into conti/support-aws-api-gateway""
This reverts commit cece303.
1 parent 250a34f commit b5d62ad

File tree

97 files changed

+888
-635
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+888
-635
lines changed

ddtrace/_trace/pin.py

+39-31
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import wrapt
77

88
import ddtrace
9-
from ddtrace.vendor.debtcollector import deprecate
109

1110
from ..internal.logger import get_logger
1211

@@ -32,25 +31,17 @@ class Pin(object):
3231
>>> conn = sqlite.connect('/tmp/image.db')
3332
"""
3433

35-
__slots__ = ["tags", "tracer", "_target", "_config", "_initialized"]
34+
__slots__ = ["tags", "_tracer", "_target", "_config", "_initialized"]
3635

3736
def __init__(
3837
self,
3938
service=None, # type: Optional[str]
4039
tags=None, # type: Optional[Dict[str, str]]
41-
tracer=None,
4240
_config=None, # type: Optional[Dict[str, Any]]
4341
):
4442
# type: (...) -> None
45-
if tracer is not None and tracer is not ddtrace.tracer:
46-
deprecate(
47-
"Initializing ddtrace.trace.Pin with `tracer` argument is deprecated",
48-
message="All Pin instances should use the global tracer instance",
49-
removal_version="3.0.0",
50-
)
51-
tracer = tracer or ddtrace.tracer
5243
self.tags = tags
53-
self.tracer = tracer
44+
self._tracer = ddtrace.tracer
5445
self._target = None # type: Optional[int]
5546
# keep the configuration attribute internal because the
5647
# public API to access it is not the Pin class
@@ -68,10 +59,14 @@ def service(self):
6859
return self._config["service_name"]
6960

7061
def __setattr__(self, name, value):
71-
if getattr(self, "_initialized", False) and name != "_target":
62+
if getattr(self, "_initialized", False) and name not in ("_target", "_tracer"):
7263
raise AttributeError("can't mutate a pin, use override() or clone() instead")
7364
super(Pin, self).__setattr__(name, value)
7465

66+
@property
67+
def tracer(self):
68+
return self._tracer
69+
7570
def __repr__(self):
7671
return "Pin(service=%s, tags=%s, tracer=%s)" % (self.service, self.tags, self.tracer)
7772

@@ -127,7 +122,6 @@ def override(
127122
obj, # type: Any
128123
service=None, # type: Optional[str]
129124
tags=None, # type: Optional[Dict[str, str]]
130-
tracer=None,
131125
):
132126
# type: (...) -> None
133127
"""Override an object with the given attributes.
@@ -139,20 +133,32 @@ def override(
139133
>>> # Override a pin for a specific connection
140134
>>> Pin.override(conn, service='user-db')
141135
"""
142-
if tracer is not None:
143-
deprecate(
144-
"Calling ddtrace.trace.Pin.override(...) with the `tracer` argument is deprecated",
145-
message="All Pin instances should use the global tracer instance",
146-
removal_version="3.0.0",
147-
)
136+
Pin._override(obj, service=service, tags=tags)
137+
138+
@classmethod
139+
def _override(
140+
cls,
141+
obj, # type: Any
142+
service=None, # type: Optional[str]
143+
tags=None, # type: Optional[Dict[str, str]]
144+
tracer=None,
145+
):
146+
# type: (...) -> None
147+
"""
148+
Internal method that allows overriding the global tracer in tests
149+
"""
148150
if not obj:
149151
return
150152

151153
pin = cls.get_from(obj)
152154
if pin is None:
153-
Pin(service=service, tags=tags, tracer=tracer).onto(obj)
155+
pin = Pin(service=service, tags=tags)
154156
else:
155-
pin.clone(service=service, tags=tags, tracer=tracer).onto(obj)
157+
pin = pin.clone(service=service, tags=tags)
158+
159+
if tracer:
160+
pin._tracer = tracer
161+
pin.onto(obj)
156162

157163
def enabled(self):
158164
# type: () -> bool
@@ -198,21 +204,22 @@ def clone(
198204
self,
199205
service=None, # type: Optional[str]
200206
tags=None, # type: Optional[Dict[str, str]]
201-
tracer=None,
202207
):
203208
# type: (...) -> Pin
204209
"""Return a clone of the pin with the given attributes replaced."""
210+
return self._clone(service=service, tags=tags)
211+
212+
def _clone(
213+
self,
214+
service=None, # type: Optional[str]
215+
tags=None, # type: Optional[Dict[str, str]]
216+
tracer=None,
217+
):
218+
"""Internal method that can clone the tracer from an existing Pin. This is used in tests"""
205219
# do a shallow copy of Pin dicts
206220
if not tags and self.tags:
207221
tags = self.tags.copy()
208222

209-
if tracer is not None:
210-
deprecate(
211-
"Initializing ddtrace.trace.Pin with `tracer` argument is deprecated",
212-
message="All Pin instances should use the global tracer instance",
213-
removal_version="3.0.0",
214-
)
215-
216223
# we use a copy instead of a deepcopy because we expect configurations
217224
# to have only a root level dictionary without nested objects. Using
218225
# deepcopy introduces a big overhead:
@@ -221,9 +228,10 @@ def clone(
221228
# deepcopy: 0.2787208557128906
222229
config = self._config.copy()
223230

224-
return Pin(
231+
pin = Pin(
225232
service=service or self.service,
226233
tags=tags,
227-
tracer=tracer or self.tracer, # do not clone the Tracer
228234
_config=config,
229235
)
236+
pin._tracer = tracer or self.tracer
237+
return pin

ddtrace/contrib/internal/asgi/middleware.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,8 @@ async def __call__(self, scope, receive, send):
150150
if scope["type"] == "http":
151151
operation_name = schematize_url_operation(operation_name, direction=SpanDirection.INBOUND, protocol="http")
152152

153-
# Calling ddtrace.trace.Pin(...) with the `tracer` argument is deprecated
154-
# Remove this if statement when the `tracer` argument is removed
155-
if self.tracer is ddtrace.tracer:
156-
pin = ddtrace.trace.Pin(service="asgi")
157-
else:
158-
pin = ddtrace.trace.Pin(service="asgi", tracer=self.tracer)
153+
pin = ddtrace.trace.Pin(service="asgi")
154+
pin._tracer = self.tracer
159155

160156
with core.context_with_data(
161157
"asgi.__call__",

ddtrace/contrib/internal/django/patch.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import wrapt
1818
from wrapt.importer import when_imported
1919

20-
import ddtrace
2120
from ddtrace import config
2221
from ddtrace.appsec._utils import _UserInfoRetriever
2322
from ddtrace.constants import SPAN_KIND
@@ -149,12 +148,9 @@ def cursor(django, pin, func, instance, args, kwargs):
149148
tags = {"django.db.vendor": vendor, "django.db.alias": alias}
150149
tags.update(getattr(conn, "_datadog_tags", {}))
151150

152-
# Calling ddtrace.pin.Pin(...) with the `tracer` argument generates a deprecation warning.
153-
# Remove this if statement when the `tracer` argument is removed
154-
if pin.tracer is ddtrace.tracer:
155-
pin = Pin(service, tags=tags)
156-
else:
157-
pin = Pin(service, tags=tags, tracer=pin.tracer)
151+
tracer = pin.tracer
152+
pin = Pin(service, tags=tags)
153+
pin._tracer = tracer
158154

159155
cursor = func(*args, **kwargs)
160156

ddtrace/contrib/internal/mongoengine/trace.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,10 @@ def __call__(self, *args, **kwargs):
2929
client = self.__wrapped__(*args, **kwargs)
3030
pin = ddtrace.trace.Pin.get_from(self)
3131
if pin:
32-
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
33-
# Remove this if statement when the `tracer` argument is removed
34-
if pin.tracer is ddtrace.tracer:
35-
ddtrace.trace.Pin(service=pin.service).onto(client)
36-
else:
37-
ddtrace.trace.Pin(service=pin.service, tracer=pin.tracer).onto(client)
32+
tracer = pin.tracer
33+
pp = ddtrace.trace.Pin(service=pin.service)
34+
if tracer is not None:
35+
pp._tracer = tracer
36+
pp.onto(client)
3837

3938
return client

ddtrace/contrib/internal/pylibmc/client.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,8 @@ def __init__(self, client=None, service=memcached.SERVICE, tracer=None, *args, *
5151
super(TracedClient, self).__init__(client)
5252

5353
schematized_service = schematize_service_name(service)
54-
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
55-
# Remove this if statement when the `tracer` argument is removed
56-
if tracer is ddtrace.tracer:
57-
pin = ddtrace.trace.Pin(service=schematized_service)
58-
else:
59-
pin = ddtrace.trace.Pin(service=schematized_service, tracer=tracer)
54+
pin = ddtrace.trace.Pin(service=schematized_service)
55+
pin._tracer = tracer
6056
pin.onto(self)
6157

6258
# attempt to collect the pool of urls this client talks to

ddtrace/contrib/internal/sqlalchemy/engine.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,9 @@ def __init__(self, tracer, service, engine):
6767
self.name = schematize_database_operation("%s.query" % self.vendor, database_provider=self.vendor)
6868

6969
# attach the PIN
70-
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
71-
# Remove this if statement when the `tracer` argument is removed
72-
if self.tracer is ddtrace.tracer:
73-
Pin(service=self.service).onto(engine)
74-
else:
75-
Pin(tracer=tracer, service=self.service).onto(engine)
70+
pin = Pin(service=self.service)
71+
pin._tracer = self.tracer
72+
pin.onto(engine)
7673

7774
listen(engine, "before_cursor_execute", self._before_cur_exec)
7875
listen(engine, "after_cursor_execute", self._after_cur_exec)

ddtrace/contrib/internal/tornado/application.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@ def tracer_config(__init__, app, args, kwargs):
5454
if tags:
5555
tracer.set_tags(tags)
5656

57-
# configure the PIN object for template rendering
58-
# Required for backwards compatibility. Remove the else clause when
59-
# the `ddtrace.trace.Pin` object no longer accepts the Pin argument.
60-
if tracer is ddtrace.tracer:
61-
ddtrace.trace.Pin(service=service).onto(template)
62-
else:
63-
ddtrace.trace.Pin(service=service, tracer=tracer).onto(template)
57+
pin = ddtrace.trace.Pin(service=service)
58+
pin._tracer = tracer
59+
pin.onto(template)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
upgrade:
3+
- |
4+
tracing: Removes support for overriding the global tracer in ``ddtrace.trace.Pin``

tests/appsec/contrib_appsec/django_app/urls.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def login_user(request):
196196
def new_service(request, service_name: str):
197197
import ddtrace
198198

199-
ddtrace.trace.Pin.override(django, service=service_name, tracer=ddtrace.tracer)
199+
ddtrace.trace.Pin._override(django, service=service_name, tracer=ddtrace.tracer)
200200
return HttpResponse(service_name, status=200)
201201

202202

tests/appsec/contrib_appsec/fastapi_app/app.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ async def multi_view_no_param(request: Request): # noqa: B008
104104
async def new_service(service_name: str, request: Request): # noqa: B008
105105
import ddtrace
106106

107-
ddtrace.trace.Pin.override(app, service=service_name, tracer=ddtrace.tracer)
107+
ddtrace.trace.Pin._override(app, service=service_name, tracer=ddtrace.tracer)
108108
return HTMLResponse(service_name, 200)
109109

110110
async def slow_numbers(minimum, maximum):

tests/appsec/contrib_appsec/flask_app/app.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def multi_view(param_int=0, param_str=""):
5555
def new_service(service_name: str):
5656
import ddtrace
5757

58-
ddtrace.trace.Pin.override(Flask, service=service_name, tracer=ddtrace.tracer)
58+
ddtrace.trace.Pin._override(Flask, service=service_name, tracer=ddtrace.tracer)
5959
return service_name
6060

6161

tests/appsec/contrib_appsec/test_flask.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def setUp(self):
3737
self.app = app
3838
self.app.test_client_class = DDFlaskTestClient
3939
self.client = self.app.test_client()
40-
Pin.override(self.app, tracer=self.tracer)
40+
Pin._override(self.app, tracer=self.tracer)
4141

4242
def tearDown(self):
4343
super(BaseFlaskTestCase, self).tearDown()

tests/appsec/contrib_appsec/utils.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,7 @@ def test_tracer():
15681568
@contextmanager
15691569
def post_tracer(interface):
15701570
original_tracer = getattr(ddtrace.trace.Pin.get_from(interface.framework), "tracer", None)
1571-
ddtrace.trace.Pin.override(interface.framework, tracer=interface.tracer)
1571+
ddtrace.trace.Pin._override(interface.framework, tracer=interface.tracer)
15721572
yield
15731573
if original_tracer is not None:
1574-
ddtrace.trace.Pin.override(interface.framework, tracer=original_tracer)
1574+
ddtrace.trace.Pin._override(interface.framework, tracer=original_tracer)

tests/appsec/integrations/django_tests/conftest.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def tracer():
5050
# Patch Django and override tracer to be our test tracer
5151
pin = Pin.get_from(django)
5252
original_tracer = pin.tracer
53-
Pin.override(django, tracer=tracer)
53+
Pin._override(django, tracer=tracer)
5454

5555
# Yield to our test
5656
yield tracer
@@ -59,7 +59,7 @@ def tracer():
5959
# Reset the tracer pinned to Django and unpatch
6060
# DEV: unable to properly unpatch and reload django app with each test
6161
# unpatch()
62-
Pin.override(django, tracer=original_tracer)
62+
Pin._override(django, tracer=original_tracer)
6363

6464

6565
@pytest.fixture

tests/contrib/aiobotocore/utils.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ async def aiobotocore_client(service, tracer):
4242
client, aiobotocore.session.ClientCreatorContext
4343
):
4444
async with client as client:
45-
Pin.override(client, tracer=tracer)
45+
Pin._override(client, tracer=tracer)
4646
await yield_(client)
4747

4848
else:
49-
Pin.override(client, tracer=tracer)
49+
Pin._override(client, tracer=tracer)
5050
try:
5151
await yield_(client)
5252
finally:

tests/contrib/aiohttp/test_aiohttp_client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def test_configure_service_name_pin(ddtrace_run_python_code_in_subprocess):
189189
190190
async def test():
191191
async with aiohttp.ClientSession() as session:
192-
Pin.override(session, service="pin-custom-svc")
192+
Pin._override(session, service="pin-custom-svc")
193193
async with session.get(URL_200) as resp:
194194
pass
195195

tests/contrib/aiohttp_jinja2/conftest.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
def patched_app_tracer_jinja(patched_app_tracer): # noqa: F811
1414
app, tracer = patched_app_tracer
1515
patch()
16-
Pin.override(aiohttp_jinja2, tracer=tracer)
16+
Pin._override(aiohttp_jinja2, tracer=tracer)
1717
yield app, tracer
1818
unpatch()
1919

@@ -22,6 +22,6 @@ def patched_app_tracer_jinja(patched_app_tracer): # noqa: F811
2222
def untraced_app_tracer_jinja(untraced_app_tracer): # noqa: F811
2323
patch()
2424
app, tracer = untraced_app_tracer
25-
Pin.override(aiohttp_jinja2, tracer=tracer)
25+
Pin._override(aiohttp_jinja2, tracer=tracer)
2626
yield app, tracer
2727
unpatch()

tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ async def test_template_rendering(untraced_app_tracer_jinja, aiohttp_client):
3535

3636
async def test_template_rendering_snapshot(untraced_app_tracer_jinja, aiohttp_client, snapshot_context):
3737
app, _ = untraced_app_tracer_jinja
38-
Pin.override(aiohttp_jinja2, tracer=tracer)
38+
Pin._override(aiohttp_jinja2, tracer=tracer)
3939
with snapshot_context():
4040
client = await aiohttp_client(app)
4141
# it should trace a template rendering
@@ -51,7 +51,7 @@ async def test_template_rendering_snapshot_patched_server(
5151
use_global_tracer,
5252
):
5353
app, _ = patched_app_tracer_jinja
54-
Pin.override(aiohttp_jinja2, tracer=tracer)
54+
Pin._override(aiohttp_jinja2, tracer=tracer)
5555
# Ignore meta.http.url tag as the port is not fixed on the server
5656
with snapshot_context(ignores=["meta.http.url", "meta.http.useragent"]):
5757
client = await aiohttp_client(app)

0 commit comments

Comments
 (0)