site-aurore/aurore.py

87 lines
3.3 KiB
Python

from datetime import date
from flask import Flask, render_template
from markdown2 import markdown_path
from os import walk
from os.path import join
app = Flask(__name__)
md_path = 'markdown'
@app.route('/')
def home():
"""
Route principale du site.
Pour le dynamisme du site, le changement de page est fait en javascript du cote client. Il s'agit donc de la seule
route du site. Il faut cependant charger les evenements sur la page car il s'agit du seul element dynamique du site.
On vient donc chercher les fichiers Markdown correspondant aux evenements et on les fournits a 'render_template' qui
va generer la page finale.
:return: La page 'index.html' avec les events
"""
mds = load_markdown_files()
return render_template('index.html', mds=mds)
def del_links(html):
"""
Supprime les balises de liens (<a>) dans le code HTML.
La fonction parcours l'ensemble du code caractère par caractère. Il commence par rechercher le debut de la balise
ouvrante ('<a') puis la fin de celle-ci ('>'). S'il a trouve une balise ouvrante il cherche alors une balise
fermante ('</a>'). Tout le texte du texte HTML reste intact mis à part la balise ouvrante et la balise fermante
qui sont supprimees.
:param html: Code HTML où les balises doivent etre supprimees.
:return: Le code HTML initial mais sans balises de liens
"""
new_html = ""
i = 0
opened = False
while i < len(html) - 4: # La recherche de la balise fermante ne doit pas entrainer une erreur
if html[i:i + 3] == "<a ": # Début de la balise ouvrante d'un lien
for j in range(3, len(html) - i - 3):
if html[i + j] == ">": # Fin de la balise ouvrante
i += j + 1
break
opened = True
elif html[i:i + 4] == "</a>" and opened: # Balise fermante
i += 4
opened = False
else:
new_html += html[i]
i += 1
return new_html
def load_markdown_files():
"""
Charge les fichiers markdown correspondant aux evenements.
La fonction parcour l'ensemble des fichiers dans le dossier 'md_path'. Elle commence par verifier que l'extention
est correcte puis qu'il y a bien le bon nombre d'elements dans le nom du fichier (jour_mois_annee_titre.md). Elle
va alors recuperer la date, le titre, l'article et generer une description a partir de ce dernier.
:return: Liste de tuple contenant les informations necessaires des fichiers markdowns sous la forme :
(date, titre, description, article)
"""
mds = []
for r, d, f in walk(md_path):
for file in f:
if file[-3:] == '.md': # Il s'agit d'un fichier markdown
split = file.split('_')
if len(split) == 4: # Son nom a le bon format : jour_mois_annee_titre.md
day, month, year, title = split
title = title[:-3] # Retrait de l'extension
event_date = date(int(year), int(month), int(day))
article = markdown_path(join(md_path, file))
description = del_links(article)
mds.append((event_date, title, description, article))
return mds
if __name__ == '__main__':
app.run()