1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - calendar (EventAggregator) 4 5 @copyright: 2012, 2013, 2014 by Paul Boddie <paul@boddie.org.uk> 6 @license: GNU GPL (v2 or later), see COPYING.txt for details. 7 """ 8 9 from MoinSupport import parseAttributes, RawParser, getPageURL 10 from EventAggregatorSupport.Formatting import formatEventsForOutputType, \ 11 formatEvent, formatMethod 12 from EventAggregatorSupport.Types import parseEventsInCalendar 13 14 Dependencies = ["pages"] 15 16 # Parser support. 17 18 class Parser: 19 20 "Interpret and show calendar information in different ways." 21 22 Dependencies = Dependencies 23 extensions = [".ics"] 24 25 # Input content types understood by this parser. 26 27 input_mimetypes = ["text/calendar"] 28 29 # Output content types preferred by this parser. 30 31 output_mimetypes = ["text/html", "text/calendar"] 32 33 def __init__(self, raw, request, **kw): 34 35 """ 36 Initialise the parser with the given 'raw' data, 'request' and any 37 keyword arguments that may have been supplied. 38 """ 39 40 self.raw = raw 41 self.request = request 42 attrs = parseAttributes(kw.get("format_args", ""), False) 43 44 self.fragment = attrs.get("fragment") 45 46 def format(self, fmt, write=None): 47 48 """ 49 Format a calendar using the given formatter 'fmt'. If the 'write' 50 parameter is specified, use it to write output; otherwise, write output 51 using the request. 52 """ 53 54 resource = parseEventsInCalendar(self.raw, getPageURL(self.request.page)) 55 56 for event in resource.getEvents(): 57 formatEvent(event, self.request, fmt, write=write, parser_cls=RawParser) 58 59 formatMethod(resource, self.request, fmt, write) 60 61 # Extra API methods. 62 63 def formatForOutputType(self, mimetype, write=None): 64 65 """ 66 Format a calendar for the given 'mimetype'. If the 'write' parameter is 67 specified, use it to write output; otherwise, write output using the 68 request. 69 """ 70 71 # Write raw calendar information unchanged. 72 73 if mimetype == "text/calendar": 74 (write or request.write)(self.raw) 75 else: 76 resource = parseEventsInCalendar(self.raw, getPageURL(self.request.page)) 77 events = resource.getEvents() 78 formatEventsForOutputType(events, self.request, mimetype, write=write, resource=resource) 79 80 # Class methods. 81 82 def getOutputTypes(self): 83 return self.output_mimetypes 84 85 getOutputTypes = classmethod(getOutputTypes) 86 87 # vim: tabstop=4 expandtab shiftwidth=4