1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 from datetime import date
20 from datetime import datetime
21 from os.path import abspath
22 import os.path
23
24 from icalendar import Calendar
25
26 from timelinelib.db.exceptions import TimelineIOError
27 from timelinelib.db.objects import Event
28 from timelinelib.db.observer import Observable
29 from timelinelib.db.search import generic_event_search
30 from timelinelib.db.utils import IdCounter
31 from timelinelib.time import PyTimeType
32 from timelinelib.utils import ex_msg
33
34
36
42
45
48
51
52 - def search(self, search_string):
54
58 return self._get_events(decider)
59
61 def decider(event):
62 return True
63 return self._get_events(decider)
64
66 events = self._get_events()
67 if events:
68 return min(events, key=lambda x: x.time_period.start_time)
69 else:
70 return None
71
73 events = self._get_events()
74 if events:
75 return max(events, key=lambda x: x.time_period.end_time)
76 else:
77 return None
78
81
84
87
90
93
96
99
101 events = self._get_events()
102 for e in events:
103 if e.id == id:
104 return e
105 return None
106
119
121 self.cal = Calendar()
122 try:
123 file = open(self.path, "rb")
124 try:
125 file_contents = file.read()
126 try:
127 self.cal = Calendar.from_string(file_contents)
128 for event in self.cal.walk("VEVENT"):
129 event["timeline_id"] = self.event_id_counter.get_next()
130 except Exception, pe:
131 msg1 = _("Unable to read timeline data from '%s'.")
132 msg2 = "\n\n" + ex_msg(pe)
133 raise TimelineIOError((msg1 % abspath(self.path)) + msg2)
134 finally:
135 file.close()
136 except IOError, e:
137 msg = _("Unable to read from file '%s'.")
138 whole_msg = (msg + "\n\n%s") % (abspath(self.path), e)
139 raise TimelineIOError(whole_msg)
140
141
151
152
154 if isinstance(d, datetime):
155 return datetime(d.year, d.month, d.day, d.hour, d.minute, d.second)
156 elif isinstance(d, date):
157 return datetime(d.year, d.month, d.day)
158 else:
159 raise TimelineIOError("Unknown date.")
160