Skip to content

Commit d238102

Browse files
committed
Refactor: extract resolve_driver_info helper to eliminate duplication
1 parent 8ac45fe commit d238102

File tree

5 files changed

+48
-40
lines changed

5 files changed

+48
-40
lines changed

redis/asyncio/client.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
list_or_args,
5454
)
5555
from redis.credentials import CredentialProvider
56-
from redis.driver_info import DriverInfo
56+
from redis.driver_info import DriverInfo, resolve_driver_info
5757
from redis.event import (
5858
AfterPooledConnectionsInstantiationEvent,
5959
AfterPubSubConnectionInstantiationEvent,
@@ -75,7 +75,6 @@
7575
_set_info_logger,
7676
deprecated_args,
7777
deprecated_function,
78-
get_lib_version,
7978
safe_str,
8079
str_if_bytes,
8180
truncate_text,
@@ -315,14 +314,9 @@ def __init__(
315314
retry_on_error = []
316315

317316
# Handle driver_info: if provided, use it; otherwise create from lib_name/lib_version
318-
if driver_info is not None:
319-
computed_driver_info = driver_info
320-
else:
321-
# Fallback: create DriverInfo from lib_name and lib_version
322-
# Use defaults if not provided
323-
name = lib_name if lib_name is not None else "redis-py"
324-
version = lib_version if lib_version is not None else get_lib_version()
325-
computed_driver_info = DriverInfo(name=name, lib_version=version)
317+
computed_driver_info = resolve_driver_info(
318+
driver_info, lib_name, lib_version
319+
)
326320

327321
kwargs = {
328322
"db": db,

redis/asyncio/connection.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
VerifyFlags = None
3939

4040
from ..auth.token import TokenInterface
41-
from ..driver_info import DriverInfo
41+
from ..driver_info import DriverInfo, resolve_driver_info
4242
from ..event import AsyncAfterConnectionReleasedEvent, EventDispatcher
4343
from ..utils import deprecated_args, format_error_message
4444

@@ -64,7 +64,7 @@
6464
TimeoutError,
6565
)
6666
from redis.typing import EncodableT
67-
from redis.utils import HIREDIS_AVAILABLE, get_lib_version, str_if_bytes
67+
from redis.utils import HIREDIS_AVAILABLE, str_if_bytes
6868

6969
from .._parsers import (
7070
BaseParser,
@@ -199,14 +199,7 @@ def __init__(
199199
self.client_name = client_name
200200

201201
# Handle driver_info: if provided, use it; otherwise create from lib_name/lib_version
202-
if driver_info is not None:
203-
self.driver_info = driver_info
204-
else:
205-
# Fallback: create DriverInfo from lib_name and lib_version
206-
# Use defaults if not provided
207-
name = lib_name if lib_name is not None else "redis-py"
208-
version = lib_version if lib_version is not None else get_lib_version()
209-
self.driver_info = DriverInfo(name=name, lib_version=version)
202+
self.driver_info = resolve_driver_info(driver_info, lib_name, lib_version)
210203

211204
self.credential_provider = credential_provider
212205
self.password = password

redis/client.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
UnixDomainSocketConnection,
4141
)
4242
from redis.credentials import CredentialProvider
43-
from redis.driver_info import DriverInfo
43+
from redis.driver_info import DriverInfo, resolve_driver_info
4444
from redis.event import (
4545
AfterPooledConnectionsInstantiationEvent,
4646
AfterPubSubConnectionInstantiationEvent,
@@ -64,7 +64,6 @@
6464
from redis.utils import (
6565
_set_info_logger,
6666
deprecated_args,
67-
get_lib_version,
6867
safe_str,
6968
str_if_bytes,
7069
truncate_text,
@@ -314,14 +313,9 @@ def __init__(
314313
retry_on_error = []
315314

316315
# Handle driver_info: if provided, use it; otherwise create from lib_name/lib_version
317-
if driver_info is not None:
318-
computed_driver_info = driver_info
319-
else:
320-
# Fallback: create DriverInfo from lib_name and lib_version
321-
# Use defaults if not provided
322-
name = lib_name if lib_name is not None else "redis-py"
323-
version = lib_version if lib_version is not None else get_lib_version()
324-
computed_driver_info = DriverInfo(name=name, lib_version=version)
316+
computed_driver_info = resolve_driver_info(
317+
driver_info, lib_name, lib_version
318+
)
325319

326320
kwargs = {
327321
"db": db,

redis/connection.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from .auth.token import TokenInterface
3636
from .backoff import NoBackoff
3737
from .credentials import CredentialProvider, UsernamePasswordCredentialProvider
38-
from .driver_info import DriverInfo
38+
from .driver_info import DriverInfo, resolve_driver_info
3939
from .event import AfterConnectionReleasedEvent, EventDispatcher
4040
from .exceptions import (
4141
AuthenticationError,
@@ -63,7 +63,6 @@
6363
deprecated_args,
6464
ensure_string,
6565
format_error_message,
66-
get_lib_version,
6766
str_if_bytes,
6867
)
6968

@@ -731,14 +730,7 @@ def __init__(
731730
self.client_name = client_name
732731

733732
# Handle driver_info: if provided, use it; otherwise create from lib_name/lib_version
734-
if driver_info is not None:
735-
self.driver_info = driver_info
736-
else:
737-
# Fallback: create DriverInfo from lib_name and lib_version
738-
# Use defaults if not provided
739-
name = lib_name if lib_name is not None else "redis-py"
740-
version = lib_version if lib_version is not None else get_lib_version()
741-
self.driver_info = DriverInfo(name=name, lib_version=version)
733+
self.driver_info = resolve_driver_info(driver_info, lib_name, lib_version)
742734

743735
self.credential_provider = credential_provider
744736
self.password = password

redis/driver_info.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,38 @@ def formatted_name(self) -> str:
139139
if not self._upstream:
140140
return self.name
141141
return f"{self.name}({';'.join(self._upstream)})"
142+
143+
144+
def resolve_driver_info(
145+
driver_info: Optional[DriverInfo],
146+
lib_name: Optional[str],
147+
lib_version: Optional[str],
148+
) -> DriverInfo:
149+
"""Resolve driver_info from parameters.
150+
151+
If driver_info is provided, use it. Otherwise, create DriverInfo from
152+
lib_name and lib_version (using defaults if not provided).
153+
154+
Parameters
155+
----------
156+
driver_info : DriverInfo, optional
157+
The DriverInfo instance to use
158+
lib_name : str, optional
159+
The library name (default: "redis-py")
160+
lib_version : str, optional
161+
The library version (default: auto-detected)
162+
163+
Returns
164+
-------
165+
DriverInfo
166+
The resolved DriverInfo instance
167+
"""
168+
if driver_info is not None:
169+
return driver_info
170+
171+
# Fallback: create DriverInfo from lib_name and lib_version
172+
from redis.utils import get_lib_version
173+
174+
name = lib_name if lib_name is not None else "redis-py"
175+
version = lib_version if lib_version is not None else get_lib_version()
176+
return DriverInfo(name=name, lib_version=version)

0 commit comments

Comments
 (0)