Skip to content

Commit 90bad31

Browse files
committed
Fix issues aws#416
1 parent 9a9f483 commit 90bad31

File tree

1 file changed

+14
-11
lines changed
  • aws_xray_sdk/ext/sqlalchemy_core

1 file changed

+14
-11
lines changed

aws_xray_sdk/ext/sqlalchemy_core/patch.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import sys
3-
from urllib.parse import urlparse, uses_netloc
3+
from urllib.parse import urlparse, uses_netloc, quote_plus
44

55
import wrapt
66
from sqlalchemy.sql.expression import ClauseElement
@@ -14,18 +14,21 @@
1414
def _sql_meta(engine_instance, args):
1515
try:
1616
metadata = {}
17-
url = urlparse(str(engine_instance.engine.url))
17+
# Workaround for https://github.com/sqlalchemy/sqlalchemy/issues/10662
18+
# sqlalchemy.engine.url.URL's __repr__ does not url encode username nor password.
19+
# This will continue to work once sqlalchemy fixes the bug.
20+
sa_url = engine_instance.engine.url
21+
username = sa_url.username
22+
sa_url = sa_url._replace(username=None, password=None)
23+
url = urlparse(str(sa_url))
24+
name = url.netloc
25+
if username:
26+
# Restore url encoded username
27+
quoted_username = quote_plus(username)
28+
url = url._replace(netloc='{}@{}'.format(quoted_username, url.netloc))
1829
# Add Scheme to uses_netloc or // will be missing from url.
1930
uses_netloc.append(url.scheme)
20-
if url.password is None:
21-
metadata['url'] = url.geturl()
22-
name = url.netloc
23-
else:
24-
# Strip password from URL
25-
host_info = url.netloc.rpartition('@')[-1]
26-
parts = url._replace(netloc='{}@{}'.format(url.username, host_info))
27-
metadata['url'] = parts.geturl()
28-
name = host_info
31+
metadata['url'] = url.geturl()
2932
metadata['user'] = url.username
3033
metadata['database_type'] = engine_instance.engine.name
3134
try:

0 commit comments

Comments
 (0)