1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- coding: utf-8 -*-
- """
- ical plugin for Pelican
- =======================
- This plugin looks for and parses an .ics file if it is defined in a given
- page's :calendar: metadata. One calendar can be defined per page.
- """
- from icalendar import Calendar, Event
- from pelican import signals , utils
- import pytz
- import datetime
- import os.path
- def init_cal(generator):
- # initialisation of the calendar dictionary
- # you can add one calendar per page
- calDict = {}
- generator.context['events'] = calDict
- def add_ical(generator, metadata):
- # check if a calendar is here
- if 'calendar' in metadata.keys():
- summ = []
- path = metadata['calendar']
- if not os.path.isabs(path):
- path = os.path.abspath(metadata['calendar'])
- cal = Calendar.from_ical(open(path,'rb').read())
- for element in cal.walk():
- eventdict = {}
- if element.name == "VEVENT":
- if element.get('summary') != None:
- eventdict['summary'] = element.get('summary')
- if element.get('description') != None:
- eventdict['description'] = element.get('description')
- if element.get('url') != None:
- eventdict['url'] = element.get('url')
- if element.get('dtstart') != None:
- eventdict['dtstart'] = element.get('dtstart').dt
- if element.get('dtend') != None:
- eventdict['dtend'] = element.get('dtend').dt
- summ.append(eventdict)
- # the id of the calendar is the slugified name of the page
- calId = utils.slugify(metadata['title'])
- generator.context['events'][calId] = summ
- def register():
- signals.pages_generator_init.connect(init_cal)
- signals.pages_generate_context.connect(add_ical)
|