Message ID | 20210729220713.822137-1-jkacur@redhat.com |
---|---|
State | New |
Headers | show |
Series | rteval: Add __contains__ in rtevalConfig | expand |
On Thu, 29 Jul 2021, Jeff Epler wrote: > On Thu, Jul 29, 2021 at 06:07:13PM -0400, John Kacur wrote: > > Add the __contains__ function to the rtevalCfgSection class to make "in" > > function correctly. > > Thank you. A possible correction: > > I believe the correct implementation (to delegate the 'in' operation to > the dictionary-like object self.__cfgdata) is > > def __contains__(self, key): > return key in self.__cfgdata > > I mocked a bit of rtevalCfgSection with your implementation: > class rtevalCfgSection: > def __init__(self, cfgdata): > self.__cfgdata = cfgdata > > def __contains__(self, key): > if key in self.__cfgdata.keys(): > return self.__cfgdata[key] > return None > > and then tried it with some carefully chosen values > > >>> d = {1: 'x', 2: 'y', 3: None, 4: False} > >>> r = rtevalConfig.rtevalCfgSection(d) > >>> 1 in d, 1 in r > (True, True) > >>> 9 in d, 9 in r > (False, False) > >>> 3 in d, 3 in r > (True, False) > > With the corrected implementation, the results would always be the same, > not different in the '3' case. > > Additionally, my version avoids extra operation on the underlying > dictionary. > > Jeff > Your version is simpler and correct in the case where the item is None Integrating your version into the patch and resending, thanks!
diff --git a/rteval/rtevalConfig.py b/rteval/rtevalConfig.py index 578aaa3ab58f..b6fccc45ab7f 100644 --- a/rteval/rtevalConfig.py +++ b/rteval/rtevalConfig.py @@ -126,6 +126,10 @@ class rtevalCfgSection: return self.__cfgdata[key] return None + def __contains__(self, key): + if key in self.__cfgdata.keys(): + return self.__cfgdata[key] + return None def items(self): return list(self.__cfgdata.items())
Add the __contains__ function to the rtevalCfgSection class to make "in" function correctly. For example in cyclictest.py, self.__cfg is not a dictionary, it is an instance of the rtevalCfgSection class, therefore key in self.__cfg does not work as expected. In order to make sure this is fixed everywhere, instead of comparing to self.__cfg.keys() everywhere this is used, implement the __contains__ function so that "in" works as expected. This bug was introduced by the commit fd3b732f714d ("rteval: 2to3 transformations") Reported-by: Atsushi Nemoto <atsushi.nemoto@sord.co.jp> Signed-off-by: John Kacur <jkacur@redhat.com> --- rteval/rtevalConfig.py | 4 ++++ 1 file changed, 4 insertions(+)