Lines 139-142
Link Here
|
139 |
return r |
139 |
return r |
140 |
|
140 |
|
|
|
141 |
GDEND_RE = re.compile("DTEND;[^:]*:(\S+)") |
142 |
def gdRecurToEnd(recur): |
143 |
m = GDEND_RE.search(recur) |
144 |
if m is None: |
145 |
raise DateConversionError("failed to find end in \"%s\"" % recur) |
146 |
start = m.group(1) |
147 |
year = start[0:4] |
148 |
month = start[4:6] |
149 |
day = start[6:8] |
150 |
hour = start[9:11] |
151 |
min = start[11:13] |
152 |
sec = start[13:15] |
153 |
return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec) |
154 |
|
155 |
GDSTART_RE = re.compile("DTSTART;[^:]*:(\S+)") |
156 |
def gdRecurToStart(recur): |
157 |
m = GDSTART_RE.search(recur) |
158 |
if m is None: |
159 |
raise DateConversionError("failed to find start in \"%s\"" % recur) |
160 |
start = m.group(1) |
161 |
year = start[0:4] |
162 |
month = start[4:6] |
163 |
day = start[6:8] |
164 |
hour = start[9:11] |
165 |
min = start[11:13] |
166 |
sec = start[13:15] |
167 |
return "%s-%2s-%2sT%2s:%2s:%2s" % (year, month, day, hour, min, sec) |
168 |
|
169 |
GDRECUR_RE = re.compile("RRULE:(\S+)") |
170 |
def gdRecurToORecur(recur): |
171 |
m = GDRECUR_RE.search(recur) |
172 |
if m is None: |
173 |
raise DateConversionError("failed to find rule in \"%s\"" % recur) |
174 |
return m.group(1) |
175 |
|
141 |
class GCalRequestError(Exception): |
176 |
class GCalRequestError(Exception): |
142 |
def __init__(self, response): |
177 |
def __init__(self, response): |
Lines 160-170
Link Here
|
160 |
self.editUri = self.elementValue('atom:link[@rel="edit"]/@href') |
195 |
self.editUri = self.elementValue('atom:link[@rel="edit"]/@href') |
161 |
self.content = self.elementValue('atom:content[@type="text"]/text()') |
196 |
self.content = self.elementValue('atom:content[@type="text"]/text()') |
162 |
self.dtstart = self.elementValue('gd:when/@startTime') |
197 |
self.dtrecur = self.elementValue('gd:recurrence/text()') |
163 |
self.dtend = self.elementValue('gd:when/@endTime') |
198 |
if self.dtrecur: |
|
|
199 |
pass |
200 |
self.dtstart = gdRecurToStart(self.dtrecur) |
201 |
self.dtend = gdRecurToEnd(self.dtrecur) |
202 |
self.dtrecur = gdRecurToORecur(self.dtrecur) |
203 |
else: |
204 |
self.dtstart = self.elementValue('gd:when/@startTime') |
205 |
self.dtend = self.elementValue('gd:when/@endTime') |
164 |
|
206 |
|
165 |
self.eventStatus = self.elementValue('gd:eventStatus/@value') |
207 |
self.eventStatus = self.elementValue('gd:eventStatus/@value') |
166 |
self.whereString = self.elementValue('gd:where/@valueString') |
208 |
self.whereString = self.elementValue('gd:where/@valueString') |
167 |
|
209 |
|
168 |
#FIXME: Handle recurrency |
|
|
169 |
#FIXME: Handle gd:eventStatus |
210 |
#FIXME: Handle gd:eventStatus |
170 |
|
211 |
|
Lines 200-206
Link Here
|
200 |
self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart)) |
241 |
self.addElementContent(doc, event, 'DateStarted', xsdateToOsync(self.dtstart)) |
201 |
self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend)) |
242 |
self.addElementContent(doc, event, 'DateEnd', xsdateToOsync(self.dtend)) |
|
|
243 |
if self.dtrecur: |
244 |
self.addElementContent(doc, event, 'RecurrenceRule', |
245 |
self.dtrecur) |
246 |
|
202 |
self.addElementContent(doc, event, 'Location', self.whereString) |
247 |
self.addElementContent(doc, event, 'Location', self.whereString) |
203 |
|
248 |
|
204 |
#TODO: UID, editUri, dtstart, dtend, recurrency, eventStatus |
249 |
#TODO: UID, editUri, dtstart, dtend, eventStatus |
205 |
return doc.toxml(encoding='utf-8') |
250 |
return doc.toxml(encoding='utf-8') |
206 |
|
251 |
|