Ajout d'un cache de requetes
This commit is contained in:
parent
73e56a9737
commit
16cca576c1
76
rooms_get.py
76
rooms_get.py
@ -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) :
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user