82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
import codecs
|
|
import datetime
|
|
from docutils.core import publish_parts
|
|
from flask import abort, g, safe_join, url_for
|
|
import os
|
|
import os.path
|
|
|
|
from i2p2www import MEETINGS_DIR
|
|
|
|
|
|
########################
|
|
# Meeting helper methods
|
|
|
|
def get_meetings_feed_items(num=0):
|
|
meetings = get_meetings(num)
|
|
items = []
|
|
for meeting in meetings:
|
|
a = {}
|
|
a['title'] = meeting['parts']['title']
|
|
a['content'] = meeting['parts']['fragment']
|
|
a['url'] = url_for('meetings_show', lang=g.lang, id=meeting['id'])
|
|
a['updated'] = (meeting['date'] if meeting['date'] else datetime.datetime(0))
|
|
items.append(a)
|
|
return items
|
|
|
|
def get_meetings(num=0):
|
|
meetings_ids = get_meetings_ids(num)
|
|
meetings = []
|
|
for id in meetings_ids:
|
|
parts = render_meeting_rst(id)
|
|
if parts:
|
|
try:
|
|
date = datetime.datetime.strptime(parts['title'], 'I2P dev meeting, %B %d, %Y @ %H:%M %Z')
|
|
except ValueError:
|
|
try:
|
|
date = datetime.datetime.strptime(parts['title'], 'I2P dev meeting, %B %d, %Y')
|
|
except ValueError:
|
|
date = None
|
|
a = {}
|
|
a['id'] = id
|
|
a['date'] = date
|
|
a['parts'] = parts
|
|
meetings.append(a)
|
|
return meetings
|
|
|
|
def get_meetings_ids(num=0):
|
|
"""
|
|
Returns the latest #num valid meetings, or all meetings if num=0.
|
|
"""
|
|
# list of meetings
|
|
meetings=[]
|
|
# walk over all directories/files
|
|
for v in os.walk(MEETINGS_DIR):
|
|
# iterate over all files
|
|
for f in v[2]:
|
|
# ignore all non-.rst files
|
|
print("Meeting file found", f)
|
|
if not f.endswith('.rst'):
|
|
continue
|
|
try:
|
|
meetings.append(int(f[:-4]))
|
|
except ValueError:
|
|
continue
|
|
meetings.sort()
|
|
meetings.reverse()
|
|
if (num > 0):
|
|
return meetings[:num]
|
|
return meetings
|
|
|
|
def render_meeting_rst(id):
|
|
# check if that file actually exists
|
|
name = '%03d.rst' % id
|
|
path = safe_join(MEETINGS_DIR, name)
|
|
if not os.path.exists(path):
|
|
abort(404)
|
|
|
|
# read file
|
|
with codecs.open(path, encoding='utf-8') as fd:
|
|
content = fd.read()
|
|
|
|
return publish_parts(source=content, source_path=MEETINGS_DIR, writer_name="html")
|