Skip to content

Commit 902a320

Browse files
committed
cleanup
1 parent cb7e107 commit 902a320

File tree

2 files changed

+30
-31
lines changed

2 files changed

+30
-31
lines changed

sentry_sdk/integrations/django/__init__.py

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -626,11 +626,9 @@ def _cache_database_configurations():
626626
"""
627627
global _cached_db_configs, _cache_initialized
628628

629-
# Fast path: if already initialized, return immediately
630629
if _cache_initialized:
631630
return
632631

633-
# Slow path: acquire lock and check again (double-checked locking)
634632
with _cache_lock:
635633
if _cache_initialized:
636634
return
@@ -644,23 +642,24 @@ def _cache_database_configurations():
644642
continue
645643

646644
with capture_internal_exceptions():
645+
try:
646+
db_wrapper = connections[alias]
647+
except (KeyError, Exception):
648+
db_wrapper = None
649+
647650
_cached_db_configs[alias] = {
648651
"db_name": db_config.get("NAME"),
649652
"host": db_config.get("HOST", "localhost"),
650653
"port": db_config.get("PORT"),
651654
"unix_socket": db_config.get("OPTIONS", {}).get("unix_socket"),
652655
"engine": db_config.get("ENGINE"),
656+
"vendor": (
657+
db_wrapper.vendor
658+
if db_wrapper and hasattr(db_wrapper, "vendor")
659+
else None
660+
),
653661
}
654662

655-
try:
656-
db_wrapper = connections[alias]
657-
except (KeyError, Exception):
658-
continue
659-
660-
if hasattr(db_wrapper, "vendor"):
661-
_cached_db_configs[alias]["vendor"] = db_wrapper.vendor
662-
663-
# Mark as initialized only after successful completion
664663
_cache_initialized = True
665664

666665
except Exception as e:
@@ -772,22 +771,22 @@ def _set_db_data(span, cursor_or_db):
772771
# Use pre-cached configuration
773772
cached_config = _cached_db_configs.get(db_alias) if db_alias else None
774773
if cached_config:
775-
if cached_config["db_name"]:
774+
if cached_config.get("db_name"):
776775
span.set_data(SPANDATA.DB_NAME, cached_config["db_name"])
777-
if cached_config["host"]:
776+
if cached_config.get("host"):
778777
span.set_data(SPANDATA.SERVER_ADDRESS, cached_config["host"])
779-
if cached_config["port"]:
778+
if cached_config.get("port"):
780779
span.set_data(SPANDATA.SERVER_PORT, str(cached_config["port"]))
781-
if cached_config["unix_socket"]:
780+
if cached_config.get("unix_socket"):
782781
span.set_data(SPANDATA.SERVER_SOCKET_ADDRESS, cached_config["unix_socket"])
783782
return # Success - exit early
784783

785784
# Fallback to dynamic database metadata collection.
786785
# This is the edge case where db configuration is not in Django's `DATABASES` setting.
787786
try:
788-
# Method 1: Try db.get_connection_params() first (NO CONNECTION ACCESS)
787+
# Fallback 1: Try db.get_connection_params() first (NO CONNECTION ACCESS)
789788
logger.debug(
790-
"Cached db connection config retrieval failed for %s. Trying db.get_connection_params().",
789+
"Cached db connection params retrieval failed for %s. Trying db.get_connection_params().",
791790
db_alias,
792791
)
793792
try:
@@ -796,24 +795,24 @@ def _set_db_data(span, cursor_or_db):
796795
db_name = connection_params.get("dbname") or connection_params.get(
797796
"database"
798797
)
799-
if db_name is not None:
798+
if db_name:
800799
span.set_data(SPANDATA.DB_NAME, db_name)
801800

802801
host = connection_params.get("host")
803-
if host is not None:
802+
if host:
804803
span.set_data(SPANDATA.SERVER_ADDRESS, host)
805804

806805
port = connection_params.get("port")
807-
if port is not None:
806+
if port:
808807
span.set_data(SPANDATA.SERVER_PORT, str(port))
809808

810809
unix_socket = connection_params.get("unix_socket")
811-
if unix_socket is not None:
810+
if unix_socket:
812811
span.set_data(SPANDATA.SERVER_SOCKET_ADDRESS, unix_socket)
813812
return # Success - exit early to avoid connection access
814813

815814
except (KeyError, ImproperlyConfigured, AttributeError):
816-
# Method 2: Last resort - direct connection access (CONNECTION POOL RISK)
815+
# Fallback 2: Last resort - direct connection access (CONNECTION POOL RISK)
817816
logger.debug(
818817
"db.get_connection_params() failed for %s, trying direct connection access",
819818
db_alias,
@@ -848,19 +847,19 @@ def _set_db_data(span, cursor_or_db):
848847
db_name = connection_params.get("dbname") or connection_params.get(
849848
"database"
850849
)
851-
if db_name is not None:
850+
if db_name:
852851
span.set_data(SPANDATA.DB_NAME, db_name)
853852

854853
host = connection_params.get("host")
855-
if host is not None:
854+
if host:
856855
span.set_data(SPANDATA.SERVER_ADDRESS, host)
857856

858857
port = connection_params.get("port")
859-
if port is not None:
858+
if port:
860859
span.set_data(SPANDATA.SERVER_PORT, str(port))
861860

862861
unix_socket = connection_params.get("unix_socket")
863-
if unix_socket is not None:
862+
if unix_socket:
864863
span.set_data(SPANDATA.SERVER_SOCKET_ADDRESS, unix_socket)
865864

866865
except Exception as e:

tests/integrations/django/test_db_query_data.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -963,10 +963,10 @@ def test_set_db_data_empty_cached_values(sentry_init):
963963
mock_cursor.db = mock_db
964964

965965
_cached_db_configs["empty_config_db"] = {
966-
"db_name": None, # Should not be set
967-
"host": "", # Should not be set (empty string)
968-
"port": None, # Should not be set
969-
"unix_socket": None, # Should not be set
966+
"db_name": None,
967+
"host": None,
968+
"port": None,
969+
"unix_socket": None,
970970
"engine": "django.db.backends.postgresql",
971971
"vendor": "postgresql",
972972
}
@@ -983,7 +983,7 @@ def test_set_db_data_empty_cached_values(sentry_init):
983983
# Verify empty/None values were not set
984984
not_expected_calls = [
985985
mock.call("db.name", None),
986-
mock.call("server.address", ""),
986+
mock.call("server.address", None),
987987
mock.call("server.port", None),
988988
mock.call("server.socket.address", None),
989989
]

0 commit comments

Comments
 (0)