1.1 --- a/actions/EventAggregatorSummary.py Mon Jun 04 21:07:26 2012 +0200
1.2 +++ b/actions/EventAggregatorSummary.py Mon Jun 18 01:09:14 2012 +0200
1.3 @@ -242,12 +242,6 @@
1.4
1.5 pass
1.6
1.7 -def getQuotedText(text):
1.8 -
1.9 - "Return the 'text' quoted for iCalendar purposes."
1.10 -
1.11 - return text.replace(";", r"\;").replace(",", r"\,")
1.12 -
1.13 def write_resource(request):
1.14
1.15 """
1.16 @@ -317,140 +311,19 @@
1.17 # iCalendar output...
1.18
1.19 if format == "iCalendar":
1.20 - request.write("BEGIN:VCALENDAR\r\n")
1.21 - request.write("PRODID:-//MoinMoin//EventAggregatorSummary\r\n")
1.22 - request.write("VERSION:2.0\r\n")
1.23 -
1.24 - for event in all_shown_events:
1.25 - event_details = event.getDetails()
1.26 -
1.27 - # NOTE: A custom formatter making attributes for links and plain
1.28 - # NOTE: text for values could be employed here.
1.29 -
1.30 - # Get the summary details.
1.31 -
1.32 - event_summary = event.getSummary(parent)
1.33 - link = event.getEventURL()
1.34 -
1.35 - # Output the event details.
1.36 -
1.37 - request.write("BEGIN:VEVENT\r\n")
1.38 - request.write("UID:%s\r\n" % link)
1.39 - request.write("URL:%s\r\n" % link)
1.40 - request.write("DTSTAMP:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["created"].as_tuple()[:6])
1.41 - request.write("LAST-MODIFIED:%04d%02d%02dT%02d%02d%02dZ\r\n" % event_details["last-modified"].as_tuple()[:6])
1.42 - request.write("SEQUENCE:%d\r\n" % event_details["sequence"])
1.43 -
1.44 - start = event_details["start"]
1.45 - end = event_details["end"]
1.46 -
1.47 - if isinstance(start, DateTime):
1.48 - request.write("DTSTART")
1.49 - write_calendar_datetime(request, start)
1.50 - else:
1.51 - request.write("DTSTART;VALUE=DATE:%04d%02d%02d\r\n" % start.as_date().as_tuple())
1.52 -
1.53 - if isinstance(end, DateTime):
1.54 - request.write("DTEND")
1.55 - write_calendar_datetime(request, end)
1.56 - else:
1.57 - request.write("DTEND;VALUE=DATE:%04d%02d%02d\r\n" % end.next_day().as_date().as_tuple())
1.58 -
1.59 - request.write("SUMMARY:%s\r\n" % getQuotedText(event_summary))
1.60 -
1.61 - # Optional details.
1.62 -
1.63 - if event_details.get("topics") or event_details.get("categories"):
1.64 - request.write("CATEGORIES:%s\r\n" % ",".join(
1.65 - [getQuotedText(topic)
1.66 - for topic in event_details.get("topics") or event_details.get("categories")]
1.67 - ))
1.68 - if event_details.has_key("location"):
1.69 - request.write("LOCATION:%s\r\n" % getQuotedText(event_details["location"]))
1.70 - if event_details.has_key("geo"):
1.71 - request.write("GEO:%s\r\n" % getQuotedText(";".join([str(ref.to_degrees()) for ref in event_details["geo"]])))
1.72 -
1.73 - request.write("END:VEVENT\r\n")
1.74 -
1.75 - request.write("END:VCALENDAR\r\n")
1.76 + mimetype = "text/calendar"
1.77
1.78 # RSS output...
1.79
1.80 elif format == "RSS":
1.81 -
1.82 - # Using the page name and the page URL in the title, link and
1.83 - # description.
1.84 -
1.85 - path_info = getPathInfo(request)
1.86 -
1.87 - request.write('<rss version="2.0">\r\n')
1.88 - request.write('<channel>\r\n')
1.89 - request.write('<title>%s</title>\r\n' % path_info[1:])
1.90 - request.write('<link>%s%s</link>\r\n' % (request.getBaseURL(), path_info))
1.91 - request.write('<description>Events published on %s%s</description>\r\n' % (request.getBaseURL(), path_info))
1.92 -
1.93 - if latest_timestamp is not None:
1.94 - request.write('<lastBuildDate>%s</lastBuildDate>\r\n' % latest_timestamp.as_HTTP_datetime_string())
1.95 -
1.96 - # Sort all_shown_events by start date, reversed.
1.97 + mimetype = "application/rss+xml"
1.98
1.99 - ordered_events = getOrderedEvents(all_shown_events)
1.100 - ordered_events.reverse()
1.101 -
1.102 - for event in ordered_events:
1.103 - event_page = event.getPage()
1.104 - event_details = event.getDetails()
1.105 -
1.106 - # Get a parser and formatter for the formatting of some attributes.
1.107 -
1.108 - fmt = request.html_formatter
1.109 -
1.110 - # Get the summary details.
1.111 -
1.112 - event_summary = event.getSummary(parent)
1.113 - link = event.getEventURL()
1.114 -
1.115 - request.write('<item>\r\n')
1.116 - request.write('<title>%s</title>\r\n' % wikiutil.escape(event_summary))
1.117 - request.write('<link>%s</link>\r\n' % link)
1.118 + # Catch-all...
1.119
1.120 - # Write a description according to the preferred source of
1.121 - # descriptions.
1.122 -
1.123 - if descriptions == "page":
1.124 - description = event_details.get("description", "")
1.125 - else:
1.126 - description = event_details["last-comment"]
1.127 -
1.128 - request.write('<description>%s</description>\r\n' %
1.129 - fmt.text(event_page.formatText(description, fmt)))
1.130 -
1.131 - for topic in event_details.get("topics") or event_details.get("categories") or []:
1.132 - request.write('<category>%s</category>\r\n' %
1.133 - fmt.text(event_page.formatText(topic, fmt)))
1.134 -
1.135 - request.write('<pubDate>%s</pubDate>\r\n' % event_details["created"].as_HTTP_datetime_string())
1.136 - request.write('<guid>%s#%s</guid>\r\n' % (link, event_details["sequence"]))
1.137 - request.write('</item>\r\n')
1.138 + else:
1.139 + mimetype = None
1.140
1.141 - request.write('</channel>\r\n')
1.142 - request.write('</rss>\r\n')
1.143 -
1.144 -def write_calendar_datetime(request, datetime):
1.145 -
1.146 - """
1.147 - Write to the given 'request' the 'datetime' using appropriate time zone
1.148 - information.
1.149 - """
1.150 -
1.151 - utc_datetime = datetime.to_utc()
1.152 - if utc_datetime:
1.153 - request.write(";VALUE=DATE-TIME:%04d%02d%02dT%02d%02d%02dZ\r\n" % utc_datetime.padded().as_tuple()[:-1])
1.154 - else:
1.155 - zone = datetime.time_zone()
1.156 - if zone:
1.157 - request.write(";TZID=/%s" % zone)
1.158 - request.write(";VALUE=DATE-TIME:%04d%02d%02dT%02d%02d%02d\r\n" % datetime.padded().as_tuple()[:-1])
1.159 + formatEventsForOutputType(all_shown_events, request, mimetype, parent, descriptions, latest_timestamp)
1.160
1.161 # Action function.
1.162