Created
July 31, 2019 17:02
-
-
Save Mazyod/962fb16b39d6a0bbde370a325d9f0814 to your computer and use it in GitHub Desktop.
Progress Counter in Python - wrote it before discovering tqdm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from typing import List | |
from datetime import datetime, timedelta | |
class PercentageCounter: | |
"""Counter for stepping percentages over an arbitrary number | |
e.g. total = 10, step = 0.15 (15%) | |
counter.next(1) # progress is 10%, returns nothing | |
counter.next(2) # progress is 20%, returns 15 | |
counter.next(3) # progress is 30%, returns nothing (has to exceed step) | |
counter.next(4) # progress is 40%, returns 30 | |
… | |
""" | |
def __init__(self, total, step=0.01): | |
self.total = total | |
self.step = step | |
self.current = 0 | |
self.previous_date = None | |
self.time_diff_avg = timedelta() | |
def next_percentage(self, progress) -> List[str]: | |
if self.previous_date: | |
weighted_avg = 5 | |
new_diff = datetime.utcnow() - self.previous_date | |
new_total = self.time_diff_avg * (weighted_avg - 1) + new_diff | |
self.time_diff_avg = new_total / weighted_avg | |
self.previous_date = datetime.utcnow() | |
percentage = progress / self.total | |
done = [] | |
while self.current + self.step < percentage: | |
self.current += self.step | |
eta = self.time_diff_avg * (self.total - progress) | |
done.append(f"{round(self.current * 100):02}% Done... (ETA {eta})") | |
return done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment