Socket
Socket
Sign inDemoInstall

progressist

Package Overview
Dependencies
Maintainers
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

progressist

Minimalist and pythonic progress bar


Maintainers
2

Build Status PyPI Coverage Status PyPI

Progressist

Minimalist and pythonic progress bar.

asciicast

Install

pip install progressist

Usage

from progressist import ProgressBar
bar = ProgressBar(total=mytotalstuff)
for item in mystuff:
    # do_stuff
    bar.update()

Or use bar.iter transparently

for item in bar.iter(mystuff):
    do_stuff

It comes with a default rendering that is enough for starting, but it's made to be customised very easily: just writting a template string:

bar = ProgressBar(total=mytotalstuff, template='{prefix} {progress} ETA: {eta}')

It's just plain python formatting so you can use any valid string formatting to take control over the appearance. For example:

bar = ProgressBar(total=mytotalstuff, template='{progress} {percent:.2%} ETA: {eta:%H:%M:%S}')

You can also just change the fill character:

bar = ProgressBar(total=mytotalstuff, done_char='#')

You can change the progress logic itself, for example to use a spinner (included):

bar = ProgressBar(total=mytotalstuff, progress='{spinner}')
# 'progress' kwarg must return a valid template variable.
# included ones are {bar} and {spinner}

You can step by more than one at a time:

for item in mystuff:
    amount = do_stuff()
    bar.update(step=amount)

You can add more template vars by subclassing ProgressBar:

class MyBar(ProgressBar):

    @property
    def swap(self):
        return psutil.swap_memory().total

bar = MyBar(total=20, template='{prefix} {progress} Swap usage: {swap}')

If you are using the same configuration at different places, create a subclass and set its configuration as class properties:

class MyBar(ProgressBar):
    template = ('Download |{animation}| {done:B}/{total:B}')
    done_char = '⬛'

bar = MyBar()

You want to compute yourself the done part?

bar.update(done=myvar / othervar * another)

Or the target total may change during process?

bar.update(total=newcomputedtotal)

To use as urlretrieve callback:

bar = ProgressBar(template="Download |{animation}| {done:B}/{total:B}")
urllib.request.urlretrieve(myurl, mydest, reporthook=bar.on_urlretrieve)

See examples for inspiration.

To run examples, when git cloned the repository, simply run:

python examples.py

If you want to run only one example, add its name to the command line:

python examples.py example_download

Parameters

You can set all of those parameters either as class properties:

class MyBar(ProgressBar):
    done_char = 'x'

bar = Bar()

Or at init:

bar = ProgressBar(done_char='x')

Or at update:

bar = Bar()
bar.update(prefix='Finishing')
namedefaultdescription
done_char=Char used for filling the progress bar
remain_char' ' (a space)Char used for filling the empty portion of the progress bar
template{prefix} {progress} {percent} ({done}/{total})The template of the whole line
prefixProgress:The leading label
animation'{progress}'The actual widget used for progress, can be {bar}, {spinner} or {stream}
throttle0Minimum value between two update call to issue a render: can accept an int for an absolute throttling, a float for a percentage throttling (total must then be set) or a dimedelta for a throttling in seconds

Built in template vars

namedescriptiontypedefault formatting
prefixLeading label in default templatestringstr
elapsedThe elapsed time from the first iteration (in seconds)intas timedelta
etaThe computed ETAdatetime%H:%M:%S if less than 24 hours, else %Y-%m-%d %H:%M:%S
ttaThe estimated remaining time (time to arrival; in seconds)intas timedelta
avgThe average time per iteration, in secondsfloat.2f
speedThe average number of iterations per secondfloat.2f
doneThe number of done iterationsinteger
totalThe total number of iterations to be doneinteger
remaingThe number of iterations remaining to be doneinteger
percentThe percent of iterations already donefloat.2%
animationThe actual progress bartemplate string ({bar}, {spinner} or {stream})

Custom formatting

We extend python default Formatter with some handy custom specs:

  • B type: render an int as human friendly bytes size. For example:

      > bar.total = 109830983
      > bar.template = '{total:B}'
      > bar.render()
      '104.7 MiB'
    

    You can still override the ndigits value:

      > bar.total = 109830983
      > bar.template = '{total:0.2B}'
      > bar.render()
      '104.74 MiB'
    
  • D type: try to cast to integer. For example:

      > bar.speed = 103.23
      > bar.template = '{speed:D}'
      > bar.render()
      '103'
    

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc