diff options
-rw-r--r-- | kombu/connection.py | 8 | ||||
-rw-r--r-- | kombu/tests/test_pools.py | 3 | ||||
-rw-r--r-- | kombu/utils/__init__.py | 13 |
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__() |