# HG changeset patch # User Seyf <25712100+SeyfSV@users.noreply.github.com> # Date 1600497455 -10800 # Sat Sep 19 09:37:35 2020 +0300 # Node ID b6bc0ca1bd242af365e4e5953021df9c21a51b37 # Parent 4db15d6e3210fb6ad82774413d3499ed5625f8d4 GH #228 Fix from @fschaeck diff --git a/code/pymqi/__init__.py b/code/pymqi/__init__.py --- a/code/pymqi/__init__.py +++ b/code/pymqi/__init__.py @@ -2597,31 +2597,27 @@ 'excludes_gen': CMQCFC.MQCFOP_EXCLUDES_GEN, } - def __init__(self, pub_filter): - self.pub_filter = pub_filter - - def __call__(self, value): - - ensure_not_unicode(value) # Python 3 bytes accepted here - + def __init__(self, selector, opName): # Do we support the given attribute filter? - if CMQC.MQIA_FIRST <= self.pub_filter.selector <= CMQC.MQIA_LAST: - priv_filter_class = IntegerFilter - elif CMQC.MQCA_FIRST <= self.pub_filter.selector <= CMQC.MQCA_LAST: - priv_filter_class = StringFilter + if CMQC.MQIA_FIRST <= selector <= CMQC.MQIA_LAST: + self.internal_filter_cls = IntegerFilter + elif CMQC.MQCA_FIRST <= selector <= CMQC.MQCA_LAST: + self.internal_filter_cls = StringFilter else: msg = 'selector [%s] is of an unsupported type (neither integer ' \ 'nor a string attribute). Please see' \ 'https://dsuch.github.io/pymqi/support.html' - raise Error(msg % self.pub_filter.selector) - + raise Error(msg % selector) + self.selector = selector + self.operator = self.operator_mapping.get(opName) # Do we support the operator? - operator = self.operator_mapping.get(self.pub_filter.operator) - if not operator: + if not self.operator: msg = 'Operator [%s] is not supported.' - raise Error(msg % self.pub_filter.operator) - - return priv_filter_class(self.pub_filter.selector, value, operator) + raise Error(msg % opName) + + def __call__(self, value): + ensure_not_unicode(value) # Python 3 bytes accepted here + return (self.internal_filter_cls)(self.selector, value, self.operator) class Filter(object): """ The user-facing MQAI filtering class which provides syntactic sugar @@ -2629,17 +2625,15 @@ """ def __init__(self, selector): self.selector = selector - self.operator = None def __getattribute__(self, name): """ A generic method for either fetching the pymqi.Filter object's attributes or calling magic methods like 'like', 'contains' etc. """ - if name in('selector', 'operator'): + if name=='selector': return object.__getattribute__(self, name) - self.operator = name - - return FilterOperator(self) + + return FilterOperator(self.selector,name) # # This piece of magic shamelessly plagiarised from xmlrpclib.py. It