Page MenuHomePhabricator

bot.input_yn() accepts invalid default values
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue:

This works as expected:

>>> input_yn('Do you like Pywikibot?', True, force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True
>>> input_yn('Do you like Pywikibot?', False, force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
False
>>> input_yn('Do you like Pywikibot?', 'Y', force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True
>>> input_yn('Do you like Pywikibot?', 'n', force=True)
Do you like Pywikibot? ([y]es, [N]o, [q]uit)
False
>>> input_yn('Do you like Pywikibot?', 0, force=True)
Do you like Pywikibot? ([y]es, [N]o, [q]uit)
False
>>> input_yn('Do you like Pywikibot?', 1, force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True

This looks ok but is it?

>>> input_yn('Do you like Pywikibot?', [], force=True)
Do you like Pywikibot? ([y]es, [N]o, [q]uit)
False
>>> input_yn('Do you like Pywikibot?', '', force=True)
Do you like Pywikibot? ([y]es, [N]o, [q]uit)
False
>>> input_yn('Do you like Pywikibot?', 'Yes', force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True
>>> input_yn('Do you like Pywikibot?', 11, force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True

It fails for those:

>>> input_yn('Do you like Pywikibot?', 'No', force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True
>>>input_yn('Do you like Pywikibot?', (False,), force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True
input_yn('Do you like Pywikibot?', 'Q', force=True)
Do you like Pywikibot? ([Y]es, [n]o, [q]uit)
True

What should have happened instead?:
default setting should be restricted to these elements: ['Y', 'y', 'N', 'n', None, True, False]

Software version
Pywikibot 3+ (rPWBCbc9dd66)

Event Timeline

Xqt triaged this task as Medium priority.Dec 9 2023, 1:56 PM

Change 981432 had a related patch set uploaded (by Ammarpad; author: Ammarpad):

[pywikibot/core@master] [IMPR] Limit bot.input_yn() to valid default values

https://gerrit.wikimedia.org/r/981432

Change 981650 had a related patch set uploaded (by Xqt; author: Xqt):

[pywikibot/core@master] [IMPR] Validate default parameter value in input_choice() function

https://gerrit.wikimedia.org/r/981650

Change 981432 abandoned by Ammarpad:

[pywikibot/core@master] [IMPR] Limit bot.input_yn() to valid default values

Reason:

superseded by I3817ce9

https://gerrit.wikimedia.org/r/981432

Change 981650 merged by jenkins-bot:

[pywikibot/core@master] [IMPR] Validate default parameter value in input_choice() function

https://gerrit.wikimedia.org/r/981650