소스 검색

adding ical plugin

julien ortet 11 년 전
부모
커밋
71db23cd97
3개의 변경된 파일81개의 추가작업 그리고 0개의 파일을 삭제
  1. 28 0
      ical/Readme.rst
  2. 1 0
      ical/__init__.py
  3. 52 0
      ical/ical.py

+ 28 - 0
ical/Readme.rst

@@ -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 - 0
ical/__init__.py

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

+ 52 - 0
ical/ical.py

@@ -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)