Skip to content

Commit cece303

Browse files
committed
Revert "Merge branch '2.x-staging' into conti/support-aws-api-gateway"
This reverts commit fe7e93f, reversing changes made to 4ae108b.
1 parent b8e2095 commit cece303

File tree

97 files changed

+635
-888
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

+635
-888
lines changed

ddtrace/_trace/pin.py

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import wrapt
77

88
import ddtrace
9+
from ddtrace.vendor.debtcollector import deprecate
910

1011
from ..internal.logger import get_logger
1112

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

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

3637
def __init__(
3738
self,
3839
service=None, # type: Optional[str]
3940
tags=None, # type: Optional[Dict[str, str]]
41+
tracer=None,
4042
_config=None, # type: Optional[Dict[str, Any]]
4143
):
4244
# 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
4352
self.tags = tags
44-
self._tracer = ddtrace.tracer
53+
self.tracer = tracer
4554
self._target = None # type: Optional[int]
4655
# keep the configuration attribute internal because the
4756
# public API to access it is not the Pin class
@@ -59,14 +68,10 @@ def service(self):
5968
return self._config["service_name"]
6069

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

66-
@property
67-
def tracer(self):
68-
return self._tracer
69-
7075
def __repr__(self):
7176
return "Pin(service=%s, tags=%s, tracer=%s)" % (self.service, self.tags, self.tracer)
7277

@@ -122,6 +127,7 @@ def override(
122127
obj, # type: Any
123128
service=None, # type: Optional[str]
124129
tags=None, # type: Optional[Dict[str, str]]
130+
tracer=None,
125131
):
126132
# type: (...) -> None
127133
"""Override an object with the given attributes.
@@ -133,32 +139,20 @@ def override(
133139
>>> # Override a pin for a specific connection
134140
>>> Pin.override(conn, service='user-db')
135141
"""
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-
"""
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+
)
150148
if not obj:
151149
return
152150

153151
pin = cls.get_from(obj)
154152
if pin is None:
155-
pin = Pin(service=service, tags=tags)
153+
Pin(service=service, tags=tags, tracer=tracer).onto(obj)
156154
else:
157-
pin = pin.clone(service=service, tags=tags)
158-
159-
if tracer:
160-
pin._tracer = tracer
161-
pin.onto(obj)
155+
pin.clone(service=service, tags=tags, tracer=tracer).onto(obj)
162156

163157
def enabled(self):
164158
# type: () -> bool
@@ -204,22 +198,21 @@ def clone(
204198
self,
205199
service=None, # type: Optional[str]
206200
tags=None, # type: Optional[Dict[str, str]]
201+
tracer=None,
207202
):
208203
# type: (...) -> Pin
209204
"""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"""
219205
# do a shallow copy of Pin dicts
220206
if not tags and self.tags:
221207
tags = self.tags.copy()
222208

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+
223216
# we use a copy instead of a deepcopy because we expect configurations
224217
# to have only a root level dictionary without nested objects. Using
225218
# deepcopy introduces a big overhead:
@@ -228,10 +221,9 @@ def _clone(
228221
# deepcopy: 0.2787208557128906
229222
config = self._config.copy()
230223

231-
pin = Pin(
224+
return Pin(
232225
service=service or self.service,
233226
tags=tags,
227+
tracer=tracer or self.tracer, # do not clone the Tracer
234228
_config=config,
235229
)
236-
pin._tracer = tracer or self.tracer
237-
return pin

ddtrace/contrib/internal/asgi/middleware.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,12 @@ 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-
pin = ddtrace.trace.Pin(service="asgi")
154-
pin._tracer = self.tracer
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)
155159

156160
with core.context_with_data(
157161
"asgi.__call__",

ddtrace/contrib/internal/django/patch.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import wrapt
1818
from wrapt.importer import when_imported
1919

20+
import ddtrace
2021
from ddtrace import config
2122
from ddtrace.appsec._utils import _UserInfoRetriever
2223
from ddtrace.constants import SPAN_KIND
@@ -148,9 +149,12 @@ def cursor(django, pin, func, instance, args, kwargs):
148149
tags = {"django.db.vendor": vendor, "django.db.alias": alias}
149150
tags.update(getattr(conn, "_datadog_tags", {}))
150151

151-
tracer = pin.tracer
152-
pin = Pin(service, tags=tags)
153-
pin._tracer = tracer
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)
154158

155159
cursor = func(*args, **kwargs)
156160

ddtrace/contrib/internal/mongoengine/trace.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ def __call__(self, *args, **kwargs):
2929
client = self.__wrapped__(*args, **kwargs)
3030
pin = ddtrace.trace.Pin.get_from(self)
3131
if pin:
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)
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)
3738

3839
return client

ddtrace/contrib/internal/pylibmc/client.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,12 @@ 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-
pin = ddtrace.trace.Pin(service=schematized_service)
55-
pin._tracer = tracer
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)
5660
pin.onto(self)
5761

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

ddtrace/contrib/internal/sqlalchemy/engine.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,12 @@ 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-
pin = Pin(service=self.service)
71-
pin._tracer = self.tracer
72-
pin.onto(engine)
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)
7376

7477
listen(engine, "before_cursor_execute", self._before_cur_exec)
7578
listen(engine, "after_cursor_execute", self._after_cur_exec)

ddtrace/contrib/internal/tornado/application.py

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

57-
pin = ddtrace.trace.Pin(service=service)
58-
pin._tracer = tracer
59-
pin.onto(template)
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)

releasenotes/notes/remove-deprecations-from-pin-a700ae0cb6d51d03.yaml

Lines changed: 0 additions & 4 deletions
This file was deleted.

tests/appsec/contrib_appsec/django_app/urls.py

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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)