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
https://phabricator.wikimedia.org/T188832

EMAIL PREFERENCES
https://phabricator.wikimedia.org/settings/panel/emailpreferences/

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
_______________________________________________
pywikibot-bugs mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-bugs

Reply via email to