Skip to content

Commit

Permalink
Probe for psycopg2 and psycopg3 parameters function.
Browse files Browse the repository at this point in the history
  • Loading branch information
antonpirker committed Nov 7, 2023
1 parent c5b915d commit 7420168
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions sentry_sdk/integrations/django/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -666,20 +666,29 @@ def _set_db_data(span, cursor_or_db):
vendor = db.vendor
span.set_data(SPANDATA.DB_SYSTEM, vendor)

if (
# Some custom backends override `__getattr__`, making it look like `cursor_or_db`
# actually has a `connection` and the `connection` has a `get_dsn_parameters`
# attribute, only to throw an error once you actually want to call it.
# Hence the `inspect` check whether `get_dsn_parameters` is an actual callable
# function.
is_psycopg2 = (

Check warning on line 674 in sentry_sdk/integrations/django/__init__.py

View check run for this annotation

Codecov / codecov/patch

sentry_sdk/integrations/django/__init__.py#L674

Added line #L674 was not covered by tests
hasattr(cursor_or_db, "connection")
and hasattr(cursor_or_db.connection, "get_dsn_parameters")
and inspect.isfunction(cursor_or_db.connection.get_dsn_parameters)
):
# Some custom backends override `__getattr__`, making it look like `cursor_or_db`
# actually has a `connection` and the `connection` has a `get_dsn_parameters`
# attribute, only to throw an error once you actually want to call it.
# Hence the `inspect` check whether `get_dsn_parameters` is an actual callable
# function.
)
if is_psycopg2:
connection_params = cursor_or_db.connection.get_dsn_parameters()

else:
connection_params = db.get_connection_params()
is_psycopg3 = (

Check warning on line 682 in sentry_sdk/integrations/django/__init__.py

View check run for this annotation

Codecov / codecov/patch

sentry_sdk/integrations/django/__init__.py#L682

Added line #L682 was not covered by tests
hasattr(cursor_or_db, "connection")
and hasattr(cursor_or_db.connection, "info")
and hasattr(cursor_or_db.connection.info, "get_parameters")
and inspect.isfunction(cursor_or_db.connection.info.get_parameters)
)
if is_psycopg3:
connection_params = cursor_or_db.connection.info.get_parameters()

Check warning on line 689 in sentry_sdk/integrations/django/__init__.py

View check run for this annotation

Codecov / codecov/patch

sentry_sdk/integrations/django/__init__.py#L689

Added line #L689 was not covered by tests
else:
connection_params = db.get_connection_params()

Check warning on line 691 in sentry_sdk/integrations/django/__init__.py

View check run for this annotation

Codecov / codecov/patch

sentry_sdk/integrations/django/__init__.py#L691

Added line #L691 was not covered by tests

db_name = connection_params.get("dbname") or connection_params.get("database")
if db_name is not None:
Expand Down

0 comments on commit 7420168

Please sign in to comment.