From d29d19096b0bc26755aec85547051d082a97d9d7 Mon Sep 17 00:00:00 2001 From: Quentin Defenouillere Date: Thu, 12 Nov 2020 12:08:37 +0100 Subject: [PATCH] weboob.browser.filters: Handle values with empty() for numeric values Example: ```python amount = Coalesce( CleanDecimal.US('//xpath', default=NotAbailable), CleanDecimal.US('//xpath2', default=NotAvailable), )(self.doc) ``` If one of the CleanDecimal returns NotAvailable and the other '0.00', with the current behavior, Coalesce will crash with "All falsy and no default" because we use "if value" in the loop of the filter. With empty(value), Coalesce accepts 0.00 as a valid value for numeric elements. --- weboob/browser/filters/standard.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/weboob/browser/filters/standard.py b/weboob/browser/filters/standard.py index 331f7f0fa1..0d663aee93 100644 --- a/weboob/browser/filters/standard.py +++ b/weboob/browser/filters/standard.py @@ -26,6 +26,7 @@ from collections import Iterator from decimal import Decimal, InvalidOperation from itertools import islice +from numbers import Number from dateutil.parser import parse as parse_date from dateutil.tz import gettz @@ -1017,7 +1018,8 @@ class Coalesce(MultiFilter): @debug() def filter(self, values): for value in values: - if value: + # Accept '0.00' as valid value for numeric elements + if value or (isinstance(value, Number) and not empty(value)): return value return self.default_or_raise(FilterError('All falsy and no default.')) -- GitLab