X-Git-Url: http://git.tremily.us/?p=pycalendar.git;a=blobdiff_plain;f=pycalendar%2Faggregator.py;fp=pycalendar%2Faggregator.py;h=7a78aabb6c357cf0467f422c82a87c30cd634f9f;hp=805a305aedb461d633ba284fdd06463f4a18de9c;hb=81ad44f701a889d346fe5e090f3d91871d907034;hpb=b5bb8b30d371978e877e81820c58cd4bda8bba6c diff --git a/pycalendar/aggregator.py b/pycalendar/aggregator.py index 805a305..7a78aab 100644 --- a/pycalendar/aggregator.py +++ b/pycalendar/aggregator.py @@ -14,7 +14,9 @@ # You should have received a copy of the GNU General Public License along with # pycalender. If not, see . -from . import text as _text + +from .component import calendar as _component_calendar +from .property import calendar as _property_calendar class Aggregator (list): @@ -55,28 +57,30 @@ class Aggregator (list): >>> a.write(stream=stream) >>> value = stream.getvalue() >>> value # doctest: +ELLIPSIS - 'BEGIN:VCALENDAR\r\nVERSION:2.0\r\n...END:VCALENDAR\r\n' - >>> print(value.replace('\r\n', '\n')) + 'BEGIN:VCALENDAR\r\nPRODID:...END:VCALENDAR\r\n' + >>> print(value.replace('\r\n', '\n')) # doctest: +REPORT_UDIFF BEGIN:VCALENDAR - VERSION:2.0 PRODID:-//pycalendar//NONSGML testing//EN + VERSION:2.0 BEGIN:VEVENT - UID:2013-06-30@geohash.invalid DTSTAMP:20130630T000000Z + UID:2013-06-30@geohash.invalid DTSTART;VALUE=DATE:20130630 - DTEND;VALUE=DATE:20130701 + GEO:42.226663;-71.286760 + LOCATION:Snow Hill\, Dover\, Massachusetts SUMMARY:XKCD geohashing\, Boston graticule URL:http://xkcd.com/426/ - LOCATION:Snow Hill\, Dover\, Massachusetts - GEO:42.226663;-71.28676 + DTEND;VALUE=DATE:20130701 END:VEVENT END:VCALENDAR """ def __init__(self, prodid, version='2.0', feeds=None, processors=None): super(Aggregator, self).__init__() - self.prodid = prodid - self.version = version + self.calendar = _component_calendar.Calendar() + self.calendar.add_property(_property_calendar.Version(value=version)) + self.calendar.add_property( + _property_calendar.ProductIdentifier(value=prodid)) if feeds: self.extend(feeds) if not processors: @@ -88,18 +92,11 @@ class Aggregator (list): feed.fetch() for processor in self.processors: processor(feed) + for name in feed.subcomponents: + if name not in self.calendar: + self.calendar[name] = [] + for component in feed.get(name, []): + self.calendar[name].append(component) def write(self, stream): - stream.write('BEGIN:VCALENDAR\r\n') - stream.write('VERSION:{}\r\n'.format(_text.escape(self.version))) - stream.write('PRODID:{}\r\n'.format(_text.escape(self.prodid))) - for feed in self: - for key in [ - 'VEVENT', - 'VFREEBUSY', - 'VJOURNAL', - 'VTODO', - ]: - for entry in feed.get(key, []): - entry.write(stream=stream) - stream.write('END:VCALENDAR\r\n') + self.calendar.write(stream=stream)