Allow ResultsCondition to compare timedelta

The user may now use conditions on durations (from the audio and the video
capabilities) in repl applications.

The documentation has been updated to take this change into account.
This commit is contained in:
Samuel Loury 2014-11-28 14:31:45 +01:00 committed by Florent
commit bd7891f202
2 changed files with 9 additions and 2 deletions

View file

@ -99,7 +99,8 @@ class ResultsCondition(IResultsCondition):
def is_valid(self, obj):
import weboob.tools.date as date_utils
from datetime import date, datetime
import re
from datetime import date, datetime, timedelta
d = obj.to_dict()
# We evaluate all member of a list at each iteration.
for _or in self.condition:
@ -122,6 +123,12 @@ class ResultsCondition(IResultsCondition):
splitted_datetime = condition.right.split(' ')
tocompare = datetime(*([int(x) for x in splitted_datetime[0].split('-')] +
[int(x) for x in splitted_datetime[1].split(':')]))
elif isinstance(d[condition.left], timedelta):
time_dict = re.match('^\s*((?P<hours>\d+)\s*h)?\s*((?P<minutes>\d+)\s*m)?\s*((?P<seconds>\d+)\s*s)?\s*$',
condition.right).groupdict()
tocompare = timedelta(seconds=int(time_dict['seconds'] or "0"),
minutes=int(time_dict['minutes'] or "0"),
hours=int(time_dict['hours'] or "0"))
else:
tocompare = typed(condition.right)
myeval = functions[condition.op](tocompare, d[condition.left])