make human time intervals available in timegens
Note that the WebUI is still not aware of this functionality refs #20
This commit is contained in:
parent
2895b2fe41
commit
6977608c7e
3 changed files with 34 additions and 15 deletions
|
@ -1,4 +1,4 @@
|
||||||
from datetime import timedelta
|
from datetime import timedelta, datetime
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -17,10 +17,30 @@ def eq_(a, b, reason=None):
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def now():
|
def now():
|
||||||
from datetime import datetime
|
|
||||||
return datetime.now()
|
return datetime.now()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=['seconds', 'human', 'humanlong', 'coloned'])
|
||||||
|
def onehour(now, request):
|
||||||
|
'''a FrequencyAlarm: every hour for one day'''
|
||||||
|
intervals = dict(seconds=3600, human='1h', humanlong='30m 1800s',
|
||||||
|
coloned='01:00:00')
|
||||||
|
return FrequencyAlarm({
|
||||||
|
'start': now - timedelta(days=1),
|
||||||
|
'interval': intervals[request.param],
|
||||||
|
'end': now + days(1)})
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=['seconds', 'human', 'coloned'])
|
||||||
|
def tenseconds(now, request):
|
||||||
|
'''a FrequencyAlarm: every 10 seconds for one day'''
|
||||||
|
intervals = dict(seconds=10, human='10s', coloned='00:10')
|
||||||
|
return FrequencyAlarm({
|
||||||
|
'start': now - timedelta(days=1),
|
||||||
|
'interval': intervals[request.param],
|
||||||
|
'end': now + days(1)})
|
||||||
|
|
||||||
|
|
||||||
def days(n):
|
def days(n):
|
||||||
return timedelta(days=n)
|
return timedelta(days=n)
|
||||||
|
|
||||||
|
@ -60,12 +80,8 @@ def test_single_all(now):
|
||||||
eq_(list(s.all_rings(now + days(2))), [])
|
eq_(list(s.all_rings(now + days(2))), [])
|
||||||
|
|
||||||
|
|
||||||
def test_freq_short(now):
|
def test_freq_short(now, tenseconds):
|
||||||
f = FrequencyAlarm({
|
f = tenseconds
|
||||||
'start': now - days(1),
|
|
||||||
'interval': 10,
|
|
||||||
'end': now + days(1)
|
|
||||||
})
|
|
||||||
assert now in f.all_rings(now - days(3))
|
assert now in f.all_rings(now - days(3))
|
||||||
assert f.next_ring(now) is not None
|
assert f.next_ring(now) is not None
|
||||||
assert f.next_ring(now) != now
|
assert f.next_ring(now) != now
|
||||||
|
@ -76,12 +92,8 @@ def test_freq_short(now):
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.timeout(1)
|
@pytest.mark.timeout(1)
|
||||||
def test_freq_ring(now):
|
def test_freq_ring(now, onehour):
|
||||||
f = FrequencyAlarm({
|
f = onehour
|
||||||
'start': now - days(1),
|
|
||||||
'interval': 3600,
|
|
||||||
'end': now + days(1)
|
|
||||||
})
|
|
||||||
assert now in f.all_rings(now - days(3))
|
assert now in f.all_rings(now - days(3))
|
||||||
assert f.next_ring(now) is not None
|
assert f.next_ring(now) is not None
|
||||||
assert f.next_ring(now) != now
|
assert f.next_ring(now) != now
|
||||||
|
|
|
@ -3,6 +3,8 @@ import logging
|
||||||
log = logging.getLogger('time-every')
|
log = logging.getLogger('time-every')
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from pytimeparse.timeparse import timeparse
|
||||||
|
|
||||||
|
|
||||||
def getdate(val):
|
def getdate(val):
|
||||||
if type(val) is int:
|
if type(val) is int:
|
||||||
|
@ -64,7 +66,11 @@ class FrequencyAlarm(Alarm):
|
||||||
|
|
||||||
def __init__(self, obj):
|
def __init__(self, obj):
|
||||||
self.start = getdate(obj['start'])
|
self.start = getdate(obj['start'])
|
||||||
self.interval = obj['interval']
|
try:
|
||||||
|
self.interval = int(obj['interval'])
|
||||||
|
except ValueError:
|
||||||
|
self.interval = timeparse(obj['interval'])
|
||||||
|
assert type(self.interval) is int
|
||||||
self.end = getdate(obj['end']) if 'end' in obj else None
|
self.end = getdate(obj['end']) if 'end' in obj else None
|
||||||
|
|
||||||
def next_ring(self, current_time=None):
|
def next_ring(self, current_time=None):
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -44,6 +44,7 @@ setup(name='larigira',
|
||||||
'python-mpd2',
|
'python-mpd2',
|
||||||
'wtforms',
|
'wtforms',
|
||||||
'Flask-WTF',
|
'Flask-WTF',
|
||||||
|
'pytimeparse',
|
||||||
'tinydb'
|
'tinydb'
|
||||||
],
|
],
|
||||||
tests_require=['pytest', 'pytest-timeout'],
|
tests_require=['pytest', 'pytest-timeout'],
|
||||||
|
|
Loading…
Reference in a new issue