Merge pull request #34 from cozo/working

adding ical plugin
This commit is contained in:
Justin Mayer
2013-06-05 09:16:55 -07:00
3 changed files with 81 additions and 0 deletions

28
ical/Readme.rst Normal file
View File

@@ -0,0 +1,28 @@
ical
--------
This plugin read the calendar defined in the page metadata : calendar :
with::
:calendar: /path/to/your/ics/file
Example of code that can be added in page template ::
{% if page.calendar %}
<dl>
{% for vevent in events[page.slug] %}
<dt>{{ vevent.summary }}</dt>
<dd>{{ vevent.description|replace('\n\n', '<br>') }}</dd>
<dd>{{ vevent.dtstart }}</dd>
<dd>{{ vevent.dtend }}</dd>
<dd class="footer"><a href="{{ vevent.url }}" target="_blank">See more</a></dd>
{% endfor %}
</dl>
{% endif %}
this plugins needs icalendar module installed::
pip install icalendar

1
ical/__init__.py Normal file
View File

@@ -0,0 +1 @@
from .ical import *

52
ical/ical.py Normal file
View File

@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
"""
ical plugin for Pelican
===========================
This plugin parse the calendars defined in pages metadata :calendar:
One calendar 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 dictionnary of calendar
# 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 slugify 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)