# HG changeset patch # User Paul Boddie # Date 1508882959 -7200 # Node ID f8b6e1ae40f429d568c2967b372942842971a5e9 # Parent aa6e36ed60eb17cc212e6e22439399c75b454581 Employ a simple filter invocation to materialise recurrence periods and to filter exception periods. diff -r aa6e36ed60eb -r f8b6e1ae40f4 imiptools/data.py --- a/imiptools/data.py Tue Oct 24 23:24:41 2017 +0200 +++ b/imiptools/data.py Wed Oct 25 00:09:19 2017 +0200 @@ -1278,19 +1278,13 @@ # Return a sorted list of the periods. - periods = list(MergingIterator([rule_periods, iter(rdates or [])])) + periods = MergingIterator([rule_periods, iter(rdates or [])]) # Exclude exception dates. - exdates = obj.get_date_value_item_periods("EXDATE", obj_tzid or tzid) + exdates = set(obj.get_date_value_item_periods("EXDATE", obj_tzid or tzid) or []) - if exdates: - for period in exdates: - i = bisect_left(periods, period) - while i < len(periods) and periods[i] == period: - del periods[i] - - return periods + return filter(lambda p, excluded=exdates: p not in excluded, periods) def get_sender_identities(mapping):