87 lines
3.3 KiB
Python
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()
|