diff options
-rwxr-xr-x | progress.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/progress.py b/progress.py new file mode 100755 index 0000000..8f06d3b --- /dev/null +++ b/progress.py @@ -0,0 +1,50 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i python3 -p python3 + +from datetime import datetime, timedelta +from calendar import * + +class Progress(object): + dura = { + 'day': timedelta(days=1), + 'week': timedelta(days=7), + 'month': timedelta(days=30), + 'year': timedelta(days=365), + } + + def __init__(self): + self.now = datetime.now() + weekdays_left = timedelta(7 - self.now.isoweekday()) + month_max = max(list(Calendar().itermonthdays(self.now.year, self.now.month))) + self.end = { + 'year': datetime(self.now.year+1, 1, 1), + 'day': datetime(self.now.year, self.now.month, self.now.day, hour=17), + 'week': datetime(self.now.year, self.now.month, self.now.day) + weekdays_left, + 'month': datetime(self.now.year, self.now.month, month_max), + } + + def _calc(self, key): + return 1 - ((self.end[key] - self.now) / self.dura[key]) + + def workday(self): + return self._calc('day') + + def week(self): + return self._calc('week') + + def month(self): + return self._calc('month') + + def year(self): + return self._calc('year') + + def __str__(self): + return "d: {day:.1%} | w: {week:.1%} | m: {month:.1%} | y: {year:.1%}".format( + day=self.workday(), + week=self.week(), + month=self.month(), + year=self.year() + ) + +if __name__ == '__main__': + print(str(Progress())) |