1.1 --- a/EventAggregatorSupport.py Wed Jul 11 00:46:55 2012 +0200
1.2 +++ b/EventAggregatorSupport.py Sun Jul 15 21:28:37 2012 +0200
1.3 @@ -325,15 +325,15 @@
1.4
1.5 # Event parsing from page texts.
1.6
1.7 -def parseEvents(text, page):
1.8 +def parseEvents(text, event_page):
1.9
1.10 """
1.11 Parse events in the given 'text', returning a list of event objects for the
1.12 - given 'page'.
1.13 + given 'event_page'.
1.14 """
1.15
1.16 details = {}
1.17 - events = [Event(page, details)]
1.18 + events = [Event(event_page, details)]
1.19
1.20 for match in definition_list_regexp.finditer(text):
1.21
1.22 @@ -384,7 +384,7 @@
1.23 # Make a new event.
1.24
1.25 details = {}
1.26 - events.append(Event(page, details))
1.27 + events.append(Event(event_page, details))
1.28
1.29 details[term] = desc
1.30
1.31 @@ -1180,26 +1180,19 @@
1.32
1.33 return earliest, latest
1.34
1.35 -def setEventTimestamps(request, events):
1.36 +def getLatestEventTimestamp(events):
1.37
1.38 """
1.39 - Using 'request', set timestamp details in the details dictionary of each of
1.40 - the 'events'.
1.41 -
1.42 - Return the latest timestamp found.
1.43 + Return the latest timestamp found from the given 'events'.
1.44 """
1.45
1.46 latest = None
1.47
1.48 for event in events:
1.49 - event_details = event.getDetails()
1.50 -
1.51 - # Populate the details with event metadata.
1.52 -
1.53 - event_details.update(event.getMetadata())
1.54 -
1.55 - if latest is None or latest < event_details["last-modified"]:
1.56 - latest = event_details["last-modified"]
1.57 + metadata = event.getMetadata()
1.58 +
1.59 + if latest is None or latest < metadata["last-modified"]:
1.60 + latest = metadata["last-modified"]
1.61
1.62 return latest
1.63
1.64 @@ -3413,12 +3406,15 @@
1.65
1.66 # Event-only formatting.
1.67
1.68 -def formatEvent(event, request, fmt):
1.69 -
1.70 - "Format the given 'event' using the 'request' and formatter 'fmt'."
1.71 +def formatEvent(event, request, fmt, write=None):
1.72 +
1.73 + """
1.74 + Format the given 'event' using the 'request' and formatter 'fmt'. If the
1.75 + 'write' parameter is specified, use it to write output.
1.76 + """
1.77
1.78 event_details = event.getDetails()
1.79 - write = request.write
1.80 + write = write or request.write
1.81
1.82 write(fmt.definition_list(on=1))
1.83
1.84 @@ -3437,7 +3433,7 @@
1.85
1.86 write(fmt.definition_list(on=0))
1.87
1.88 -def formatEventsForOutputType(events, request, mimetype, parent=None, descriptions=None, latest_timestamp=None):
1.89 +def formatEventsForOutputType(events, request, mimetype, parent=None, descriptions=None, latest_timestamp=None, write=None):
1.90
1.91 """
1.92 Format the given 'events' using the 'request' for the given 'mimetype'.
1.93 @@ -3451,9 +3447,11 @@
1.94
1.95 The optional 'latest_timestamp' indicates the timestamp of the latest edit
1.96 of the page or event collection.
1.97 +
1.98 + If the 'write' parameter is specified, use it to write output.
1.99 """
1.100
1.101 - write = request.write
1.102 + write = write or request.write
1.103
1.104 # Start the collection.
1.105
1.106 @@ -3498,7 +3496,7 @@
1.107 write('</channel>\r\n')
1.108 write('</rss>\r\n')
1.109
1.110 -def formatEventForOutputType(event, request, mimetype, parent=None, descriptions=None):
1.111 +def formatEventForOutputType(event, request, mimetype, parent=None, descriptions=None, write=None):
1.112
1.113 """
1.114 Format the given 'event' using the 'request' for the given 'mimetype'.
1.115 @@ -3509,10 +3507,13 @@
1.116
1.117 The optional 'descriptions' indicates the nature of any description given
1.118 for events in the output resource.
1.119 +
1.120 + If the 'write' parameter is specified, use it to write output.
1.121 """
1.122
1.123 - write = request.write
1.124 + write = write or request.write
1.125 event_details = event.getDetails()
1.126 + event_metadata = event.getMetadata()
1.127
1.128 if mimetype == "text/calendar":
1.129
1.130 @@ -3529,9 +3530,9 @@
1.131 write("BEGIN:VEVENT\r\n")
1.132 write("UID:%s\r\n" % link)
1.133 write("URL:%s\r\n" % link)
1.134 - write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["created"].as_tuple()[:6])
1.135 - write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["last-modified"].as_tuple()[:6])
1.136 - write("SEQUENCE:%d\r\n" % event_details["sequence"])
1.137 + write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_metadata["created"].as_tuple()[:6])
1.138 + write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_metadata["last-modified"].as_tuple()[:6])
1.139 + write("SEQUENCE:%d\r\n" % event_metadata["sequence"])
1.140
1.141 start = event_details["start"]
1.142 end = event_details["end"]
1.143 @@ -3588,7 +3589,7 @@
1.144 if descriptions == "page":
1.145 description = event_details.get("description", "")
1.146 else:
1.147 - description = event_details["last-comment"]
1.148 + description = event_metadata["last-comment"]
1.149
1.150 write('<description>%s</description>\r\n' %
1.151 fmt.text(event_page.formatText(description, fmt)))
1.152 @@ -3597,10 +3598,15 @@
1.153 write('<category>%s</category>\r\n' %
1.154 fmt.text(event_page.formatText(topic, fmt)))
1.155
1.156 - write('<pubDate>%s</pubDate>\r\n' % event_details["created"].as_HTTP_datetime_string())
1.157 - write('<guid>%s#%s</guid>\r\n' % (link, event_details["sequence"]))
1.158 + write('<pubDate>%s</pubDate>\r\n' % event_metadata["created"].as_HTTP_datetime_string())
1.159 + write('<guid>%s#%s</guid>\r\n' % (link, event_metadata["sequence"]))
1.160 write('</item>\r\n')
1.161
1.162 + elif mimetype == "text/html":
1.163 + fmt = request.html_formatter
1.164 + fmt.setPage(request.page)
1.165 + formatEvent(event, request, fmt, write=write)
1.166 +
1.167 # iCalendar format helper functions.
1.168
1.169 def write_calendar_datetime(request, datetime):
2.1 --- a/actions/EventAggregatorSummary.py Wed Jul 11 00:46:55 2012 +0200
2.2 +++ b/actions/EventAggregatorSummary.py Sun Jul 15 21:28:37 2012 +0200
2.3 @@ -288,7 +288,7 @@
2.4 events = getEventsFromResources(getEventPages(pages))
2.5 events += getEventsFromResources(getEventResources(remote_sources, calendar_start, calendar_end, request))
2.6 all_shown_events = getEventsInPeriod(events, getCalendarPeriod(calendar_start, calendar_end))
2.7 - latest_timestamp = setEventTimestamps(request, all_shown_events)
2.8 + latest_timestamp = getLatestEventTimestamp(all_shown_events)
2.9
2.10 # Output summary data...
2.11
3.1 --- a/parsers/event.py Wed Jul 11 00:46:55 2012 +0200
3.2 +++ b/parsers/event.py Sun Jul 15 21:28:37 2012 +0200
3.3 @@ -34,23 +34,31 @@
3.4 self.request = request
3.5 #self.attrs = parseAttributes(kw.get("format_args", ""), False)
3.6
3.7 - def format(self, fmt):
3.8 + def format(self, fmt, write=None):
3.9
3.10 - "Format an event using the given formatter 'fmt'."
3.11 + """
3.12 + Format an event using the given formatter 'fmt'. If the 'write'
3.13 + parameter is specified, use it to write output; otherwise, write output
3.14 + using the request.
3.15 + """
3.16
3.17 - events = parseEvents(self.raw, self.request.page)
3.18 + events = parseEvents(self.raw, EventPage(self.request.page))
3.19
3.20 for event in events:
3.21 - formatEvent(event, self.request, fmt)
3.22 + formatEvent(event, self.request, fmt, write=write)
3.23
3.24 # Extra API methods.
3.25
3.26 - def formatText(self, text, mimetype):
3.27 + def formatForOutputType(self, mimetype, write=None):
3.28
3.29 - "Format the event 'text' for the given 'mimetype'."
3.30 + """
3.31 + Format an event for the given 'mimetype'. If the 'write' parameter is
3.32 + specified, use it to write output; otherwise, write output using the
3.33 + request.
3.34 + """
3.35
3.36 - events = parseEvents(text)
3.37 - formatEventsForOutputType(events, self.request, mimetype)
3.38 + events = parseEvents(self.raw, EventPage(self.request.page))
3.39 + formatEventsForOutputType(events, self.request, mimetype, write=write)
3.40
3.41 # Class methods.
3.42