summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kombu/connection.py8
-rw-r--r--kombu/tests/test_pools.py3
-rw-r--r--kombu/utils/__init__.py13
3 files changed, 20 insertions, 4 deletions
diff --git a/kombu/connection.py b/kombu/connection.py
index d289e342..1ebdd4f3 100644
--- a/kombu/connection.py
+++ b/kombu/connection.py
@@ -25,7 +25,7 @@ from kombu import exceptions
from .five import Empty, range, string_t, text_t, LifoQueue as _LifoQueue
from .log import get_logger
from .transport import get_transport_cls, supports_librabbitmq
-from .utils import cached_property, retry_over_time, shufflecycle
+from .utils import cached_property, retry_over_time, shufflecycle, HashedSeq
from .utils.compat import OrderedDict
from .utils.functional import lazy
from .utils.url import parse_url, urlparse
@@ -565,9 +565,9 @@ class Connection(object):
return OrderedDict(self._info())
def __eqhash__(self):
- return hash('%s|%s|%s|%s|%s|%s' % (
- self.transport_cls, self.hostname, self.userid,
- self.password, self.virtual_host, self.port))
+ return HashedSeq(self.transport_cls, self.hostname, self.userid,
+ self.password, self.virtual_host, self.port,
+ repr(self.transport_options))
def as_uri(self, include_password=False, mask=''):
"""Convert connection parameters to URL form."""
diff --git a/kombu/tests/test_pools.py b/kombu/tests/test_pools.py
index 89a6bd20..920c65a7 100644
--- a/kombu/tests/test_pools.py
+++ b/kombu/tests/test_pools.py
@@ -220,6 +220,9 @@ class test_fun_PoolGroup(Case):
assert eqhash(c1) != eqhash(c2)
assert eqhash(c1) == eqhash(c3)
+ c4 = Connection(c1u, transport_options={'confirm_publish': True})
+ self.assertNotEqual(eqhash(c3), eqhash(c4))
+
p1 = pools.connections[c1]
p2 = pools.connections[c2]
p3 = pools.connections[c3]
diff --git a/kombu/utils/__init__.py b/kombu/utils/__init__.py
index aff46323..0745ddfe 100644
--- a/kombu/utils/__init__.py
+++ b/kombu/utils/__init__.py
@@ -101,6 +101,19 @@ def symbol_by_name(name, aliases={}, imp=None, package=None,
return default
+class HashedSeq(list):
+ """type used for hash() to make sure the hash is not generated
+ multiple times."""
+ __slots__ = 'hashvalue'
+
+ def __init__(self, *seq):
+ self[:] = seq
+ self.hashvalue = hash(seq)
+
+ def __hash__(self):
+ return self.hashvalue
+
+
def eqhash(o):
try:
return o.__eqhash__()