Giter Club home page Giter Club logo

Comments (8)

lewoudar avatar lewoudar commented on August 25, 2024 1

Thanks @stdedos . I already checked the tests, but I was still unable to make my test case work. Honestly, I didn't look at it recently, may be I will give it another try...

from questionary.

alexlatif avatar alexlatif commented on August 25, 2024

try using pyprompttoolkits create_pipe_input

with create_pipe_input() as inp:
    pipe = [
        "answer 1",
        "answer 2",
    ]
    for p in pipe:
        inp.send_text(p)
        inp.send_text("\n")
    
    run_prompt_session( )

as it is the core prompting library being abstracted

this isnt perfect either as if your input is too short it will hang and so you must thread tests to timeout when tests are ready so that they error

if you find a way to better handle this on pytests pls lmk

from questionary.

alexlatif avatar alexlatif commented on August 25, 2024

sorry one caveat

you basically need to pass in

    input: Optional[Input] = None,
    output: Optional[Output] = None,

confusing as f@#% as they are magically appended kwargs

with create_pipe_input() as inp:
pipe = []
for p in pipe:
inp.send_text(p)
inp.send_text("\n")

vars = questionary.prompt(
    questions,
    input=inp,
    output=DummyOutput(),
)

from questionary.

lewoudar avatar lewoudar commented on August 25, 2024

Thank you @alexlatif
oosh! it is a bit more complicated than I thought, I need to change how I created my code. In my tutorial, I use wrapper functions to questionary prompts without giving the possibility to pass additional data :D

Another question, I saw in your tests, you prefer use \r instead for \n for Enter, why?

from questionary.

lewoudar avatar lewoudar commented on August 25, 2024

Hum, I am struggling with this test. I don't want I'm doing wrong, but the confirm input just return True all the time. I try Enter with \n and \r without success. Do you have any idea?

def test_complicated():
    def complicated_prompt(*, inputs, output) -> list[str]:
        fruits = []
        c = True
        while c:
            fruit = questionary.text("Fruit:", input=inputs[0], output=output).ask()
            fruits.append(fruit)
            c = questionary.confirm('add another fruit', default=True, input=inputs[1], output=output).ask()
        return fruits

    with create_pipe_input() as confirm_input, create_pipe_input() as text_input:
        confirm_input.send_text('Y\nn\n')
        text_input.send_text('apple\npineapple\n')
        fruits = complicated_prompt(inputs=[text_input, confirm_input], output=DummyOutput())
        assert fruits == ['apple', 'pineapple']

from questionary.

alexlatif avatar alexlatif commented on August 25, 2024

sorry for the delay. it actually depends on the question. so when its choices "" an empty string worked, but then i had to simulate the arrow keys and could not just pass in the value of the choice as it is obvs reading from the stdin.

it was so much trial and error for me too that i just gave up on testing it all as i would have liked. in reality it isn't this package's fault as much as it is a terribly handled feature of prompt_toolkit.

i've give up on python as a whole tbh and am is the magic land of Rust where annoyances like this are a thing of the past

from questionary.

lewoudar avatar lewoudar commented on August 25, 2024

I think I will just give up on testing. Effectively prompt_toolkit didn't well manage the testing part :(
Thank you for your time and I'm sad you're giving up on Python, it may have its quirks (like every programming language) but I think overall, it is still a pleasant language to use. Hope you will change your mind :)

from questionary.

stdedos avatar stdedos commented on August 25, 2024

Not an official documentation, but documented somehow? #253 (comment)

from questionary.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.