Files
i2p.www/i2p2www/meetings/helpers.py
2023-11-22 14:48:24 -05:00

84 lines
2.4 KiB
Python

from __future__ import absolute_import
from __future__ import print_function
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")