# HG changeset patch # User Paul Boddie # Date 1412445151 -7200 # Node ID ea1c7b3a92cc466fac0852f9a2072fd230204f60 # Parent 1c96117c0df7a6c3ad2ab06fb68317ab368aef0d Added an initial year day filtering capability, needing refinement. diff -r 1c96117c0df7 -r ea1c7b3a92cc tests/qualifiers.py --- a/tests/qualifiers.py Sat Oct 04 19:50:55 2014 +0200 +++ b/tests/qualifiers.py Sat Oct 04 19:52:31 2014 +0200 @@ -542,4 +542,24 @@ print l[-1] == (2003, 3, 10, 9, 0, 0), l[-1] print +qualifiers = [ + ("YEARLY", {"interval" : 3}), + ("BYYEARDAY", {"values" : [1, 100, 200]}) + ] + +l = order_qualifiers(qualifiers) +show(l) +dt = (1997, 1, 1, 9, 0, 0) +l = get_datetime_structure(dt) +show(l) +l = combine_datetime_with_qualifiers(dt, qualifiers) +show(l) + +s = process(l) +l = s.materialise(dt, (2006, 2, 1, 0, 0, 0), 10) +print len(l) == 10, len(l) +print l[0] == (1997, 1, 1, 9, 0, 0), l[0] +print l[-1] == (2006, 1, 1, 9, 0, 0), l[-1] +print + # vim: tabstop=4 expandtab shiftwidth=4 diff -r 1c96117c0df7 -r ea1c7b3a92cc vRecurrence.py --- a/vRecurrence.py Sat Oct 04 19:50:55 2014 +0200 +++ b/vRecurrence.py Sat Oct 04 19:52:31 2014 +0200 @@ -390,6 +390,22 @@ results += self.materialise_item(current, max(current, start), min(next, end), counter) return results +class YearDayFilter(Enum): + def materialise_items(self, context, start, end, counter): + first_day = date(context[0], 1, 1) + next_first_day = date(context[0] + 1, 1, 1) + year_length = (next_first_day - first_day).days + step = scale(1, self.pos) + results = [] + for value in self.args["values"]: + if value < 0: + value = year_length + 1 + value + current = (first_day + timedelta(value - 1)).timetuple()[:3] + if current < end and (counter is None or counter[0] < counter[1]): + next = update(current, step) + results += self.materialise_item(current, max(current, start), min(next, end), counter) + return results + def process(selectors): current = selectors[0] for selector in selectors[1:]: @@ -400,7 +416,7 @@ special_enum_levels = { "BYDAY" : WeekDayFilter, "BYMONTHDAY" : MonthDayFilter, - #"BYYEARDAY" : YearDayFilter, + "BYYEARDAY" : YearDayFilter, } # vim: tabstop=4 expandtab shiftwidth=4