Skip to content

Commit c68a715

Browse files
committed
Reverting last commit and adding backward compatibility to 'username' and 'password' inside on_connect function
1 parent eebe6d3 commit c68a715

File tree

2 files changed

+12
-80
lines changed

2 files changed

+12
-80
lines changed

redis/connection.py

Lines changed: 12 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from itertools import chain
99
from queue import Empty, Full, LifoQueue
1010
from time import time
11-
from typing import Optional
1211
from urllib.parse import parse_qs, unquote, urlparse
1312

1413
from redis.backoff import NoBackoff
@@ -527,10 +526,8 @@ def __init__(
527526
)
528527

529528
self.credential_provider = credential_provider
530-
if username or password:
531-
# Keep backward compatibility by creating a static credential provider
532-
# for the passed username and password
533-
self.credential_provider = StaticCredentialProvider(username, password)
529+
self.password = password
530+
self.username = username
534531
self.socket_timeout = socket_timeout
535532
self.socket_connect_timeout = socket_connect_timeout or socket_timeout
536533
self.socket_keepalive = socket_keepalive
@@ -563,38 +560,6 @@ def __init__(
563560
self._connect_callbacks = []
564561
self._buffer_cutoff = 6000
565562

566-
@property
567-
def password(self) -> Optional[str]:
568-
if self.credential_provider is not None:
569-
return self.credential_provider.password
570-
else:
571-
return None
572-
573-
@password.setter
574-
def password(self, value: Optional[str]):
575-
if value is None:
576-
# Delete the credential provider
577-
self.credential_provider = None
578-
return
579-
if self.credential_provider is not None:
580-
self.credential_provider.password = value
581-
else:
582-
self.credential_provider = StaticCredentialProvider(password=value)
583-
584-
@property
585-
def username(self) -> Optional[str]:
586-
if self.credential_provider is not None:
587-
return self.credential_provider.username
588-
else:
589-
return None
590-
591-
@username.setter
592-
def username(self, value: Optional[str]):
593-
if self.credential_provider is not None:
594-
self.credential_provider.username = value
595-
else:
596-
self.credential_provider = StaticCredentialProvider(username=value)
597-
598563
def __repr__(self):
599564
repr_args = ",".join([f"{k}={v}" for k, v in self.repr_pieces()])
600565
return f"{self.__class__.__name__}<{repr_args}>"
@@ -721,9 +686,14 @@ def on_connect(self):
721686
"Initialize the connection, authenticate and select a database"
722687
self._parser.on_connect(self)
723688

724-
# if credentials provider is set, authenticate
725-
if self.credential_provider is not None:
726-
auth_args = self.credential_provider.get_credentials()
689+
# if credential provider or username and/or password are set, authenticate
690+
if self.credential_provider or (self.username or self.password):
691+
cred_provider = (
692+
self.credential_provider
693+
if self.credential_provider
694+
else StaticCredentialProvider(self.username, self.password)
695+
)
696+
auth_args = cred_provider.get_credentials()
727697
# avoid checking health here -- PING will fail if we try
728698
# to check the health prior to the AUTH
729699
self.send_command("AUTH", *auth_args, check_health=False)
@@ -1118,10 +1088,8 @@ def __init__(
11181088
"2. 'credential_provider'"
11191089
)
11201090
self.credential_provider = credential_provider
1121-
if username or password:
1122-
# Keep backward compatibility by creating a static credential provider
1123-
# for the passed username and password
1124-
self.credential_provider = StaticCredentialProvider(username, password)
1091+
self.password = password
1092+
self.username = username
11251093
self.socket_timeout = socket_timeout
11261094
self.retry_on_timeout = retry_on_timeout
11271095
if retry_on_error is SENTINEL:
@@ -1150,38 +1118,6 @@ def __init__(
11501118
self._connect_callbacks = []
11511119
self._buffer_cutoff = 6000
11521120

1153-
@property
1154-
def password(self) -> Optional[str]:
1155-
if self.credential_provider is not None:
1156-
return self.credential_provider.password
1157-
else:
1158-
return None
1159-
1160-
@password.setter
1161-
def password(self, value: Optional[str]):
1162-
if value is None:
1163-
# Delete the credential provider
1164-
self.credential_provider = None
1165-
return
1166-
if self.credential_provider is not None:
1167-
self.credential_provider.password = value
1168-
else:
1169-
self.credential_provider = StaticCredentialProvider(password=value)
1170-
1171-
@property
1172-
def username(self) -> Optional[str]:
1173-
if self.credential_provider is not None:
1174-
return self.credential_provider.username
1175-
else:
1176-
return None
1177-
1178-
@username.setter
1179-
def username(self, value: Optional[str]):
1180-
if self.credential_provider is not None:
1181-
self.credential_provider.username = value
1182-
else:
1183-
self.credential_provider = StaticCredentialProvider(username=value)
1184-
11851121
def repr_pieces(self):
11861122
pieces = [("path", self.path), ("db", self.db)]
11871123
if self.client_name:

tests/test_credentials.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,10 @@ def test_change_username_password_on_existing_connection(self, r, request):
199199
init_acl_user(r, request, new_username, new_password)
200200
conn.password = new_password
201201
conn.username = new_username
202-
assert conn.credential_provider.password == new_password
203-
assert conn.credential_provider.username == new_username
204202
conn.send_command("PING")
205203
assert str_if_bytes(conn.read_response()) == "PONG"
206204
conn.username = None
207-
assert conn.credential_provider.username == ""
208205
conn.password = None
209-
assert conn.credential_provider is None
210206

211207

212208
class TestStaticCredentialProvider:

0 commit comments

Comments
 (0)