Skip to content

Commit ad770a6

Browse files
♻️ refactor(calendar.*): Drop arrow dependency.
1 parent d19efdc commit ad770a6

File tree

3 files changed

+39
-35
lines changed

3 files changed

+39
-35
lines changed

.bin/calendar.filter

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#!/usr/bin/env python3
22

33
import os
4-
import arrow
54
import ics
65

6+
from datetime import datetime
7+
78
from events import log
89
from events import _cache_load_url
910
from events import calendars
@@ -16,7 +17,7 @@ try:
1617
except:
1718
pass
1819

19-
now = arrow.now()
20+
now = datetime.now().astimezone()
2021

2122
for _calendar in calendars():
2223
url = _calendar['url']

.bin/calendar.now

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#!/usr/bin/env python3
22

33
import sys
4-
import arrow
54
import json
65

6+
from datetime import datetime
7+
78
from events import load
89
from events import calendars
910
from events import FRESH
@@ -14,7 +15,7 @@ calendar = load(calendars(), cache = FRESH)
1415

1516
try:
1617

17-
now = arrow.now()
18+
now = datetime.now().astimezone()
1819
event = main(now, calendar.events)
1920
output = event_to_i3_status_object(now, event)
2021
json.dump( output , sys.stdout )

.bin/events.py

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
22
import sys
3-
import datetime
3+
from datetime import datetime, timedelta, timezone
44
import traceback
55
import hashlib
6+
from typing import Iterable
7+
import human
68
import ics
79
import json
810

@@ -12,61 +14,61 @@
1214
FRESH = os.path.expanduser('~/.cache/calendar/fresh/{}')
1315
CONFIG = os.path.expanduser('~/.config/calendar/config')
1416

15-
def _range ( now , begin , end ) :
17+
def _range ( now: datetime , begin: datetime , end: datetime ) :
1618

17-
if end - begin < datetime.timedelta(1) :
19+
if end - begin < timedelta(days=1) :
1820
hour = True
19-
elif begin.to('utc').time().minute != end.to('utc').time().minute :
21+
elif begin.replace(tzinfo=timezone.utc).time().minute != end.replace(tzinfo=timezone.utc).time().minute :
2022
hour = True
21-
elif begin.to('utc').time().second != end.to('utc').time().second :
23+
elif begin.replace(tzinfo=timezone.utc).time().second != end.replace(tzinfo=timezone.utc).time().second :
2224
hour = True
23-
elif begin.to('utc').time().hour in [ 22 , 23 , 0 ] and end.to('utc').time().hour in [ 22 , 23 , 0 ] :
25+
elif begin.replace(tzinfo=timezone.utc).time().hour in ( 22 , 23 , 0 ) and end.replace(tzinfo=timezone.utc).time().hour in ( 22 , 23 , 0 ) :
2426
hour = False
2527
else :
2628
hour = True
2729

2830
if hour :
2931

30-
bf = 'YYYY, MMM DD, HH:mm'
32+
bf = '%Y, %b %d, %H:%M'
3133
if begin.year == now.year:
3234
if begin.month == now.month:
3335
if begin.day == now.day:
34-
bf = 'HH:mm'
36+
bf = '%H:%M'
3537
else :
36-
bf = 'ddd DD, HH:mm'
38+
bf = '%a %d, %H:%M'
3739
else:
38-
bf = 'MMM DD, HH:mm'
40+
bf = '%b %d, %H:%M'
3941

40-
ef = 'YYYY, MMM DD, HH:mm'
42+
ef = '%Y, %b %d, %H:%M'
4143
if end.year == begin.year:
4244
if end.month == begin.month:
4345
if end.day == begin.day:
44-
ef = 'HH:mm'
46+
ef = '%H:%M'
4547
else:
46-
ef = 'DD, HH:mm'
48+
ef = '%d, %H:%M'
4749
else:
48-
ef = 'MMM DD, HH:mm'
50+
ef = '%b %d, %H:%M'
4951

5052
else :
5153

52-
bf = 'YYYY, MMM DD'
54+
bf = '%Y, %b %d'
5355
if begin.year == now.year:
5456
if begin.month == now.month:
5557
if begin.day == now.day:
56-
bf = 'HH:mm'
58+
bf = '%H:%M'
5759
else :
58-
bf = 'ddd DD'
60+
bf = '%a %d'
5961
else:
60-
bf = 'MMM DD'
62+
bf = '%b %d'
6163

62-
ef = 'YYYY, MMM DD'
63-
if end - begin < datetime.timedelta(365) :
64+
ef = '%Y, %b %d'
65+
if end - begin < timedelta(days=365) :
6466
if end.month == begin.month:
65-
ef = 'DD'
67+
ef = '%d'
6668
else:
67-
ef = 'MMM DD'
69+
ef = '%b %d'
6870

69-
return begin.format( bf ) + ' - ' + end.format( ef )
71+
return begin.strftime( bf ) + ' - ' + end.strftime( ef )
7072

7173
def calendars ( config = CONFIG ) :
7274
with open(config, 'r') as fd:
@@ -130,7 +132,7 @@ def dropalarms(string):
130132
return '\n'.join(_dropalarms(string))
131133

132134

133-
def main ( now , events ) :
135+
def main ( now: datetime , events: Iterable[ics.Event] ) :
134136

135137
_fresh = list(filter(lambda x: x.end >= now, events))
136138
_future = filter(lambda x: x.begin >= now, _fresh)
@@ -153,13 +155,13 @@ def main ( now , events ) :
153155
return _current if _next is None or _next.begin >= _current.end else _next
154156

155157

156-
def event_to_i3_status_object ( now , event ) :
158+
def event_to_i3_status_object ( now: datetime , event: ics.Event ) :
157159

158160
name = event.name
159161
location = event.location
160162
short_location = location.split(',')[0] if location else None
161-
begin = event.begin.to('local')
162-
end = event.end.to('local')
163+
begin = event.begin.datetime.astimezone()
164+
end = event.end.datetime.astimezone()
163165

164166
# event format
165167
ef = '{name}'
@@ -173,8 +175,8 @@ def event_to_i3_status_object ( now , event ) :
173175

174176
full_text = ef.format(
175177
range = _range( now , begin , end ) ,
176-
hbegin = begin.humanize(),
177-
hend = end.humanize( ) ,
178+
hbegin = human.datetime(begin),
179+
hend = human.datetime(end) ,
178180
name = name,
179181
location = location
180182
)
@@ -184,8 +186,8 @@ def event_to_i3_status_object ( now , event ) :
184186

185187
short_text = ef.format(
186188
range = _range( now , begin , end ) ,
187-
hbegin = begin.humanize(),
188-
hend = end.humanize( ) ,
189+
hbegin = human.datetime(begin),
190+
hend = human.datetime(end) ,
189191
name = (name[:47] + '..') if len(name) > 49 else name,
190192
location = short_location
191193
)

0 commit comments

Comments
 (0)