diff --git a/tools/make_man.py b/tools/make_man.py index 35b4c2eb11aea9656b5dfc85c24ae79c98e4c984..a90e7b60fe25681da0f2cc84c3dae8c1921db8c2 100755 --- a/tools/make_man.py +++ b/tools/make_man.py @@ -168,7 +168,7 @@ def analyze_application(app, script_name): script_name, app.VERSION.replace('.', '\\&.')) name = ".SH NAME\n%s \- %s" % (script_name, application.SHORT_DESCRIPTION) condition = """.SH CONDITION -The \-c and \-\-condition is a flexible way to filter and get only interesting results. It supports conditions on numerical values, dates, and strings. Dates are given in YYYY\-MM\-DD or YYYY\-MM\-DD HH:MM format. +The \-c and \-\-condition is a flexible way to filter and get only interesting results. It supports conditions on numerical values, dates, durations and strings. Dates are given in YYYY\-MM\-DD or YYYY\-MM\-DD HH:MM format. Durations look like XhYmZs where X, Y and Z are integers. Any of them may be omitted. For instance, YmZs, XhZs or Ym are accepted. The syntax of one expression is "\\fBfield operator value\\fR". The field to test is always the left member of the expression. .LP The field is a member of the objects returned by the command. For example, a bank account has "balance", "coming" or "label" fields. diff --git a/weboob/tools/application/results.py b/weboob/tools/application/results.py index 0f94e3a6b3a9d2a34a8714e79abc1e24e38437e2..e079087d522a6cd89b664ae3e64aa88308954b98 100644 --- a/weboob/tools/application/results.py +++ b/weboob/tools/application/results.py @@ -99,7 +99,8 @@ def __init__(self, condition_str): 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 @@ def is_valid(self, obj): 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\d+)\s*h)?\s*((?P\d+)\s*m)?\s*((?P\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])