summaryrefslogtreecommitdiff
path: root/progress.py
blob: 8f06d3b943559a650375925cdaf3131621e4114e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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()))