Skip to content

Can't create a choice prompt for non string lists? #413

@doronbehar

Description

@doronbehar

EDIT:

Now I noticed that this happens for any choices list of non-strings.. Maybe this should be labeled as a feature request.. Anyway, here's the original bug report:

Describe the bug

Can't use a Python pure list, nor a Numpy array of dtype integer, nor a Numpy array of booleans, nor a list of pure Python booleans. Example traceback for pure Python integers:

Traceback (most recent call last):
  File "/home/doron/repos/lab-ion-trap-simulations/./t.py", line 7, in <module>
    prompt([{
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompt.py", line 78, in prompt
    return unsafe_prompt(questions, answers, patch_stdout, true_color, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompt.py", line 221, in unsafe_prompt
    question = create_question_func(**_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompts/select.py", line 146, in select
    ic = InquirerControl(
         ^^^^^^^^^^^^^^^^
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompts/common.py", line 268, in __init__
    self._init_choices(choices, pointed_at)
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompts/common.py", line 324, in _init_choices
    choice = Choice.build(c)
             ^^^^^^^^^^^^^^^
  File "/nix/store/2ph1jmxhdj7cgkwxv9c4f3n4vndq50d1-python3-3.12.7-env/lib/python3.12/site-packages/questionary/prompts/common.py", line 122, in build
    c.get("name"),
    ^^^^^
AttributeError: 'int' object has no attribute 'get'

Example

#!/usr/bin/env python

import sys

from questionary import prompt

answers = prompt([{
    'name': 'integer',
    'type': 'select',
    'message': "Select favorite integer",
    'choices': list(range(10)),
}])

Steps to reproduce

Simply run the provided MWE. Change that choices key to [True, False] or to np.array(list(range(10))) to view other variants of the bug.

Expected behaviour

Same behavior as this gives:

#!/usr/bin/env python

import sys

from questionary import prompt

answers = prompt([{
    'name': 'integer',
    'type': 'select',
    'message': "Select favorite integer",
    'choices': list(map(str, range(10))),
}])
answers['integer'] = int(answers['integer'])
print(answers)

Latest version

  • I have checked that this issue occurs on the latest version of questionary.

Questionary version

2.0.1

Prompt Toolkit version

3.0.48

Operating System

Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    EnhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions