Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Send PII to Spotlight when no DSN is set #3804

Merged
merged 10 commits into from
Nov 21, 2024
12 changes: 10 additions & 2 deletions sentry_sdk/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,11 @@ def _get_options(*args, **kwargs):
rv["traces_sample_rate"] = 1.0

if rv["event_scrubber"] is None:
rv["event_scrubber"] = EventScrubber(send_default_pii=rv["send_default_pii"])
rv["event_scrubber"] = EventScrubber(
send_default_pii=(
False if rv["send_default_pii"] is None else rv["send_default_pii"]
)
)

if rv["socket_options"] and not isinstance(rv["socket_options"], list):
logger.warning(
Expand Down Expand Up @@ -451,7 +455,11 @@ def should_send_default_pii(self):

Returns whether the client should send default PII (Personally Identifiable Information) data to Sentry.
"""
return self.options.get("send_default_pii", False)
result = self.options.get("send_default_pii")
if result is None:
result = not self.options["dsn"] and self.spotlight is not None

return result

@property
def dsn(self):
Expand Down
3 changes: 2 additions & 1 deletion sentry_sdk/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@ class OP:
# This type exists to trick mypy and PyCharm into thinking `init` and `Client`
# take these arguments (even though they take opaque **kwargs)
class ClientConstructor:

def __init__(
self,
dsn=None, # type: Optional[str]
Expand All @@ -506,7 +507,7 @@ def __init__(
transport=None, # type: Optional[Union[sentry_sdk.transport.Transport, Type[sentry_sdk.transport.Transport], Callable[[Event], None]]]
transport_queue_size=DEFAULT_QUEUE_SIZE, # type: int
sample_rate=1.0, # type: float
send_default_pii=False, # type: bool
send_default_pii=None, # type: Optional[bool]
http_proxy=None, # type: Optional[str]
https_proxy=None, # type: Optional[str]
ignore_errors=[], # type: Sequence[Union[type, str]] # noqa: B006
Expand Down
18 changes: 18 additions & 0 deletions tests/test_scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -811,6 +811,24 @@ def test_should_send_default_pii_false(sentry_init):
assert should_send_default_pii() is False


def test_should_send_default_pii_default_false(sentry_init):
sentry_init()

assert should_send_default_pii() is False


def test_should_send_default_pii_false_with_dsn_and_spotlight(sentry_init):
sentry_init(dsn="http://key@localhost/1", spotlight=True)

assert should_send_default_pii() is False


def test_should_send_default_pii_true_without_dsn_and_spotlight(sentry_init):
sentry_init(spotlight=True)

assert should_send_default_pii() is True


def test_set_tags():
scope = Scope()
scope.set_tags({"tag1": "value1", "tag2": "value2"})
Expand Down
Loading