# HG changeset patch # User Paul Boddie # Date 1459715993 -7200 # Node ID 08577002f5e9e09c94ebef2d871fe2ba0b006314 # Parent 564399c0a7aa4fb25b1f15fb9b4ae55b0169f647 Support an append method on collections; handle start/end-of-time points. diff -r 564399c0a7aa -r 08577002f5e9 imiptools/period.py --- a/imiptools/period.py Sun Apr 03 22:37:54 2016 +0200 +++ b/imiptools/period.py Sun Apr 03 22:39:53 2016 +0200 @@ -476,11 +476,14 @@ # List emulation methods. - def __iadd__(self, other): - for period in other: + def __iadd__(self, periods): + for period in periods: self.insert_period(period) return self + def append(self, period): + self.insert_period(period) + # Operations. def can_schedule(self, periods, uid, recurrenceid): @@ -1024,7 +1027,13 @@ "Return the entries in the collection at or after 'period'." - columns, values = ["start >= ?"], [format_datetime(period.get_start_point())] + start = format_datetime(period.get_start_point()) + + columns, values = [], [] + + if start: + columns.append("start >= ?") + values.append(start) query, values = self.get_query( "select %(columns)s from %(table)s :condition" % { @@ -1041,7 +1050,13 @@ "Return the entries in the collection before 'period'." - columns, values = ["start < ?"], [format_datetime(period.get_end_point())] + end = format_datetime(period.get_end_point()) + + columns, values = [], [] + + if end: + columns.append("start < ?") + values.append(end) query, values = self.get_query( "select %(columns)s from %(table)s :condition" % { @@ -1061,7 +1076,7 @@ 'period'. """ - columns, values = ["start < ?", "end > ?"], [format_datetime(period.get_end_point()), format_datetime(period.get_start_point())] + columns, values = self._get_period_values(period) query, values = self.get_query( "select %(columns)s from %(table)s :condition" % { @@ -1080,7 +1095,7 @@ self._check_mutable() - columns, values = ["start < ?", "end > ?"], [format_datetime(period.get_end_point()), format_datetime(period.get_start_point())] + columns, values = self._get_period_values(period) query, values = self.get_query( "delete from %(table)s :condition" % { @@ -1090,6 +1105,22 @@ self.cursor.execute(query, values) + def _get_period_values(self, period): + + start = format_datetime(period.get_start_point()) + end = format_datetime(period.get_end_point()) + + columns, values = [], [] + + if end: + columns.append("start < ?") + values.append(end) + if start: + columns.append("end > ?") + values.append(start) + + return columns, values + # Period layout. def get_scale(periods, tzid, view_period=None):