Ajout d'un cache de requetes

This commit is contained in:
theo@manjaro 2022-05-14 16:26:12 +02:00
parent 73e56a9737
commit 16cca576c1

View File

@ -22,14 +22,62 @@ Created on Thu Feb 24 08:51:58 2022
import requests
import icalendar
import pytz
import os
import shutil
import time
# Fichiers locaux :
from objects import Room
from objects import Dept
# Constantes :
CACHE_DIR = "cache"
CACHE_TTL = 3 # Intervalle de temps entre les réinitialisations du cache, en minutes
# Globales
last_cache_init = -999
# Fonctions :
def sched_get(date, link, enddate = None) :
def reinit_cache() :
global last_cache_init
"""
Vide le dossier CACHE_DIR et l'initialise.
Modifie la variable globale last_cache_init
Parameters
----------
Aucun
Returns
-------
Rien
"""
if os.path.isdir(CACHE_DIR):
shutil.rmtree(CACHE_DIR)
os.mkdir(CACHE_DIR)
last_cache_init = time.time()
def trim(link) :
"""
Retourne le texte en minuscule, sans les caractères spéciaux.
( Utilisé pour le cache des requêtes )
Parameters
----------
link: String
Le lien à simplifier
Returns
-------
La chaine de caractères correspondante
"""
result = ""
for i in link.lower():
if i not in "/:;\\'\" *?":
result+=i
return result
def sched_get(date, link, enddate = None, nocache = False) :
"""
Récupère l'emploi du temps de toutes les salles (pour le moment, juste
de l'UFR) sur ADE depuis le site de l'Unistra.
@ -50,6 +98,8 @@ def sched_get(date, link, enddate = None) :
enddate : datetime.datetime()
Date de fin du calendrier à télécharger (par défaut, il s'agit de
la date de début).
nocache : booléen
Si mit à True, ne modifie pas, ni ne lit, le dossier CACHE_DIR
Returns
-------
@ -81,11 +131,27 @@ def sched_get(date, link, enddate = None) :
finallink = finallink.replace("$MONTH2$", month1)
finallink = finallink.replace("$YEAR2$", year1)
if nocache:
return requests.get(finallink).content
else:
# Vérifie la TTL
elapsed = time.time()-last_cache_init
print(elapsed)
if elapsed>CACHE_TTL*60:
reinit_cache()
r = requests.get(finallink)
return r.content
# Vérifie que le lien est dans le cache
cachepath = os.path.join(CACHE_DIR,trim(finallink))
if os.path.isfile(cachepath):
result = ""
with open(cachepath,'rb') as f:
result = f.read()
return result
else:
result = requests.get(finallink).content
with open(cachepath,'wb') as f:
f.write(result)
return result
def get_depts(filename) :
"""