| Mpaa added a comment. |
I think it is because in
for key, value in kwargs.items():
# append function for singletons
if isinstance(value, (bool, type(None))):
self.filter[ftype].append(lambda e: key in e and e[key] is value)
...the last key, value pair is the only one that will be used in all lambdas.
Try just printing the key:self.filter[ftype].append(lambda e: key)In [59]: %paste from pywikibot.comms.eventstreams import EventStreams stream = EventStreams(stream='recentchange') stream.register_filter(foo=True, bar='baz') f, g = stream.filter['all'] c = {'foo': True} f(c), g(c) ## -- End pasted text -- Out[59]: ('bar', 'bar')I would replace the lambda with a real function.
Something like:import functools def _do(e, key=None, value=None): return key in e and e[key] is value # register pairs of keys and items as a filter function for key, value in kwargs.items(): # append function for singletons if isinstance(value, (bool, type(None))): self.filter[ftype].append(functools.partial(_do, key=key, value=value))In [57]: f
Out[57]: functools.partial(<function EventStreams.register_filter.<locals>._do at 0xaaa17974>, key='foo', value=True)In [58]: g
Out[58]: functools.partial(<function EventStreams.register_filter.<locals>._do at 0xaaa17974>, key='bar', value='baz')
TASK DETAIL
EMAIL PREFERENCES
To: Xqt, Mpaa
Cc: Mpaa, zhuyifei1999, valhallasw, Dalba, Ottomata, Aklapper, Zoranzoki21, Xqt, pywikibot-bugs-list, Magul, Tbscho, rafidaslam, MayS, Mdupont, JJMC89, Avicennasis, jayvdb, Masti, Alchimista, Rxy
Cc: Mpaa, zhuyifei1999, valhallasw, Dalba, Ottomata, Aklapper, Zoranzoki21, Xqt, pywikibot-bugs-list, Magul, Tbscho, rafidaslam, MayS, Mdupont, JJMC89, Avicennasis, jayvdb, Masti, Alchimista, Rxy
_______________________________________________ pywikibot-bugs mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/pywikibot-bugs
