Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Synchronous spinner #47

Open
steelman opened this issue Feb 16, 2018 · 7 comments
Open

Synchronous spinner #47

steelman opened this issue Feb 16, 2018 · 7 comments

Comments

@steelman
Copy link
Contributor

steelman commented Feb 16, 2018

Support synchronous spinners which switch frames upon explicit request from a working thread like.

with Halo(spinner='dots') as spinner:
  for f in files_to_load():
    spinner.next(text="Loading %s" %f) # or .step(), or .tick(), or…
    do_load_file(f)

This can (as far as I understand) be achieved with .frame() but isn't as concise as the above. Possibly don't render new frame more often than interval.

@winterjung
Copy link
Contributor

How about this way? I think it can do what you want.

with Halo(spinner='dots') as spinner:
   for f in files_to_load():
        spinner.text = 'Loading {}'.format(f)
        do_load_file(f)

@steelman
Copy link
Contributor Author

This isn't a bad solution, however, it doesn't work if there is nothing like a filename to show and I still want the spinner to be updated once a loop.

@manrajgrover
Copy link
Owner

@steelman Thanks for opening this. Could you add an example to your second comment?

@steelman
Copy link
Contributor Author

steelman commented May 7, 2018

Tough question. Nothing in particular comes to my mind, so let my try theoretic cases.

  1. Very long labels which don't hold usable information for users (e.g. cryptographic keys)
  2. An unsorted or infinite set of data (so users can't determine progress)
  3. An event loop or waiting for a network connection to be established.

@manrajgrover
Copy link
Owner

@steelman I'm getting what you're saying. See, this is what spinner.text is for. If we need to step in every iteration, let's say for percentage, we would need to know the length of the iterable. For that, we need to add a wrapper which handles iterations and updates the text. But we can only do it for iterables.

@steelman
Copy link
Contributor Author

steelman commented May 8, 2018

At this moment halo satisfies my needs so, most probably, I won't develop any solution to the problem I described. However, I imagine, you may want to keep this issue open, so if anybody comes looking for an inspiration for a contribution, they will find one.

@foster999
Copy link

Happy to update #132 and check it still works, if the feature might still be of interest @manrajgrover?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants