1.1 --- a/imiptools/data.py Sat May 14 00:56:54 2016 +0200
1.2 +++ b/imiptools/data.py Sat May 14 18:46:04 2016 +0200
1.3 @@ -617,7 +617,7 @@
1.4 # Get a constrained view if start and end limits are specified.
1.5
1.6 if period:
1.7 - periods = freebusy.get_overlapping(period)
1.8 + periods = freebusy.get_overlapping([period])
1.9 else:
1.10 periods = freebusy
1.11
2.1 --- a/imiptools/handlers/scheduling/common.py Sat May 14 00:56:54 2016 +0200
2.2 +++ b/imiptools/handlers/scheduling/common.py Sat May 14 18:46:04 2016 +0200
2.3 @@ -55,16 +55,15 @@
2.4 for user in users:
2.5 conflicts[user] = 0
2.6
2.7 - for period in handler.get_periods(handler.obj):
2.8 - overlapping = freebusy.get_overlapping(period)
2.9 + overlapping = freebusy.get_overlapping(handler.get_periods(handler.obj))
2.10
2.11 - # Where scheduling cannot occur, find the busy potential users.
2.12 + # Where scheduling cannot occur, find the busy potential users.
2.13
2.14 - if overlapping:
2.15 - for p in overlapping:
2.16 - involved = attendee and p.attendee or p.organiser
2.17 - if conflicts.has_key(involved):
2.18 - conflicts[involved] += 1
2.19 + if overlapping:
2.20 + for p in overlapping:
2.21 + involved = attendee and p.attendee or p.organiser
2.22 + if conflicts.has_key(involved):
2.23 + conflicts[involved] += 1
2.24
2.25 return conflicts
2.26
3.1 --- a/imiptools/period.py Sat May 14 00:56:54 2016 +0200
3.2 +++ b/imiptools/period.py Sat May 14 18:46:04 2016 +0200
3.3 @@ -665,7 +665,7 @@
3.4 is set to a true value.
3.5 """
3.6
3.7 - overlapping = self.get_overlapping(period)
3.8 + overlapping = self.get_overlapping([period])
3.9
3.10 if get_periods:
3.11 return overlapping
3.12 @@ -1006,35 +1006,14 @@
3.13 last = bisect_right(self.periods, Period(period.get_end(), period.get_end(), period.get_tzid()))
3.14 return self.periods[:last]
3.15
3.16 - def get_overlapping(self, period):
3.17 + def get_overlapping(self, periods):
3.18
3.19 """
3.20 Return the entries in the collection providing periods overlapping with
3.21 - 'period'.
3.22 + the given sorted collection of 'periods'.
3.23 """
3.24
3.25 - # Find the range of periods potentially overlapping the period in the
3.26 - # free/busy collection.
3.27 -
3.28 - startpoints = self.periods_until(period)
3.29 -
3.30 - # Find the range of periods potentially overlapping the period in a version
3.31 - # of the free/busy collection sorted according to end datetimes.
3.32 -
3.33 - endpoints = [(Period(fb.get_end_point(), fb.get_end_point()), fb) for fb in startpoints]
3.34 - endpoints.sort()
3.35 - first = bisect_left(endpoints, (Period(period.get_start_point(), period.get_start_point()),))
3.36 - endpoints = endpoints[first:]
3.37 -
3.38 - overlapping = set()
3.39 -
3.40 - for p, fb in endpoints:
3.41 - if fb.overlaps(period):
3.42 - overlapping.add(fb)
3.43 -
3.44 - overlapping = list(overlapping)
3.45 - overlapping.sort()
3.46 - return overlapping
3.47 + return get_overlapping(self.periods, periods)
3.48
3.49 def remove_overlapping(self, period):
3.50
3.51 @@ -1042,7 +1021,7 @@
3.52
3.53 self._check_mutable()
3.54
3.55 - overlapping = self.get_overlapping(period)
3.56 + overlapping = self.get_overlapping([period])
3.57
3.58 if overlapping:
3.59 for fb in overlapping:
3.60 @@ -1329,25 +1308,32 @@
3.61
3.62 return map(lambda t: self.make_period(t), self.cursor.fetchall())
3.63
3.64 - def get_overlapping(self, period):
3.65 + def get_overlapping(self, periods):
3.66
3.67 """
3.68 Return the entries in the collection providing periods overlapping with
3.69 - 'period'.
3.70 + the given sorted collection of 'periods'.
3.71 """
3.72
3.73 - columns, values = self._get_period_values(period)
3.74 + overlapping = set()
3.75 +
3.76 + for period in periods:
3.77 + columns, values = self._get_period_values(period)
3.78
3.79 - query, values = self.get_query(
3.80 - "select %(columns)s from %(table)s :condition" % {
3.81 - "columns" : self.columnlist(self.period_columns),
3.82 - "table" : self.table_name
3.83 - },
3.84 - columns, values)
3.85 + query, values = self.get_query(
3.86 + "select %(columns)s from %(table)s :condition" % {
3.87 + "columns" : self.columnlist(self.period_columns),
3.88 + "table" : self.table_name
3.89 + },
3.90 + columns, values)
3.91
3.92 - self.cursor.execute(query, values)
3.93 + self.cursor.execute(query, values)
3.94 +
3.95 + overlapping.update(map(lambda t: self.make_period(t), self.cursor.fetchall()))
3.96
3.97 - return map(lambda t: self.make_period(t), self.cursor.fetchall())
3.98 + overlapping = list(overlapping)
3.99 + overlapping.sort()
3.100 + return overlapping
3.101
3.102 def remove_overlapping(self, period):
3.103
3.104 @@ -1437,6 +1423,37 @@
3.105
3.106 pass
3.107
3.108 +def get_overlapping(first, second):
3.109 +
3.110 + """
3.111 + Return the entries in the sorted 'first' collection that are overlapping
3.112 + with the given sorted 'second' collection.
3.113 + """
3.114 +
3.115 + if not first or not second:
3.116 + return []
3.117 +
3.118 + # Examine each period in the second collection, attempting to match periods
3.119 + # in the first collection.
3.120 +
3.121 + overlapping = set()
3.122 +
3.123 + for p2 in second:
3.124 + last_point = p2.get_end_point()
3.125 +
3.126 + # Examine the first collection up to the point where no matches will
3.127 + # occur.
3.128 +
3.129 + for p1 in first:
3.130 + if p1.get_start_point() > last_point:
3.131 + break
3.132 + elif p1.overlaps(p2):
3.133 + overlapping.add(p1)
3.134 +
3.135 + overlapping = list(overlapping)
3.136 + overlapping.sort()
3.137 + return overlapping
3.138 +
3.139 # Period layout.
3.140
3.141 def get_scale(periods, tzid, view_period=None):
4.1 --- a/imipweb/calendar.py Sat May 14 00:56:54 2016 +0200
4.2 +++ b/imipweb/calendar.py Sat May 14 18:46:04 2016 +0200
4.3 @@ -327,8 +327,8 @@
4.4 view_end = view_period.get_end()
4.5 duration = view_period.get_duration()
4.6
4.7 - preceding_events = view_start and freebusy.get_overlapping(Period(None, view_start, self.get_tzid())) or []
4.8 - following_events = view_end and freebusy.get_overlapping(Period(view_end, None, self.get_tzid())) or []
4.9 + preceding_events = view_start and freebusy.get_overlapping([Period(None, view_start, self.get_tzid())]) or []
4.10 + following_events = view_end and freebusy.get_overlapping([Period(view_end, None, self.get_tzid())]) or []
4.11
4.12 last_preceding = preceding_events and to_date(preceding_events[-1].get_end()) + timedelta(1) or None
4.13 first_following = following_events and to_date(following_events[0].get_start()) or None
4.14 @@ -491,7 +491,7 @@
4.15 # Filter periods outside the given view.
4.16
4.17 if view_period:
4.18 - periods = periods.get_overlapping(view_period)
4.19 + periods = periods.get_overlapping([view_period])
4.20
4.21 # Get the time scale with start and end points.
4.22
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/tests/internal/periods.py Sat May 14 18:46:04 2016 +0200
5.3 @@ -0,0 +1,102 @@
5.4 +#!/usr/bin/env python
5.5 +
5.6 +"""
5.7 +Test periods.
5.8 +
5.9 +Copyright (C) 2016 Paul Boddie <paul@boddie.org.uk>
5.10 +
5.11 +This program is free software; you can redistribute it and/or modify it under
5.12 +the terms of the GNU General Public License as published by the Free Software
5.13 +Foundation; either version 3 of the License, or (at your option) any later
5.14 +version.
5.15 +
5.16 +This program is distributed in the hope that it will be useful, but WITHOUT
5.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
5.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
5.19 +details.
5.20 +
5.21 +You should have received a copy of the GNU General Public License along with
5.22 +this program. If not, see <http://www.gnu.org/licenses/>.
5.23 +"""
5.24 +
5.25 +from imiptools.dates import format_datetime
5.26 +from imiptools.period import Period, get_overlapping
5.27 +
5.28 +l1 = [
5.29 + Period("20160501T020000Z", "20160501T045000Z"),
5.30 + Period("20160501T023000Z", "20160501T030000Z"),
5.31 + Period("20160501T024500Z", "20160501T031500Z"),
5.32 + Period("20160501T040000Z", "20160501T043000Z"),
5.33 + Period("20160501T050000Z", "20160501T060000Z"),
5.34 + Period("20160501T051500Z", "20160501T054500Z"),
5.35 + Period("20160501T052000Z", "20160501T053000Z"),
5.36 + Period("20160501T090000Z", "20160501T093000Z"),
5.37 + Period("20160501T094000Z", "20160501T104000Z"),
5.38 + Period("20160501T100000Z", "20160501T110000Z"),
5.39 + ]
5.40 +
5.41 +l2 = [
5.42 + Period("20160501T010000Z", "20160501T020000Z"),
5.43 + Period("20160501T013000Z", "20160501T014000Z"),
5.44 + Period("20160501T014000Z", "20160501T015000Z"),
5.45 + Period("20160501T020000Z", "20160501T033000Z"),
5.46 + Period("20160501T040000Z", "20160501T044000Z"),
5.47 + Period("20160501T050000Z", "20160501T051000Z"),
5.48 + Period("20160501T052000Z", "20160501T053000Z"),
5.49 + Period("20160501T085900Z", "20160501T090000Z"),
5.50 + Period("20160501T085900Z", "20160501T090100Z"),
5.51 + Period("20160501T100000Z", "20160501T110000Z"),
5.52 + ]
5.53 +
5.54 +o1 = [
5.55 + Period("20160501T020000Z", "20160501T045000Z"),
5.56 + Period("20160501T023000Z", "20160501T030000Z"),
5.57 + Period("20160501T024500Z", "20160501T031500Z"),
5.58 + Period("20160501T040000Z", "20160501T043000Z"),
5.59 + Period("20160501T050000Z", "20160501T060000Z"),
5.60 + Period("20160501T051500Z", "20160501T054500Z"),
5.61 + Period("20160501T052000Z", "20160501T053000Z"),
5.62 + Period("20160501T090000Z", "20160501T093000Z"),
5.63 + Period("20160501T094000Z", "20160501T104000Z"),
5.64 + Period("20160501T100000Z", "20160501T110000Z"),
5.65 + ]
5.66 +
5.67 +o2 = [
5.68 + Period("20160501T020000Z", "20160501T033000Z"),
5.69 + Period("20160501T040000Z", "20160501T044000Z"),
5.70 + Period("20160501T050000Z", "20160501T051000Z"),
5.71 + Period("20160501T052000Z", "20160501T053000Z"),
5.72 + Period("20160501T085900Z", "20160501T090100Z"),
5.73 + Period("20160501T100000Z", "20160501T110000Z"),
5.74 + ]
5.75 +
5.76 +print o1 == get_overlapping(l1, l2)
5.77 +
5.78 +for p in get_overlapping(l1, l2):
5.79 + print format_datetime(p.get_start_point()), format_datetime(p.get_end_point())
5.80 +
5.81 +print "----"
5.82 +
5.83 +print o2 == get_overlapping(l2, l1)
5.84 +
5.85 +for p in get_overlapping(l2, l1):
5.86 + print format_datetime(p.get_start_point()), format_datetime(p.get_end_point())
5.87 +
5.88 +print "----"
5.89 +
5.90 +l1[0] = Period("20160501T020000Z", "20160501T120000Z")
5.91 +o1[0] = l1[0]
5.92 +print o1 == get_overlapping(l1, l2)
5.93 +
5.94 +for p in get_overlapping(l1, l2):
5.95 + print format_datetime(p.get_start_point()), format_datetime(p.get_end_point())
5.96 +
5.97 +print "----"
5.98 +
5.99 +o2 = l2[3:]
5.100 +print o2 == get_overlapping(l2, l1)
5.101 +
5.102 +for p in get_overlapping(l2, l1):
5.103 + print format_datetime(p.get_start_point()), format_datetime(p.get_end_point())
5.104 +
5.105 +# vim: tabstop=4 expandtab shiftwidth=4
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/tests/internal/qualifiers.py Sat May 14 18:46:04 2016 +0200
6.3 @@ -0,0 +1,775 @@
6.4 +#!/usr/bin/env python
6.5 +
6.6 +"""
6.7 +Test qualifiers for recurring events.
6.8 +
6.9 +Copyright (C) 2014, 2015 Paul Boddie <paul@boddie.org.uk>
6.10 +
6.11 +This program is free software; you can redistribute it and/or modify it under
6.12 +the terms of the GNU General Public License as published by the Free Software
6.13 +Foundation; either version 3 of the License, or (at your option) any later
6.14 +version.
6.15 +
6.16 +This program is distributed in the hope that it will be useful, but WITHOUT
6.17 +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
6.18 +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
6.19 +details.
6.20 +
6.21 +You should have received a copy of the GNU General Public License along with
6.22 +this program. If not, see <http://www.gnu.org/licenses/>.
6.23 +"""
6.24 +
6.25 +from vRecurrence import *
6.26 +
6.27 +def show(l):
6.28 + for x in l:
6.29 + print x
6.30 + print
6.31 +
6.32 +qualifiers = [
6.33 + ("YEARLY", {"interval" : 1})
6.34 + ]
6.35 +
6.36 +l = order_qualifiers(qualifiers)
6.37 +show(l)
6.38 +dt = (1997, 11, 2)
6.39 +l = get_datetime_structure(dt)
6.40 +show(l)
6.41 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.42 +show(l)
6.43 +
6.44 +s = get_selector(dt, qualifiers)
6.45 +l = s.materialise(dt, (2003, 12, 24))
6.46 +print len(l) == 7, 7, len(l)
6.47 +print l[0] == (1997, 11, 2), (1997, 11, 2), l[0]
6.48 +print l[-1] == (2003, 11, 2), (2003, 11, 2), l[-1]
6.49 +print
6.50 +
6.51 +qualifiers = [
6.52 + ("YEARLY", {"interval" : 2}),
6.53 + ("BYMONTH", {"values" : [1]}),
6.54 + ("BYDAY", {"values" : [(6, None)]}),
6.55 + ("BYHOUR", {"values" : [8, 9]}),
6.56 + ("BYMINUTE", {"values" : [30]})
6.57 + ]
6.58 +
6.59 +l = order_qualifiers(qualifiers)
6.60 +show(l)
6.61 +dt = (1997, 1, 5, 8, 30, 0)
6.62 +l = get_datetime_structure(dt)
6.63 +show(l)
6.64 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.65 +show(l)
6.66 +
6.67 +s = get_selector(dt, qualifiers)
6.68 +l = s.materialise(dt, (2003, 12, 24, 0, 0, 0))
6.69 +print len(l) == 32, 32, len(l)
6.70 +print l[0] == (1997, 1, 11, 8, 30, 0), (1997, 1, 11, 8, 30, 0), l[0]
6.71 +print l[-1] == (2003, 1, 25, 9, 30, 0), (2003, 1, 25, 9, 30, 0), l[-1]
6.72 +print
6.73 +
6.74 +qualifiers = [
6.75 + ("DAILY", {"interval" : 1})
6.76 + ]
6.77 +
6.78 +l = order_qualifiers(qualifiers)
6.79 +show(l)
6.80 +dt = (1997, 9, 2, 9, 0, 0)
6.81 +l = get_datetime_structure(dt)
6.82 +show(l)
6.83 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.84 +show(l)
6.85 +
6.86 +s = get_selector(dt, qualifiers)
6.87 +l = s.materialise(dt, (1997, 12, 24), 10)
6.88 +print len(l) == 10, 10, len(l)
6.89 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.90 +print l[-1] == (1997, 9, 11, 9, 0, 0), (1997, 9, 11, 9, 0, 0), l[-1]
6.91 +print
6.92 +
6.93 +qualifiers = [
6.94 + ("DAILY", {"interval" : 1})
6.95 + ]
6.96 +
6.97 +l = order_qualifiers(qualifiers)
6.98 +show(l)
6.99 +dt = (1997, 9, 2, 9, 0, 0)
6.100 +l = get_datetime_structure(dt)
6.101 +show(l)
6.102 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.103 +show(l)
6.104 +
6.105 +s = get_selector(dt, qualifiers)
6.106 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.107 +print len(l) == 113, 113, len(l)
6.108 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.109 +print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
6.110 +print
6.111 +
6.112 +qualifiers = [
6.113 + ("DAILY", {"interval" : 2})
6.114 + ]
6.115 +
6.116 +l = order_qualifiers(qualifiers)
6.117 +show(l)
6.118 +dt = (1997, 9, 2, 9, 0, 0)
6.119 +l = get_datetime_structure(dt)
6.120 +show(l)
6.121 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.122 +show(l)
6.123 +
6.124 +s = get_selector(dt, qualifiers)
6.125 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.126 +print len(l) == 57, 57, len(l)
6.127 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.128 +print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
6.129 +print
6.130 +
6.131 +qualifiers = [
6.132 + ("WEEKLY", {"interval" : 1})
6.133 + ]
6.134 +
6.135 +l = order_qualifiers(qualifiers)
6.136 +show(l)
6.137 +dt = (1997, 9, 2, 9, 0, 0)
6.138 +l = get_datetime_structure(dt)
6.139 +show(l)
6.140 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.141 +show(l)
6.142 +
6.143 +s = get_selector(dt, qualifiers)
6.144 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.145 +print len(l) == 17, 17, len(l)
6.146 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.147 +print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
6.148 +print
6.149 +
6.150 +qualifiers = [
6.151 + ("DAILY", {"interval" : 10})
6.152 + ]
6.153 +
6.154 +l = order_qualifiers(qualifiers)
6.155 +show(l)
6.156 +dt = (1997, 9, 2, 9, 0, 0)
6.157 +l = get_datetime_structure(dt)
6.158 +show(l)
6.159 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.160 +show(l)
6.161 +
6.162 +s = get_selector(dt, qualifiers)
6.163 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 5)
6.164 +print len(l) == 5, 5, len(l)
6.165 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.166 +print l[-1] == (1997, 10, 12, 9, 0, 0), (1997, 10, 12, 9, 0, 0), l[-1]
6.167 +print
6.168 +
6.169 +qualifiers = [
6.170 + ("YEARLY", {"interval" : 1}),
6.171 + ("BYMONTH", {"values" : [1]}),
6.172 + ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]})
6.173 + ]
6.174 +
6.175 +l = order_qualifiers(qualifiers)
6.176 +show(l)
6.177 +dt = (1998, 1, 1, 9, 0, 0)
6.178 +l = get_datetime_structure(dt)
6.179 +show(l)
6.180 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.181 +show(l)
6.182 +
6.183 +s = get_selector(dt, qualifiers)
6.184 +l = s.materialise(dt, (2000, 1, 31, 14, 0, 0))
6.185 +print len(l) == 93, 93, len(l)
6.186 +print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0]
6.187 +print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1]
6.188 +print
6.189 +
6.190 +qualifiers = [
6.191 + ("DAILY", {"interval" : 1}),
6.192 + ("BYMONTH", {"values" : [1]})
6.193 + ]
6.194 +
6.195 +l = order_qualifiers(qualifiers)
6.196 +show(l)
6.197 +dt = (1998, 1, 1, 9, 0, 0)
6.198 +l = get_datetime_structure(dt)
6.199 +show(l)
6.200 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.201 +show(l)
6.202 +
6.203 +s = get_selector(dt, qualifiers)
6.204 +l = s.materialise(dt, (2000, 1, 31, 14, 0, 0))
6.205 +print len(l) == 93, 93, len(l)
6.206 +print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0]
6.207 +print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1]
6.208 +print
6.209 +
6.210 +qualifiers = [
6.211 + ("WEEKLY", {"interval" : 1})
6.212 + ]
6.213 +
6.214 +l = order_qualifiers(qualifiers)
6.215 +show(l)
6.216 +dt = (1997, 9, 2, 9, 0, 0)
6.217 +l = get_datetime_structure(dt)
6.218 +show(l)
6.219 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.220 +show(l)
6.221 +
6.222 +s = get_selector(dt, qualifiers)
6.223 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 10)
6.224 +print len(l) == 10, 10, len(l)
6.225 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.226 +print l[-1] == (1997, 11, 4, 9, 0, 0), (1997, 11, 4, 9, 0, 0), l[-1]
6.227 +print
6.228 +
6.229 +qualifiers = [
6.230 + ("WEEKLY", {"interval" : 1})
6.231 + ]
6.232 +
6.233 +l = order_qualifiers(qualifiers)
6.234 +show(l)
6.235 +dt = (1997, 9, 2, 9, 0, 0)
6.236 +l = get_datetime_structure(dt)
6.237 +show(l)
6.238 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.239 +show(l)
6.240 +
6.241 +s = get_selector(dt, qualifiers)
6.242 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.243 +print len(l) == 17, 17, len(l)
6.244 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.245 +print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
6.246 +print
6.247 +
6.248 +qualifiers = [
6.249 + ("WEEKLY", {"interval" : 2})
6.250 + ]
6.251 +
6.252 +l = order_qualifiers(qualifiers)
6.253 +show(l)
6.254 +dt = (1997, 9, 2, 9, 0, 0)
6.255 +l = get_datetime_structure(dt)
6.256 +show(l)
6.257 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.258 +show(l)
6.259 +
6.260 +s = get_selector(dt, qualifiers)
6.261 +l = s.materialise(dt, (1998, 2, 20, 0, 0, 0))
6.262 +print len(l) == 13, 13, len(l)
6.263 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.264 +print l[-1] == (1998, 2, 17, 9, 0, 0), (1998, 2, 17, 9, 0, 0), l[-1]
6.265 +print
6.266 +
6.267 +qualifiers = [
6.268 + ("WEEKLY", {"interval" : 1}),
6.269 + ("BYDAY", {"values" : [(2, None), (4, None)]})
6.270 + ]
6.271 +
6.272 +l = order_qualifiers(qualifiers)
6.273 +show(l)
6.274 +dt = (1997, 9, 2, 9, 0, 0)
6.275 +l = get_datetime_structure(dt)
6.276 +show(l)
6.277 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.278 +show(l)
6.279 +
6.280 +s = get_selector(dt, qualifiers)
6.281 +l = s.materialise(dt, (1997, 10, 7, 9, 0, 0))
6.282 +print len(l) == 10, 10, len(l)
6.283 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.284 +print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1]
6.285 +print
6.286 +
6.287 +qualifiers = [
6.288 + ("WEEKLY", {"interval" : 1}),
6.289 + ("BYDAY", {"values" : [(2, None), (4, None)]})
6.290 + ]
6.291 +
6.292 +l = order_qualifiers(qualifiers)
6.293 +show(l)
6.294 +dt = (1997, 9, 2, 9, 0, 0)
6.295 +l = get_datetime_structure(dt)
6.296 +show(l)
6.297 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.298 +show(l)
6.299 +
6.300 +s = get_selector(dt, qualifiers)
6.301 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 10)
6.302 +print len(l) == 10, 10, len(l)
6.303 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.304 +print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1]
6.305 +print
6.306 +
6.307 +qualifiers = [
6.308 + ("WEEKLY", {"interval" : 2}),
6.309 + ("BYDAY", {"values" : [(1, None), (3, None), (5, None)]})
6.310 + ]
6.311 +
6.312 +l = order_qualifiers(qualifiers)
6.313 +show(l)
6.314 +dt = (1997, 9, 1, 9, 0, 0)
6.315 +l = get_datetime_structure(dt)
6.316 +show(l)
6.317 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.318 +show(l)
6.319 +
6.320 +s = get_selector(dt, qualifiers)
6.321 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.322 +print len(l) == 25, 25, len(l)
6.323 +print l[0] == (1997, 9, 1, 9, 0, 0), (1997, 9, 1, 9, 0, 0), l[0]
6.324 +print l[-1] == (1997, 12, 22, 9, 0, 0), (1997, 12, 22, 9, 0, 0), l[-1]
6.325 +print
6.326 +
6.327 +qualifiers = [
6.328 + ("WEEKLY", {"interval" : 2}),
6.329 + ("BYDAY", {"values" : [(2, None), (4, None)]})
6.330 + ]
6.331 +
6.332 +l = order_qualifiers(qualifiers)
6.333 +show(l)
6.334 +dt = (1997, 9, 2, 9, 0, 0)
6.335 +l = get_datetime_structure(dt)
6.336 +show(l)
6.337 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.338 +show(l)
6.339 +
6.340 +s = get_selector(dt, qualifiers)
6.341 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 8)
6.342 +print len(l) == 8, 8, len(l)
6.343 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.344 +print l[-1] == (1997, 10, 16, 9, 0, 0), (1997, 10, 16, 9, 0, 0), l[-1]
6.345 +print
6.346 +
6.347 +qualifiers = [
6.348 + ("MONTHLY", {"interval" : 1}),
6.349 + ("BYDAY", {"values" : [(5, 1)]})
6.350 + ]
6.351 +
6.352 +l = order_qualifiers(qualifiers)
6.353 +show(l)
6.354 +dt = (1997, 9, 5, 9, 0, 0)
6.355 +l = get_datetime_structure(dt)
6.356 +show(l)
6.357 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.358 +show(l)
6.359 +
6.360 +s = get_selector(dt, qualifiers)
6.361 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
6.362 +print len(l) == 10, 10, len(l)
6.363 +print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0]
6.364 +print l[-1] == (1998, 6, 5, 9, 0, 0), (1998, 6, 5, 9, 0, 0), l[-1]
6.365 +print
6.366 +
6.367 +qualifiers = [
6.368 + ("MONTHLY", {"interval" : 1}),
6.369 + ("BYDAY", {"values" : [(5, 1)]})
6.370 + ]
6.371 +
6.372 +l = order_qualifiers(qualifiers)
6.373 +show(l)
6.374 +dt = (1997, 9, 5, 9, 0, 0)
6.375 +l = get_datetime_structure(dt)
6.376 +show(l)
6.377 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.378 +show(l)
6.379 +
6.380 +s = get_selector(dt, qualifiers)
6.381 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
6.382 +print len(l) == 4, 4, len(l)
6.383 +print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0]
6.384 +print l[-1] == (1997, 12, 5, 9, 0, 0), (1997, 12, 5, 9, 0, 0), l[-1]
6.385 +print
6.386 +
6.387 +qualifiers = [
6.388 + ("MONTHLY", {"interval" : 2}),
6.389 + ("BYDAY", {"values" : [(7, 1), (7, -1)]})
6.390 + ]
6.391 +
6.392 +l = order_qualifiers(qualifiers)
6.393 +show(l)
6.394 +dt = (1997, 9, 7, 9, 0, 0)
6.395 +l = get_datetime_structure(dt)
6.396 +show(l)
6.397 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.398 +show(l)
6.399 +
6.400 +s = get_selector(dt, qualifiers)
6.401 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
6.402 +print len(l) == 10, 10, len(l)
6.403 +print l[0] == (1997, 9, 7, 9, 0, 0), (1997, 9, 7, 9, 0, 0), l[0]
6.404 +print l[-1] == (1998, 5, 31, 9, 0, 0), (1998, 5, 31, 9, 0, 0), l[-1]
6.405 +print
6.406 +
6.407 +qualifiers = [
6.408 + ("MONTHLY", {"interval" : 1}),
6.409 + ("BYDAY", {"values" : [(1, -2)]})
6.410 + ]
6.411 +
6.412 +l = order_qualifiers(qualifiers)
6.413 +show(l)
6.414 +dt = (1997, 9, 22, 9, 0, 0)
6.415 +l = get_datetime_structure(dt)
6.416 +show(l)
6.417 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.418 +show(l)
6.419 +
6.420 +s = get_selector(dt, qualifiers)
6.421 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 6)
6.422 +print len(l) == 6, 6, len(l)
6.423 +print l[0] == (1997, 9, 22, 9, 0, 0), (1997, 9, 22, 9, 0, 0), l[0]
6.424 +print l[-1] == (1998, 2, 16, 9, 0, 0), (1998, 2, 16, 9, 0, 0), l[-1]
6.425 +print
6.426 +
6.427 +qualifiers = [
6.428 + ("MONTHLY", {"interval" : 1}),
6.429 + ("BYMONTHDAY", {"values" : [-3]})
6.430 + ]
6.431 +
6.432 +l = order_qualifiers(qualifiers)
6.433 +show(l)
6.434 +dt = (1997, 9, 28, 9, 0, 0)
6.435 +l = get_datetime_structure(dt)
6.436 +show(l)
6.437 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.438 +show(l)
6.439 +
6.440 +s = get_selector(dt, qualifiers)
6.441 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 6)
6.442 +print len(l) == 6, 6, len(l)
6.443 +print l[0] == (1997, 9, 28, 9, 0, 0), (1997, 9, 28, 9, 0, 0), l[0]
6.444 +print l[-1] == (1998, 2, 26, 9, 0, 0), (1998, 2, 26, 9, 0, 0), l[-1]
6.445 +print
6.446 +
6.447 +qualifiers = [
6.448 + ("MONTHLY", {"interval" : 1}),
6.449 + ("BYMONTHDAY", {"values" : [2, 15]})
6.450 + ]
6.451 +
6.452 +l = order_qualifiers(qualifiers)
6.453 +show(l)
6.454 +dt = (1997, 9, 2, 9, 0, 0)
6.455 +l = get_datetime_structure(dt)
6.456 +show(l)
6.457 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.458 +show(l)
6.459 +
6.460 +s = get_selector(dt, qualifiers)
6.461 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
6.462 +print len(l) == 10, 10, len(l)
6.463 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.464 +print l[-1] == (1998, 1, 15, 9, 0, 0), (1998, 1, 15, 9, 0, 0), l[-1]
6.465 +print
6.466 +
6.467 +qualifiers = [
6.468 + ("MONTHLY", {"interval" : 1}),
6.469 + ("BYMONTHDAY", {"values" : [1, -1]})
6.470 + ]
6.471 +
6.472 +l = order_qualifiers(qualifiers)
6.473 +show(l)
6.474 +dt = (1997, 9, 30, 9, 0, 0)
6.475 +l = get_datetime_structure(dt)
6.476 +show(l)
6.477 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.478 +show(l)
6.479 +
6.480 +s = get_selector(dt, qualifiers)
6.481 +l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
6.482 +print len(l) == 10, 10, len(l)
6.483 +print l[0] == (1997, 9, 30, 9, 0, 0), (1997, 9, 30, 9, 0, 0), l[0]
6.484 +print l[-1] == (1998, 2, 1, 9, 0, 0), (1998, 2, 1, 9, 0, 0), l[-1]
6.485 +print
6.486 +
6.487 +qualifiers = [
6.488 + ("MONTHLY", {"interval" : 18}),
6.489 + ("BYMONTHDAY", {"values" : [10, 11, 12, 13, 14, 15]})
6.490 + ]
6.491 +
6.492 +l = order_qualifiers(qualifiers)
6.493 +show(l)
6.494 +dt = (1997, 9, 10, 9, 0, 0)
6.495 +l = get_datetime_structure(dt)
6.496 +show(l)
6.497 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.498 +show(l)
6.499 +
6.500 +s = get_selector(dt, qualifiers)
6.501 +l = s.materialise(dt, (1999, 12, 24, 0, 0, 0), 10)
6.502 +print len(l) == 10, 10, len(l)
6.503 +print l[0] == (1997, 9, 10, 9, 0, 0), (1997, 9, 10, 9, 0, 0), l[0]
6.504 +print l[-1] == (1999, 3, 13, 9, 0, 0), (1999, 3, 13, 9, 0, 0), l[-1]
6.505 +print
6.506 +
6.507 +qualifiers = [
6.508 + ("MONTHLY", {"interval" : 2}),
6.509 + ("BYDAY", {"values" : [(2, None)]})
6.510 + ]
6.511 +
6.512 +l = order_qualifiers(qualifiers)
6.513 +show(l)
6.514 +dt = (1997, 9, 2, 9, 0, 0)
6.515 +l = get_datetime_structure(dt)
6.516 +show(l)
6.517 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.518 +show(l)
6.519 +
6.520 +s = get_selector(dt, qualifiers)
6.521 +l = s.materialise(dt, (1998, 4, 1, 0, 0, 0))
6.522 +print len(l) == 18, 18, len(l)
6.523 +print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
6.524 +print l[-1] == (1998, 3, 31, 9, 0, 0), (1998, 3, 31, 9, 0, 0), l[-1]
6.525 +print
6.526 +
6.527 +qualifiers = [
6.528 + ("YEARLY", {"interval" : 1}),
6.529 + ("BYMONTH", {"values" : [6, 7]})
6.530 + ]
6.531 +
6.532 +l = order_qualifiers(qualifiers)
6.533 +show(l)
6.534 +dt = (1997, 6, 10, 9, 0, 0)
6.535 +l = get_datetime_structure(dt)
6.536 +show(l)
6.537 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.538 +show(l)
6.539 +
6.540 +s = get_selector(dt, qualifiers)
6.541 +l = s.materialise(dt, (2001, 12, 24, 0, 0, 0), 10)
6.542 +print len(l) == 10, 10, len(l)
6.543 +print l[0] == (1997, 6, 10, 9, 0, 0), (1997, 6, 10, 9, 0, 0), l[0]
6.544 +print l[-1] == (2001, 7, 10, 9, 0, 0), (2001, 7, 10, 9, 0, 0), l[-1]
6.545 +print
6.546 +
6.547 +qualifiers = [
6.548 + ("YEARLY", {"interval" : 2}),
6.549 + ("BYMONTH", {"values" : [1, 2, 3]})
6.550 + ]
6.551 +
6.552 +l = order_qualifiers(qualifiers)
6.553 +show(l)
6.554 +dt = (1997, 3, 10, 9, 0, 0)
6.555 +l = get_datetime_structure(dt)
6.556 +show(l)
6.557 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.558 +show(l)
6.559 +
6.560 +s = get_selector(dt, qualifiers)
6.561 +l = s.materialise(dt, (2003, 12, 24, 0, 0, 0), 10)
6.562 +print len(l) == 10, 10, len(l)
6.563 +print l[0] == (1997, 3, 10, 9, 0, 0), (1997, 3, 10, 9, 0, 0), l[0]
6.564 +print l[-1] == (2003, 3, 10, 9, 0, 0), (2003, 3, 10, 9, 0, 0), l[-1]
6.565 +print
6.566 +
6.567 +qualifiers = [
6.568 + ("YEARLY", {"interval" : 3}),
6.569 + ("BYYEARDAY", {"values" : [1, 100, 200]})
6.570 + ]
6.571 +
6.572 +l = order_qualifiers(qualifiers)
6.573 +show(l)
6.574 +dt = (1997, 1, 1, 9, 0, 0)
6.575 +l = get_datetime_structure(dt)
6.576 +show(l)
6.577 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.578 +show(l)
6.579 +
6.580 +s = get_selector(dt, qualifiers)
6.581 +l = s.materialise(dt, (2006, 2, 1, 0, 0, 0), 10)
6.582 +print len(l) == 10, 10, len(l)
6.583 +print l[0] == (1997, 1, 1, 9, 0, 0), (1997, 1, 1, 9, 0, 0), l[0]
6.584 +print l[-1] == (2006, 1, 1, 9, 0, 0), (2006, 1, 1, 9, 0, 0), l[-1]
6.585 +print
6.586 +
6.587 +qualifiers = [
6.588 + ("YEARLY", {"interval" : 1}),
6.589 + ("BYDAY", {"values" : [(1, 20)]})
6.590 + ]
6.591 +
6.592 +l = order_qualifiers(qualifiers)
6.593 +show(l)
6.594 +dt = (1997, 5, 19, 9, 0, 0)
6.595 +l = get_datetime_structure(dt)
6.596 +show(l)
6.597 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.598 +show(l)
6.599 +
6.600 +s = get_selector(dt, qualifiers)
6.601 +l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
6.602 +print len(l) == 3, 3, len(l)
6.603 +print l[0] == (1997, 5, 19, 9, 0, 0), (1997, 5, 19, 9, 0, 0), l[0]
6.604 +print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1]
6.605 +print
6.606 +
6.607 +"""
6.608 +qualifiers = [
6.609 + ("YEARLY", {"interval" : 1}),
6.610 + ("BYWEEKNO", {"values" : [20]}),
6.611 + ("BYDAY", {"values" : [(1, None)]})
6.612 + ]
6.613 +
6.614 +l = order_qualifiers(qualifiers)
6.615 +show(l)
6.616 +dt = (1997, 5, 12, 9, 0, 0)
6.617 +l = get_datetime_structure(dt)
6.618 +show(l)
6.619 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.620 +show(l)
6.621 +
6.622 +s = get_selector(dt, qualifiers)
6.623 +l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
6.624 +print len(l) == 3, 3, len(l)
6.625 +print l[0] == (1997, 5, 12, 9, 0, 0), (1997, 5, 12, 9, 0, 0), l[0]
6.626 +print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1]
6.627 +print
6.628 +"""
6.629 +
6.630 +qualifiers = [
6.631 + ("YEARLY", {"interval" : 1}),
6.632 + ("BYMONTH", {"values" : [3]}),
6.633 + ("BYDAY", {"values" : [(4, None)]})
6.634 + ]
6.635 +
6.636 +l = order_qualifiers(qualifiers)
6.637 +show(l)
6.638 +dt = (1997, 3, 13, 9, 0, 0)
6.639 +l = get_datetime_structure(dt)
6.640 +show(l)
6.641 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.642 +show(l)
6.643 +
6.644 +s = get_selector(dt, qualifiers)
6.645 +l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
6.646 +print len(l) == 11, 11, len(l)
6.647 +print l[0] == (1997, 3, 13, 9, 0, 0), (1997, 3, 13, 9, 0, 0), l[0]
6.648 +print l[-1] == (1999, 3, 25, 9, 0, 0), (1999, 3, 25, 9, 0, 0), l[-1]
6.649 +print
6.650 +
6.651 +qualifiers = [
6.652 + ("YEARLY", {"interval" : 1}),
6.653 + ("BYMONTH", {"values" : [6, 7, 8]}),
6.654 + ("BYDAY", {"values" : [(4, None)]})
6.655 + ]
6.656 +
6.657 +l = order_qualifiers(qualifiers)
6.658 +show(l)
6.659 +dt = (1997, 6, 5, 9, 0, 0)
6.660 +l = get_datetime_structure(dt)
6.661 +show(l)
6.662 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.663 +show(l)
6.664 +
6.665 +s = get_selector(dt, qualifiers)
6.666 +l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
6.667 +print len(l) == 39, 39, len(l)
6.668 +print l[0] == (1997, 6, 5, 9, 0, 0), (1997, 6, 5, 9, 0, 0), l[0]
6.669 +print l[-1] == (1999, 8, 26, 9, 0, 0), (1999, 8, 26, 9, 0, 0), l[-1]
6.670 +print
6.671 +
6.672 +qualifiers = [
6.673 + ("MONTHLY", {"interval" : 1}),
6.674 + ("BYMONTHDAY", {"values" : [13]}),
6.675 + ("BYDAY", {"values" : [(5, None)]})
6.676 + ]
6.677 +
6.678 +l = order_qualifiers(qualifiers)
6.679 +show(l)
6.680 +dt = (1997, 9, 2, 9, 0, 0)
6.681 +l = get_datetime_structure(dt)
6.682 +show(l)
6.683 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.684 +show(l)
6.685 +
6.686 +s = get_selector(dt, qualifiers)
6.687 +l = s.materialise(dt, (2000, 12, 24, 0, 0, 0))
6.688 +print len(l) == 5, 5, len(l)
6.689 +print l[0] == (1998, 2, 13, 9, 0, 0), (1998, 2, 13, 9, 0, 0), l[0]
6.690 +print l[-1] == (2000, 10, 13, 9, 0, 0), (2000, 10, 13, 9, 0, 0), l[-1]
6.691 +print
6.692 +
6.693 +qualifiers = [
6.694 + ("MONTHLY", {"interval" : 1}),
6.695 + ("BYMONTHDAY", {"values" : [7, 8, 9, 10, 11, 12, 13]}),
6.696 + ("BYDAY", {"values" : [(6, None)]})
6.697 + ]
6.698 +
6.699 +l = order_qualifiers(qualifiers)
6.700 +show(l)
6.701 +dt = (1997, 9, 13, 9, 0, 0)
6.702 +l = get_datetime_structure(dt)
6.703 +show(l)
6.704 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.705 +show(l)
6.706 +
6.707 +s = get_selector(dt, qualifiers)
6.708 +l = s.materialise(dt, (1998, 6, 30, 0, 0, 0))
6.709 +print len(l) == 10, 10, len(l)
6.710 +print l[0] == (1997, 9, 13, 9, 0, 0), (1997, 9, 13, 9, 0, 0), l[0]
6.711 +print l[-1] == (1998, 6, 13, 9, 0, 0), (1998, 6, 13, 9, 0, 0), l[-1]
6.712 +print
6.713 +
6.714 +qualifiers = [
6.715 + ("YEARLY", {"interval" : 4}),
6.716 + ("BYMONTH", {"values" : [11]}),
6.717 + ("BYMONTHDAY", {"values" : [2, 3, 4, 5, 6, 7, 8]}),
6.718 + ("BYDAY", {"values" : [(2, None)]})
6.719 + ]
6.720 +
6.721 +l = order_qualifiers(qualifiers)
6.722 +show(l)
6.723 +dt = (1996, 11, 5, 9, 0, 0)
6.724 +l = get_datetime_structure(dt)
6.725 +show(l)
6.726 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.727 +show(l)
6.728 +
6.729 +s = get_selector(dt, qualifiers)
6.730 +l = s.materialise(dt, (2004, 12, 24, 0, 0, 0))
6.731 +print len(l) == 3, 3, len(l)
6.732 +print l[0] == (1996, 11, 5, 9, 0, 0), (1996, 11, 5, 9, 0, 0), l[0]
6.733 +print l[-1] == (2004, 11, 2, 9, 0, 0), (2004, 11, 2, 9, 0, 0), l[-1]
6.734 +print
6.735 +
6.736 +qualifiers = [
6.737 + ("MONTHLY", {"interval" : 1}),
6.738 + ("BYDAY", {"values" : [(2, None), (3, None), (4, None)]})
6.739 + ]
6.740 +
6.741 +l = order_qualifiers(qualifiers)
6.742 +show(l)
6.743 +dt = (1997, 9, 4, 9, 0, 0)
6.744 +l = get_datetime_structure(dt)
6.745 +show(l)
6.746 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.747 +show(l)
6.748 +
6.749 +s = get_selector(dt, qualifiers)
6.750 +l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 3, [3])
6.751 +print len(l) == 3, 3, len(l)
6.752 +print l[0] == (1997, 9, 4, 9, 0, 0), (1997, 9, 4, 9, 0, 0), l[0]
6.753 +print l[-1] == (1997, 11, 6, 9, 0, 0), (1997, 11, 6, 9, 0, 0), l[-1]
6.754 +print
6.755 +
6.756 +l2 = l
6.757 +
6.758 +qualifiers = [
6.759 + ("MONTHLY", {"interval" : 1}),
6.760 + ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None)]})
6.761 + ]
6.762 +
6.763 +l = order_qualifiers(qualifiers)
6.764 +show(l)
6.765 +dt = (1997, 9, 29, 9, 0, 0)
6.766 +l = get_datetime_structure(dt)
6.767 +show(l)
6.768 +l = combine_datetime_with_qualifiers(dt, qualifiers)
6.769 +show(l)
6.770 +
6.771 +s = get_selector(dt, qualifiers)
6.772 +l = s.materialise(dt, (1998, 4, 1, 0, 0, 0), None, [-2])
6.773 +print len(l) == 7, 7, len(l)
6.774 +print l[0] == (1997, 9, 29, 9, 0, 0), (1997, 9, 29, 9, 0, 0), l[0]
6.775 +print l[-1] == (1998, 3, 30, 9, 0, 0), (1998, 3, 30, 9, 0, 0), l[-1]
6.776 +print
6.777 +
6.778 +# vim: tabstop=4 expandtab shiftwidth=4
7.1 --- a/tests/qualifiers.py Sat May 14 00:56:54 2016 +0200
7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
7.3 @@ -1,775 +0,0 @@
7.4 -#!/usr/bin/env python
7.5 -
7.6 -"""
7.7 -Test qualifiers for recurring events.
7.8 -
7.9 -Copyright (C) 2014, 2015 Paul Boddie <paul@boddie.org.uk>
7.10 -
7.11 -This program is free software; you can redistribute it and/or modify it under
7.12 -the terms of the GNU General Public License as published by the Free Software
7.13 -Foundation; either version 3 of the License, or (at your option) any later
7.14 -version.
7.15 -
7.16 -This program is distributed in the hope that it will be useful, but WITHOUT
7.17 -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
7.18 -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
7.19 -details.
7.20 -
7.21 -You should have received a copy of the GNU General Public License along with
7.22 -this program. If not, see <http://www.gnu.org/licenses/>.
7.23 -"""
7.24 -
7.25 -from vRecurrence import *
7.26 -
7.27 -def show(l):
7.28 - for x in l:
7.29 - print x
7.30 - print
7.31 -
7.32 -qualifiers = [
7.33 - ("YEARLY", {"interval" : 1})
7.34 - ]
7.35 -
7.36 -l = order_qualifiers(qualifiers)
7.37 -show(l)
7.38 -dt = (1997, 11, 2)
7.39 -l = get_datetime_structure(dt)
7.40 -show(l)
7.41 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.42 -show(l)
7.43 -
7.44 -s = get_selector(dt, qualifiers)
7.45 -l = s.materialise(dt, (2003, 12, 24))
7.46 -print len(l) == 7, 7, len(l)
7.47 -print l[0] == (1997, 11, 2), (1997, 11, 2), l[0]
7.48 -print l[-1] == (2003, 11, 2), (2003, 11, 2), l[-1]
7.49 -print
7.50 -
7.51 -qualifiers = [
7.52 - ("YEARLY", {"interval" : 2}),
7.53 - ("BYMONTH", {"values" : [1]}),
7.54 - ("BYDAY", {"values" : [(6, None)]}),
7.55 - ("BYHOUR", {"values" : [8, 9]}),
7.56 - ("BYMINUTE", {"values" : [30]})
7.57 - ]
7.58 -
7.59 -l = order_qualifiers(qualifiers)
7.60 -show(l)
7.61 -dt = (1997, 1, 5, 8, 30, 0)
7.62 -l = get_datetime_structure(dt)
7.63 -show(l)
7.64 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.65 -show(l)
7.66 -
7.67 -s = get_selector(dt, qualifiers)
7.68 -l = s.materialise(dt, (2003, 12, 24, 0, 0, 0))
7.69 -print len(l) == 32, 32, len(l)
7.70 -print l[0] == (1997, 1, 11, 8, 30, 0), (1997, 1, 11, 8, 30, 0), l[0]
7.71 -print l[-1] == (2003, 1, 25, 9, 30, 0), (2003, 1, 25, 9, 30, 0), l[-1]
7.72 -print
7.73 -
7.74 -qualifiers = [
7.75 - ("DAILY", {"interval" : 1})
7.76 - ]
7.77 -
7.78 -l = order_qualifiers(qualifiers)
7.79 -show(l)
7.80 -dt = (1997, 9, 2, 9, 0, 0)
7.81 -l = get_datetime_structure(dt)
7.82 -show(l)
7.83 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.84 -show(l)
7.85 -
7.86 -s = get_selector(dt, qualifiers)
7.87 -l = s.materialise(dt, (1997, 12, 24), 10)
7.88 -print len(l) == 10, 10, len(l)
7.89 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.90 -print l[-1] == (1997, 9, 11, 9, 0, 0), (1997, 9, 11, 9, 0, 0), l[-1]
7.91 -print
7.92 -
7.93 -qualifiers = [
7.94 - ("DAILY", {"interval" : 1})
7.95 - ]
7.96 -
7.97 -l = order_qualifiers(qualifiers)
7.98 -show(l)
7.99 -dt = (1997, 9, 2, 9, 0, 0)
7.100 -l = get_datetime_structure(dt)
7.101 -show(l)
7.102 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.103 -show(l)
7.104 -
7.105 -s = get_selector(dt, qualifiers)
7.106 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.107 -print len(l) == 113, 113, len(l)
7.108 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.109 -print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
7.110 -print
7.111 -
7.112 -qualifiers = [
7.113 - ("DAILY", {"interval" : 2})
7.114 - ]
7.115 -
7.116 -l = order_qualifiers(qualifiers)
7.117 -show(l)
7.118 -dt = (1997, 9, 2, 9, 0, 0)
7.119 -l = get_datetime_structure(dt)
7.120 -show(l)
7.121 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.122 -show(l)
7.123 -
7.124 -s = get_selector(dt, qualifiers)
7.125 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.126 -print len(l) == 57, 57, len(l)
7.127 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.128 -print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
7.129 -print
7.130 -
7.131 -qualifiers = [
7.132 - ("WEEKLY", {"interval" : 1})
7.133 - ]
7.134 -
7.135 -l = order_qualifiers(qualifiers)
7.136 -show(l)
7.137 -dt = (1997, 9, 2, 9, 0, 0)
7.138 -l = get_datetime_structure(dt)
7.139 -show(l)
7.140 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.141 -show(l)
7.142 -
7.143 -s = get_selector(dt, qualifiers)
7.144 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.145 -print len(l) == 17, 17, len(l)
7.146 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.147 -print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
7.148 -print
7.149 -
7.150 -qualifiers = [
7.151 - ("DAILY", {"interval" : 10})
7.152 - ]
7.153 -
7.154 -l = order_qualifiers(qualifiers)
7.155 -show(l)
7.156 -dt = (1997, 9, 2, 9, 0, 0)
7.157 -l = get_datetime_structure(dt)
7.158 -show(l)
7.159 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.160 -show(l)
7.161 -
7.162 -s = get_selector(dt, qualifiers)
7.163 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 5)
7.164 -print len(l) == 5, 5, len(l)
7.165 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.166 -print l[-1] == (1997, 10, 12, 9, 0, 0), (1997, 10, 12, 9, 0, 0), l[-1]
7.167 -print
7.168 -
7.169 -qualifiers = [
7.170 - ("YEARLY", {"interval" : 1}),
7.171 - ("BYMONTH", {"values" : [1]}),
7.172 - ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]})
7.173 - ]
7.174 -
7.175 -l = order_qualifiers(qualifiers)
7.176 -show(l)
7.177 -dt = (1998, 1, 1, 9, 0, 0)
7.178 -l = get_datetime_structure(dt)
7.179 -show(l)
7.180 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.181 -show(l)
7.182 -
7.183 -s = get_selector(dt, qualifiers)
7.184 -l = s.materialise(dt, (2000, 1, 31, 14, 0, 0))
7.185 -print len(l) == 93, 93, len(l)
7.186 -print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0]
7.187 -print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1]
7.188 -print
7.189 -
7.190 -qualifiers = [
7.191 - ("DAILY", {"interval" : 1}),
7.192 - ("BYMONTH", {"values" : [1]})
7.193 - ]
7.194 -
7.195 -l = order_qualifiers(qualifiers)
7.196 -show(l)
7.197 -dt = (1998, 1, 1, 9, 0, 0)
7.198 -l = get_datetime_structure(dt)
7.199 -show(l)
7.200 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.201 -show(l)
7.202 -
7.203 -s = get_selector(dt, qualifiers)
7.204 -l = s.materialise(dt, (2000, 1, 31, 14, 0, 0))
7.205 -print len(l) == 93, 93, len(l)
7.206 -print l[0] == (1998, 1, 1, 9, 0, 0), (1998, 1, 1, 9, 0, 0), l[0]
7.207 -print l[-1] == (2000, 1, 31, 9, 0, 0), (2000, 1, 31, 9, 0, 0), l[-1]
7.208 -print
7.209 -
7.210 -qualifiers = [
7.211 - ("WEEKLY", {"interval" : 1})
7.212 - ]
7.213 -
7.214 -l = order_qualifiers(qualifiers)
7.215 -show(l)
7.216 -dt = (1997, 9, 2, 9, 0, 0)
7.217 -l = get_datetime_structure(dt)
7.218 -show(l)
7.219 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.220 -show(l)
7.221 -
7.222 -s = get_selector(dt, qualifiers)
7.223 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 10)
7.224 -print len(l) == 10, 10, len(l)
7.225 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.226 -print l[-1] == (1997, 11, 4, 9, 0, 0), (1997, 11, 4, 9, 0, 0), l[-1]
7.227 -print
7.228 -
7.229 -qualifiers = [
7.230 - ("WEEKLY", {"interval" : 1})
7.231 - ]
7.232 -
7.233 -l = order_qualifiers(qualifiers)
7.234 -show(l)
7.235 -dt = (1997, 9, 2, 9, 0, 0)
7.236 -l = get_datetime_structure(dt)
7.237 -show(l)
7.238 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.239 -show(l)
7.240 -
7.241 -s = get_selector(dt, qualifiers)
7.242 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.243 -print len(l) == 17, 17, len(l)
7.244 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.245 -print l[-1] == (1997, 12, 23, 9, 0, 0), (1997, 12, 23, 9, 0, 0), l[-1]
7.246 -print
7.247 -
7.248 -qualifiers = [
7.249 - ("WEEKLY", {"interval" : 2})
7.250 - ]
7.251 -
7.252 -l = order_qualifiers(qualifiers)
7.253 -show(l)
7.254 -dt = (1997, 9, 2, 9, 0, 0)
7.255 -l = get_datetime_structure(dt)
7.256 -show(l)
7.257 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.258 -show(l)
7.259 -
7.260 -s = get_selector(dt, qualifiers)
7.261 -l = s.materialise(dt, (1998, 2, 20, 0, 0, 0))
7.262 -print len(l) == 13, 13, len(l)
7.263 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.264 -print l[-1] == (1998, 2, 17, 9, 0, 0), (1998, 2, 17, 9, 0, 0), l[-1]
7.265 -print
7.266 -
7.267 -qualifiers = [
7.268 - ("WEEKLY", {"interval" : 1}),
7.269 - ("BYDAY", {"values" : [(2, None), (4, None)]})
7.270 - ]
7.271 -
7.272 -l = order_qualifiers(qualifiers)
7.273 -show(l)
7.274 -dt = (1997, 9, 2, 9, 0, 0)
7.275 -l = get_datetime_structure(dt)
7.276 -show(l)
7.277 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.278 -show(l)
7.279 -
7.280 -s = get_selector(dt, qualifiers)
7.281 -l = s.materialise(dt, (1997, 10, 7, 9, 0, 0))
7.282 -print len(l) == 10, 10, len(l)
7.283 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.284 -print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1]
7.285 -print
7.286 -
7.287 -qualifiers = [
7.288 - ("WEEKLY", {"interval" : 1}),
7.289 - ("BYDAY", {"values" : [(2, None), (4, None)]})
7.290 - ]
7.291 -
7.292 -l = order_qualifiers(qualifiers)
7.293 -show(l)
7.294 -dt = (1997, 9, 2, 9, 0, 0)
7.295 -l = get_datetime_structure(dt)
7.296 -show(l)
7.297 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.298 -show(l)
7.299 -
7.300 -s = get_selector(dt, qualifiers)
7.301 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 10)
7.302 -print len(l) == 10, 10, len(l)
7.303 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.304 -print l[-1] == (1997, 10, 2, 9, 0, 0), (1997, 10, 2, 9, 0, 0), l[-1]
7.305 -print
7.306 -
7.307 -qualifiers = [
7.308 - ("WEEKLY", {"interval" : 2}),
7.309 - ("BYDAY", {"values" : [(1, None), (3, None), (5, None)]})
7.310 - ]
7.311 -
7.312 -l = order_qualifiers(qualifiers)
7.313 -show(l)
7.314 -dt = (1997, 9, 1, 9, 0, 0)
7.315 -l = get_datetime_structure(dt)
7.316 -show(l)
7.317 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.318 -show(l)
7.319 -
7.320 -s = get_selector(dt, qualifiers)
7.321 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.322 -print len(l) == 25, 25, len(l)
7.323 -print l[0] == (1997, 9, 1, 9, 0, 0), (1997, 9, 1, 9, 0, 0), l[0]
7.324 -print l[-1] == (1997, 12, 22, 9, 0, 0), (1997, 12, 22, 9, 0, 0), l[-1]
7.325 -print
7.326 -
7.327 -qualifiers = [
7.328 - ("WEEKLY", {"interval" : 2}),
7.329 - ("BYDAY", {"values" : [(2, None), (4, None)]})
7.330 - ]
7.331 -
7.332 -l = order_qualifiers(qualifiers)
7.333 -show(l)
7.334 -dt = (1997, 9, 2, 9, 0, 0)
7.335 -l = get_datetime_structure(dt)
7.336 -show(l)
7.337 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.338 -show(l)
7.339 -
7.340 -s = get_selector(dt, qualifiers)
7.341 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 8)
7.342 -print len(l) == 8, 8, len(l)
7.343 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.344 -print l[-1] == (1997, 10, 16, 9, 0, 0), (1997, 10, 16, 9, 0, 0), l[-1]
7.345 -print
7.346 -
7.347 -qualifiers = [
7.348 - ("MONTHLY", {"interval" : 1}),
7.349 - ("BYDAY", {"values" : [(5, 1)]})
7.350 - ]
7.351 -
7.352 -l = order_qualifiers(qualifiers)
7.353 -show(l)
7.354 -dt = (1997, 9, 5, 9, 0, 0)
7.355 -l = get_datetime_structure(dt)
7.356 -show(l)
7.357 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.358 -show(l)
7.359 -
7.360 -s = get_selector(dt, qualifiers)
7.361 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
7.362 -print len(l) == 10, 10, len(l)
7.363 -print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0]
7.364 -print l[-1] == (1998, 6, 5, 9, 0, 0), (1998, 6, 5, 9, 0, 0), l[-1]
7.365 -print
7.366 -
7.367 -qualifiers = [
7.368 - ("MONTHLY", {"interval" : 1}),
7.369 - ("BYDAY", {"values" : [(5, 1)]})
7.370 - ]
7.371 -
7.372 -l = order_qualifiers(qualifiers)
7.373 -show(l)
7.374 -dt = (1997, 9, 5, 9, 0, 0)
7.375 -l = get_datetime_structure(dt)
7.376 -show(l)
7.377 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.378 -show(l)
7.379 -
7.380 -s = get_selector(dt, qualifiers)
7.381 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0))
7.382 -print len(l) == 4, 4, len(l)
7.383 -print l[0] == (1997, 9, 5, 9, 0, 0), (1997, 9, 5, 9, 0, 0), l[0]
7.384 -print l[-1] == (1997, 12, 5, 9, 0, 0), (1997, 12, 5, 9, 0, 0), l[-1]
7.385 -print
7.386 -
7.387 -qualifiers = [
7.388 - ("MONTHLY", {"interval" : 2}),
7.389 - ("BYDAY", {"values" : [(7, 1), (7, -1)]})
7.390 - ]
7.391 -
7.392 -l = order_qualifiers(qualifiers)
7.393 -show(l)
7.394 -dt = (1997, 9, 7, 9, 0, 0)
7.395 -l = get_datetime_structure(dt)
7.396 -show(l)
7.397 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.398 -show(l)
7.399 -
7.400 -s = get_selector(dt, qualifiers)
7.401 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
7.402 -print len(l) == 10, 10, len(l)
7.403 -print l[0] == (1997, 9, 7, 9, 0, 0), (1997, 9, 7, 9, 0, 0), l[0]
7.404 -print l[-1] == (1998, 5, 31, 9, 0, 0), (1998, 5, 31, 9, 0, 0), l[-1]
7.405 -print
7.406 -
7.407 -qualifiers = [
7.408 - ("MONTHLY", {"interval" : 1}),
7.409 - ("BYDAY", {"values" : [(1, -2)]})
7.410 - ]
7.411 -
7.412 -l = order_qualifiers(qualifiers)
7.413 -show(l)
7.414 -dt = (1997, 9, 22, 9, 0, 0)
7.415 -l = get_datetime_structure(dt)
7.416 -show(l)
7.417 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.418 -show(l)
7.419 -
7.420 -s = get_selector(dt, qualifiers)
7.421 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 6)
7.422 -print len(l) == 6, 6, len(l)
7.423 -print l[0] == (1997, 9, 22, 9, 0, 0), (1997, 9, 22, 9, 0, 0), l[0]
7.424 -print l[-1] == (1998, 2, 16, 9, 0, 0), (1998, 2, 16, 9, 0, 0), l[-1]
7.425 -print
7.426 -
7.427 -qualifiers = [
7.428 - ("MONTHLY", {"interval" : 1}),
7.429 - ("BYMONTHDAY", {"values" : [-3]})
7.430 - ]
7.431 -
7.432 -l = order_qualifiers(qualifiers)
7.433 -show(l)
7.434 -dt = (1997, 9, 28, 9, 0, 0)
7.435 -l = get_datetime_structure(dt)
7.436 -show(l)
7.437 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.438 -show(l)
7.439 -
7.440 -s = get_selector(dt, qualifiers)
7.441 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 6)
7.442 -print len(l) == 6, 6, len(l)
7.443 -print l[0] == (1997, 9, 28, 9, 0, 0), (1997, 9, 28, 9, 0, 0), l[0]
7.444 -print l[-1] == (1998, 2, 26, 9, 0, 0), (1998, 2, 26, 9, 0, 0), l[-1]
7.445 -print
7.446 -
7.447 -qualifiers = [
7.448 - ("MONTHLY", {"interval" : 1}),
7.449 - ("BYMONTHDAY", {"values" : [2, 15]})
7.450 - ]
7.451 -
7.452 -l = order_qualifiers(qualifiers)
7.453 -show(l)
7.454 -dt = (1997, 9, 2, 9, 0, 0)
7.455 -l = get_datetime_structure(dt)
7.456 -show(l)
7.457 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.458 -show(l)
7.459 -
7.460 -s = get_selector(dt, qualifiers)
7.461 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
7.462 -print len(l) == 10, 10, len(l)
7.463 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.464 -print l[-1] == (1998, 1, 15, 9, 0, 0), (1998, 1, 15, 9, 0, 0), l[-1]
7.465 -print
7.466 -
7.467 -qualifiers = [
7.468 - ("MONTHLY", {"interval" : 1}),
7.469 - ("BYMONTHDAY", {"values" : [1, -1]})
7.470 - ]
7.471 -
7.472 -l = order_qualifiers(qualifiers)
7.473 -show(l)
7.474 -dt = (1997, 9, 30, 9, 0, 0)
7.475 -l = get_datetime_structure(dt)
7.476 -show(l)
7.477 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.478 -show(l)
7.479 -
7.480 -s = get_selector(dt, qualifiers)
7.481 -l = s.materialise(dt, (1998, 12, 24, 0, 0, 0), 10)
7.482 -print len(l) == 10, 10, len(l)
7.483 -print l[0] == (1997, 9, 30, 9, 0, 0), (1997, 9, 30, 9, 0, 0), l[0]
7.484 -print l[-1] == (1998, 2, 1, 9, 0, 0), (1998, 2, 1, 9, 0, 0), l[-1]
7.485 -print
7.486 -
7.487 -qualifiers = [
7.488 - ("MONTHLY", {"interval" : 18}),
7.489 - ("BYMONTHDAY", {"values" : [10, 11, 12, 13, 14, 15]})
7.490 - ]
7.491 -
7.492 -l = order_qualifiers(qualifiers)
7.493 -show(l)
7.494 -dt = (1997, 9, 10, 9, 0, 0)
7.495 -l = get_datetime_structure(dt)
7.496 -show(l)
7.497 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.498 -show(l)
7.499 -
7.500 -s = get_selector(dt, qualifiers)
7.501 -l = s.materialise(dt, (1999, 12, 24, 0, 0, 0), 10)
7.502 -print len(l) == 10, 10, len(l)
7.503 -print l[0] == (1997, 9, 10, 9, 0, 0), (1997, 9, 10, 9, 0, 0), l[0]
7.504 -print l[-1] == (1999, 3, 13, 9, 0, 0), (1999, 3, 13, 9, 0, 0), l[-1]
7.505 -print
7.506 -
7.507 -qualifiers = [
7.508 - ("MONTHLY", {"interval" : 2}),
7.509 - ("BYDAY", {"values" : [(2, None)]})
7.510 - ]
7.511 -
7.512 -l = order_qualifiers(qualifiers)
7.513 -show(l)
7.514 -dt = (1997, 9, 2, 9, 0, 0)
7.515 -l = get_datetime_structure(dt)
7.516 -show(l)
7.517 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.518 -show(l)
7.519 -
7.520 -s = get_selector(dt, qualifiers)
7.521 -l = s.materialise(dt, (1998, 4, 1, 0, 0, 0))
7.522 -print len(l) == 18, 18, len(l)
7.523 -print l[0] == (1997, 9, 2, 9, 0, 0), (1997, 9, 2, 9, 0, 0), l[0]
7.524 -print l[-1] == (1998, 3, 31, 9, 0, 0), (1998, 3, 31, 9, 0, 0), l[-1]
7.525 -print
7.526 -
7.527 -qualifiers = [
7.528 - ("YEARLY", {"interval" : 1}),
7.529 - ("BYMONTH", {"values" : [6, 7]})
7.530 - ]
7.531 -
7.532 -l = order_qualifiers(qualifiers)
7.533 -show(l)
7.534 -dt = (1997, 6, 10, 9, 0, 0)
7.535 -l = get_datetime_structure(dt)
7.536 -show(l)
7.537 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.538 -show(l)
7.539 -
7.540 -s = get_selector(dt, qualifiers)
7.541 -l = s.materialise(dt, (2001, 12, 24, 0, 0, 0), 10)
7.542 -print len(l) == 10, 10, len(l)
7.543 -print l[0] == (1997, 6, 10, 9, 0, 0), (1997, 6, 10, 9, 0, 0), l[0]
7.544 -print l[-1] == (2001, 7, 10, 9, 0, 0), (2001, 7, 10, 9, 0, 0), l[-1]
7.545 -print
7.546 -
7.547 -qualifiers = [
7.548 - ("YEARLY", {"interval" : 2}),
7.549 - ("BYMONTH", {"values" : [1, 2, 3]})
7.550 - ]
7.551 -
7.552 -l = order_qualifiers(qualifiers)
7.553 -show(l)
7.554 -dt = (1997, 3, 10, 9, 0, 0)
7.555 -l = get_datetime_structure(dt)
7.556 -show(l)
7.557 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.558 -show(l)
7.559 -
7.560 -s = get_selector(dt, qualifiers)
7.561 -l = s.materialise(dt, (2003, 12, 24, 0, 0, 0), 10)
7.562 -print len(l) == 10, 10, len(l)
7.563 -print l[0] == (1997, 3, 10, 9, 0, 0), (1997, 3, 10, 9, 0, 0), l[0]
7.564 -print l[-1] == (2003, 3, 10, 9, 0, 0), (2003, 3, 10, 9, 0, 0), l[-1]
7.565 -print
7.566 -
7.567 -qualifiers = [
7.568 - ("YEARLY", {"interval" : 3}),
7.569 - ("BYYEARDAY", {"values" : [1, 100, 200]})
7.570 - ]
7.571 -
7.572 -l = order_qualifiers(qualifiers)
7.573 -show(l)
7.574 -dt = (1997, 1, 1, 9, 0, 0)
7.575 -l = get_datetime_structure(dt)
7.576 -show(l)
7.577 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.578 -show(l)
7.579 -
7.580 -s = get_selector(dt, qualifiers)
7.581 -l = s.materialise(dt, (2006, 2, 1, 0, 0, 0), 10)
7.582 -print len(l) == 10, 10, len(l)
7.583 -print l[0] == (1997, 1, 1, 9, 0, 0), (1997, 1, 1, 9, 0, 0), l[0]
7.584 -print l[-1] == (2006, 1, 1, 9, 0, 0), (2006, 1, 1, 9, 0, 0), l[-1]
7.585 -print
7.586 -
7.587 -qualifiers = [
7.588 - ("YEARLY", {"interval" : 1}),
7.589 - ("BYDAY", {"values" : [(1, 20)]})
7.590 - ]
7.591 -
7.592 -l = order_qualifiers(qualifiers)
7.593 -show(l)
7.594 -dt = (1997, 5, 19, 9, 0, 0)
7.595 -l = get_datetime_structure(dt)
7.596 -show(l)
7.597 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.598 -show(l)
7.599 -
7.600 -s = get_selector(dt, qualifiers)
7.601 -l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
7.602 -print len(l) == 3, 3, len(l)
7.603 -print l[0] == (1997, 5, 19, 9, 0, 0), (1997, 5, 19, 9, 0, 0), l[0]
7.604 -print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1]
7.605 -print
7.606 -
7.607 -"""
7.608 -qualifiers = [
7.609 - ("YEARLY", {"interval" : 1}),
7.610 - ("BYWEEKNO", {"values" : [20]}),
7.611 - ("BYDAY", {"values" : [(1, None)]})
7.612 - ]
7.613 -
7.614 -l = order_qualifiers(qualifiers)
7.615 -show(l)
7.616 -dt = (1997, 5, 12, 9, 0, 0)
7.617 -l = get_datetime_structure(dt)
7.618 -show(l)
7.619 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.620 -show(l)
7.621 -
7.622 -s = get_selector(dt, qualifiers)
7.623 -l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
7.624 -print len(l) == 3, 3, len(l)
7.625 -print l[0] == (1997, 5, 12, 9, 0, 0), (1997, 5, 12, 9, 0, 0), l[0]
7.626 -print l[-1] == (1999, 5, 17, 9, 0, 0), (1999, 5, 17, 9, 0, 0), l[-1]
7.627 -print
7.628 -"""
7.629 -
7.630 -qualifiers = [
7.631 - ("YEARLY", {"interval" : 1}),
7.632 - ("BYMONTH", {"values" : [3]}),
7.633 - ("BYDAY", {"values" : [(4, None)]})
7.634 - ]
7.635 -
7.636 -l = order_qualifiers(qualifiers)
7.637 -show(l)
7.638 -dt = (1997, 3, 13, 9, 0, 0)
7.639 -l = get_datetime_structure(dt)
7.640 -show(l)
7.641 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.642 -show(l)
7.643 -
7.644 -s = get_selector(dt, qualifiers)
7.645 -l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
7.646 -print len(l) == 11, 11, len(l)
7.647 -print l[0] == (1997, 3, 13, 9, 0, 0), (1997, 3, 13, 9, 0, 0), l[0]
7.648 -print l[-1] == (1999, 3, 25, 9, 0, 0), (1999, 3, 25, 9, 0, 0), l[-1]
7.649 -print
7.650 -
7.651 -qualifiers = [
7.652 - ("YEARLY", {"interval" : 1}),
7.653 - ("BYMONTH", {"values" : [6, 7, 8]}),
7.654 - ("BYDAY", {"values" : [(4, None)]})
7.655 - ]
7.656 -
7.657 -l = order_qualifiers(qualifiers)
7.658 -show(l)
7.659 -dt = (1997, 6, 5, 9, 0, 0)
7.660 -l = get_datetime_structure(dt)
7.661 -show(l)
7.662 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.663 -show(l)
7.664 -
7.665 -s = get_selector(dt, qualifiers)
7.666 -l = s.materialise(dt, (1999, 12, 24, 0, 0, 0))
7.667 -print len(l) == 39, 39, len(l)
7.668 -print l[0] == (1997, 6, 5, 9, 0, 0), (1997, 6, 5, 9, 0, 0), l[0]
7.669 -print l[-1] == (1999, 8, 26, 9, 0, 0), (1999, 8, 26, 9, 0, 0), l[-1]
7.670 -print
7.671 -
7.672 -qualifiers = [
7.673 - ("MONTHLY", {"interval" : 1}),
7.674 - ("BYMONTHDAY", {"values" : [13]}),
7.675 - ("BYDAY", {"values" : [(5, None)]})
7.676 - ]
7.677 -
7.678 -l = order_qualifiers(qualifiers)
7.679 -show(l)
7.680 -dt = (1997, 9, 2, 9, 0, 0)
7.681 -l = get_datetime_structure(dt)
7.682 -show(l)
7.683 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.684 -show(l)
7.685 -
7.686 -s = get_selector(dt, qualifiers)
7.687 -l = s.materialise(dt, (2000, 12, 24, 0, 0, 0))
7.688 -print len(l) == 5, 5, len(l)
7.689 -print l[0] == (1998, 2, 13, 9, 0, 0), (1998, 2, 13, 9, 0, 0), l[0]
7.690 -print l[-1] == (2000, 10, 13, 9, 0, 0), (2000, 10, 13, 9, 0, 0), l[-1]
7.691 -print
7.692 -
7.693 -qualifiers = [
7.694 - ("MONTHLY", {"interval" : 1}),
7.695 - ("BYMONTHDAY", {"values" : [7, 8, 9, 10, 11, 12, 13]}),
7.696 - ("BYDAY", {"values" : [(6, None)]})
7.697 - ]
7.698 -
7.699 -l = order_qualifiers(qualifiers)
7.700 -show(l)
7.701 -dt = (1997, 9, 13, 9, 0, 0)
7.702 -l = get_datetime_structure(dt)
7.703 -show(l)
7.704 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.705 -show(l)
7.706 -
7.707 -s = get_selector(dt, qualifiers)
7.708 -l = s.materialise(dt, (1998, 6, 30, 0, 0, 0))
7.709 -print len(l) == 10, 10, len(l)
7.710 -print l[0] == (1997, 9, 13, 9, 0, 0), (1997, 9, 13, 9, 0, 0), l[0]
7.711 -print l[-1] == (1998, 6, 13, 9, 0, 0), (1998, 6, 13, 9, 0, 0), l[-1]
7.712 -print
7.713 -
7.714 -qualifiers = [
7.715 - ("YEARLY", {"interval" : 4}),
7.716 - ("BYMONTH", {"values" : [11]}),
7.717 - ("BYMONTHDAY", {"values" : [2, 3, 4, 5, 6, 7, 8]}),
7.718 - ("BYDAY", {"values" : [(2, None)]})
7.719 - ]
7.720 -
7.721 -l = order_qualifiers(qualifiers)
7.722 -show(l)
7.723 -dt = (1996, 11, 5, 9, 0, 0)
7.724 -l = get_datetime_structure(dt)
7.725 -show(l)
7.726 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.727 -show(l)
7.728 -
7.729 -s = get_selector(dt, qualifiers)
7.730 -l = s.materialise(dt, (2004, 12, 24, 0, 0, 0))
7.731 -print len(l) == 3, 3, len(l)
7.732 -print l[0] == (1996, 11, 5, 9, 0, 0), (1996, 11, 5, 9, 0, 0), l[0]
7.733 -print l[-1] == (2004, 11, 2, 9, 0, 0), (2004, 11, 2, 9, 0, 0), l[-1]
7.734 -print
7.735 -
7.736 -qualifiers = [
7.737 - ("MONTHLY", {"interval" : 1}),
7.738 - ("BYDAY", {"values" : [(2, None), (3, None), (4, None)]})
7.739 - ]
7.740 -
7.741 -l = order_qualifiers(qualifiers)
7.742 -show(l)
7.743 -dt = (1997, 9, 4, 9, 0, 0)
7.744 -l = get_datetime_structure(dt)
7.745 -show(l)
7.746 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.747 -show(l)
7.748 -
7.749 -s = get_selector(dt, qualifiers)
7.750 -l = s.materialise(dt, (1997, 12, 24, 0, 0, 0), 3, [3])
7.751 -print len(l) == 3, 3, len(l)
7.752 -print l[0] == (1997, 9, 4, 9, 0, 0), (1997, 9, 4, 9, 0, 0), l[0]
7.753 -print l[-1] == (1997, 11, 6, 9, 0, 0), (1997, 11, 6, 9, 0, 0), l[-1]
7.754 -print
7.755 -
7.756 -l2 = l
7.757 -
7.758 -qualifiers = [
7.759 - ("MONTHLY", {"interval" : 1}),
7.760 - ("BYDAY", {"values" : [(1, None), (2, None), (3, None), (4, None), (5, None)]})
7.761 - ]
7.762 -
7.763 -l = order_qualifiers(qualifiers)
7.764 -show(l)
7.765 -dt = (1997, 9, 29, 9, 0, 0)
7.766 -l = get_datetime_structure(dt)
7.767 -show(l)
7.768 -l = combine_datetime_with_qualifiers(dt, qualifiers)
7.769 -show(l)
7.770 -
7.771 -s = get_selector(dt, qualifiers)
7.772 -l = s.materialise(dt, (1998, 4, 1, 0, 0, 0), None, [-2])
7.773 -print len(l) == 7, 7, len(l)
7.774 -print l[0] == (1997, 9, 29, 9, 0, 0), (1997, 9, 29, 9, 0, 0), l[0]
7.775 -print l[-1] == (1998, 3, 30, 9, 0, 0), (1998, 3, 30, 9, 0, 0), l[-1]
7.776 -print
7.777 -
7.778 -# vim: tabstop=4 expandtab shiftwidth=4