Commit 83cc1c7e authored by Frederic HAN's avatar Frederic HAN
Browse files

correction des horaires pour 19-20 et 20-21+previsions semestre 2

parent bdd5e3f5
......@@ -2,7 +2,7 @@
#coding: utf8
import re, requests, json, datetime, time
def get_ical(code,start='2021-08-23',end='2021-12-19',year=4):
def get_ical(code,start='2021-08-23',end='2022-07-17',year=4):
url = 'https://adeprod.app.univ-paris-diderot.fr:443/jsp/custom/modules/plannings/anonymous_cal.jsp'
params = {
'calType': 'ical',
......@@ -19,9 +19,14 @@ def modifdate(m,shift):
fonction auxiliaire qui corrige la chaine de deux lignes consecutives DTSTART DTEND
ADE introduit un decalage qui depend de l'heure ete/hiver.
Il y a en plus un probleme de 24h lorsque les heures voulues sont l'apres midi.
Le shift sur un etalon posé au 23/8 a 8h semble etre de -10. Il semble maintenant obsolete.
Il semble qu'il y ait 4 decalages possibles, un peu comme si la base etait etalonnée differemment
chaque semestre en plus de l'heure ete/hiver.
Le shift sur un etalon posé au 23/8/21 a 8h semble etre de -10. Il semble maintenant obsolete.
- En 2021-2022 le shift est de -10 en ete et l'heure frontiere du jour perdu est à 12h.
(le semestre2 2021-2022 n'a pas encore pu etre testé)
- En 2020-2021 le shift est de -11 en ete et l'heure frontiere du jour perdu est à 11h.
- En 2019-2020 le shift est de -12 en ete et l'heure frontiere du jour perdu est à 10h.
De plus les cours qui terminaient à 20h en 19-20 ne semble pas transmis par ADE...
* En hiver il faut encore retrancher 1 au shift.
m est la valeur trouvee par:
......@@ -31,28 +36,46 @@ def modifdate(m,shift):
fin=datetime.datetime.strptime(m.group(2),'%Y%m%dT%H%M%SZ')
orig = "ORIGSTART:%d%02d%02dT%02d%02d%02dZ\r\nORIGEND:%d%02d%02dT%02d%02d%02dZ\r\n"%(debut.year,debut.month,debut.day,debut.hour,debut.minute,debut.second,fin.year,fin.month,fin.day,fin.hour,fin.minute,fin.second)
if shift != -10:
print("[WARNING] shift %d != -10. Votre etalon etait-t-il vraiment en aout?"%s(shift))
# PB le shift change avec l'heure d'hiver/ete:
D1 = datetime.datetime(debut.year,10,31)
D2 = datetime.datetime(debut.year,3,31)
lastdimancheoct = D1 - datetime.timedelta(days=(D1.weekday()+1)%7)
lastdimanchemars = D2 - datetime.timedelta(days=(D2.weekday()+1)%7)
decalsemestre = 0
# shift a ajouter aux heures recues en ete
shiftete = -10 # vaut -10 au semestre 1 2021-2022
if shift != -10:
print("[WARNING] shift %d != -10. Votre etalon etait-t-il vraiment en aout?"%s(shift))
# frontiere ou le bug de jour apparait
heurefrontiere = 12 # vaut 12h au semestre 1 2021-2022.
if debut.month > 7:
# l'annee vaut pour aout-decembre. (Semestre 1)
decalsemestre = 0
if debut.year == 2020:
# annee 2020-2021
heurefrontiere = 11
shiftete = -11
if debut.year == 2019:
# annee 2019-2020
heurefrontiere = 10
shiftete = -12
if debut >= lastdimancheoct:
#print("hiver")
shift = -11
shift = shiftete -1
else:
#print("ete")
shift = -10
shift = shiftete
if debut.month<8:
# l'annee vaut pour janvier-juillet (Semestre2)
decalsemestre = 1
if debut.year == 2021:
# annee 2020-2021
heurefrontiere = 11
shiftete = -11
if debut.year == 2020:
#annee 2019-2020
heurefrontiere = 10
shiftete = -12
#Ces 4 reservations sont les jeudis de 10h45-12h45
#2021-04-01|21:45:00|2021-03-31|23:45:00|ALGORITHMIQUE|432C
#2021-02-11|22:45:00|2021-02-11|00:45:00|ALGORITHMIQUE|432C
......@@ -60,10 +83,10 @@ def modifdate(m,shift):
#2021-03-04|22:45:00|2021-03-04|00:45:00|ALGORITHMIQUE|432C
if debut<lastdimanchemars:
#print("hiver")
shift = - 12
shift = shiftete -1
else:
#print("ete")
shift = -11
shift = shiftete
# parfois il manque un jour a la date de fin, Exemple:
# ORIGSTART:20210915T201500Z
......@@ -86,17 +109,17 @@ def modifdate(m,shift):
#
#
# En fait il semble que si l'heure voulue etait apres:
# 12h au semestre1, et 11h au semestre2,
# 12h au semestre1 2021-2022, et 11h en 2020-2021,
# ADE a perdu un jour
# en voulant faire une certaine modif de decalage.
#
if debut.hour >= 12 -shift -decalsemestre or debut.hour <= 20 - shift -24:
if debut.hour >= heurefrontiere -shift or debut.hour <= 20 - shift -24:
# si l'heure voulue >= 12h et <= 20h (au semestre 1)
# (si l'heure voulue >= 11h au semestre 2)
# dans ce cas il faut augmenter d'un jour avant d'appliquer le shift
debut = debut + datetime.timedelta(hours=24)
if fin.hour >= 12 -shift -decalsemestre or fin.hour <= 20 - shift -24:
if fin.hour >= heurefrontiere -shift or fin.hour <= 20 - shift -24:
# si l'heure voulue >= 12h et <= 20h (au semestre 1)
# (si l'heure voulue >= 11h au semestre 2)
# dans ce cas il faut augmenter d'un jour
......@@ -401,31 +424,18 @@ def tests():
dest2.close()
def semestre2_2021(outdir='data', dryrun=False, verbose=False):
def annee2020_2021(outdir='data', dryrun=False, verbose=False):
"""
ajoute le second semestre du calendrier 2021 pour vérifications
charge annee 2020-21
"""
get_calendars('formations.json', dryrun=dryrun, verbose=verbose, start="2020-08-31", end="2021-07-14", year=15)
for code in calendar_list():
#on prend le nom de la derniere fiche
nomfiche = code.split(',')[-1]
fname = '%s/%s.ics'%(outdir,nomfiche)
if verbose:
print('[FETCH] %d -> %s'%(code, fname))
calendar = get_ical(code, start="2021-01-04", end="2021-05-30", year=15)
calendar = fix_timezone(calendar,nomfiche)
time.sleep(0.8)
if calendar is None:
print("PB calendrier %s vide"%code)
return
if dryrun:
print(calendar[:300])
else:
with open(fname,'w') as f:
f.write( calendar )
if verbose:
print('[DONE]')
def annee2019_2020(outdir='data', dryrun=False, verbose=False):
"""
charge annee 2019-20
"""
get_calendars('formations.json', dryrun=dryrun, verbose=verbose, start="2019-08-31", end="2020-07-14", year=6)
def calendar_list(fname = 'formations.json'):
......@@ -447,7 +457,8 @@ def calendar_list(fname = 'formations.json'):
return rep
def get_calendars(formations, outdir,
dryrun=False, verbose=False):
dryrun=False, verbose=False,
start='2021-08-23',end='2022-07-17',year=4):
for code in calendar_list(formations):
......@@ -456,7 +467,7 @@ def get_calendars(formations, outdir,
fname = '%s/%s.ics'%(outdir,nomfiche)
if verbose:
print('[FETCH] %s -> %s'%(code,fname))
calendar = get_ical(code)
calendar = get_ical(code,start,end,year)
calendar = fix_timezone(calendar,nomfiche)
# Ajout de sous calendriers par ECUE dans certaines formations
if nomfiche in filtreECUE:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment