Skip to main content

A lightweight Python progress bar library with a simple API.

Project description

holdon

Holdon, pronounced "hold'n," is a lightweight Python progress bar library with a simple API.

$ pip install holdon

Get Started

Holdon is like tqdm, just wrap progress() around an iterator and we're good to go.

import time
from holdon import progress

for i in progress(range(100)):
    time.sleep(0.1)
 23.0% ━━━╸━━━━━━━━━━━━━━━━  23 / 100 (9.9it/s)

If you do not have any iterator, you can use class RawProgress() and update everything manually. To learn more, refer to the documentation below.

Documentation

Minimal, lol.

def progress()

progress(
    iterator: Iterator, 
    *, 
    width: Optional[int] = None, 
    size: Optional[int] = None,
    unit: Literal["it", "bytes"] = "it"
) -> Iterator[Any]

Creates a progress bar.

Example:

You can wrap progress() around any iterator:

for i in progress(range(100)):
    ... # do your work here

You can also wrap it around a custom iterator, but you'll need to specify its total iterations.

words = ["cheese", "is", "good", "but", "i'm", "lactose", "intolerant"]

def word_it():
    for word in words:
        yield word + " "

for word in progress(word_it(), size=len(words)):
    ... # do your work here

Args:

  • iterator (Iterator): The iterator. For instance, range or list.
  • width (int, optional): Width of the progress bar. Defaults to 50.
  • size (int, optional): Size of the iterator or the len() of the iterator.
  • unit (Literal["it", "bytes"]): Unit. Could be one of: "it" (iterations) or "bytes" (bytes).

class RawProgress

Attributes
  • const fmt (str): Progress bar format.
  • slots width (int): Progress bar width.
  • slots size (int): Total iterations as "size."
  • slots unit (Literal["it", "bytes"]): Unit. Could be one of: "it" (iterations) or "bytes" (bytes).


__init__(
    self, 
    width: int = 50, 
    size: int = 100,
    unit: Literal["it", "bytes"] = "it"
)

The progress bar.

Example:

A minimal example:

rp = RawProgress()

for i in range(500):
    rp.advance(1)

You can also change the unit parameter to "bytes" and specify the total content length (see requests) to indicate download progress:

rp = RawProgress(
    unit="bytes",
    size=int(http_response.headers['Content-Length'])
)

for chunk in http_response.iter_content():
    rp.advance(len(chunk))

Args:

  • width (int): Progress bar width.
  • size (int): Total iterations as "size."
  • unit (Literal["it", "bytes"]): Unit. Could be one of: "it" (iterations) or "bytes" (bytes).

def RawProgress.advance()

advance(self, i: int = 1) -> None

Advance.

Args:

  • i (int): Advance size.

def RawProgress.render()

render(self) -> None

Renders the progress bar.


(c) 2024 AWeirdDev

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

holdon-0.1.tar.gz (5.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page