From b1bdbf0744b0ce599981e4335114e9828386b571 Mon Sep 17 00:00:00 2001 From: David Burke Date: Thu, 13 Nov 2025 12:02:32 -0500 Subject: [PATCH 1/3] Fix connection pool key collision --- django_valkey/base_pool.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/django_valkey/base_pool.py b/django_valkey/base_pool.py index d753312..a36310c 100644 --- a/django_valkey/base_pool.py +++ b/django_valkey/base_pool.py @@ -85,7 +85,9 @@ def get_or_create_connection_pool(self, params: dict) -> Pool | Any: Reimplement this method if you want distinct connection pool instance caching behavior. """ - key: str = params["url"] + # Create a stable, unique key from all connection parameters. + # Sort items to ensure key is deterministic regardless of dict order. + key = "::".join([f"{k}={str(v)}" for k, v in sorted(params.items())]) if key not in self._pools: self._pools[key] = self.get_connection_pool(params) return self._pools[key] From 55b43c41a3d2a1a6927f82d08bca47dc992d4f32 Mon Sep 17 00:00:00 2001 From: david Date: Sat, 15 Nov 2025 10:28:16 -0500 Subject: [PATCH 2/3] Add more config values to key --- django_valkey/base_pool.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/django_valkey/base_pool.py b/django_valkey/base_pool.py index a36310c..c5b3f0e 100644 --- a/django_valkey/base_pool.py +++ b/django_valkey/base_pool.py @@ -85,9 +85,12 @@ def get_or_create_connection_pool(self, params: dict) -> Pool | Any: Reimplement this method if you want distinct connection pool instance caching behavior. """ - # Create a stable, unique key from all connection parameters. - # Sort items to ensure key is deterministic regardless of dict order. - key = "::".join([f"{k}={str(v)}" for k, v in sorted(params.items())]) + # Serialize params/options into stable strings. Using str() + # robustly handles unhashable values like dicts. + params_key = "::".join(f"{k}={str(v)}" for k, v in sorted(params.items())) + options_key = "::".join(f"{k}={str(v)}" for k, v in sorted(self.options.items())) + key = (params_key, options_key) + if key not in self._pools: self._pools[key] = self.get_connection_pool(params) return self._pools[key] From 7e77e7ba6d9fa55c4695818060d80739830cb24e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 15:28:33 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- django_valkey/base_pool.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/django_valkey/base_pool.py b/django_valkey/base_pool.py index c5b3f0e..ed68e4f 100644 --- a/django_valkey/base_pool.py +++ b/django_valkey/base_pool.py @@ -88,7 +88,9 @@ def get_or_create_connection_pool(self, params: dict) -> Pool | Any: # Serialize params/options into stable strings. Using str() # robustly handles unhashable values like dicts. params_key = "::".join(f"{k}={str(v)}" for k, v in sorted(params.items())) - options_key = "::".join(f"{k}={str(v)}" for k, v in sorted(self.options.items())) + options_key = "::".join( + f"{k}={str(v)}" for k, v in sorted(self.options.items()) + ) key = (params_key, options_key) if key not in self._pools: