Age | Commit message (Collapse) | Author |
|
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Il peut être intéressant de lister les cours par module (UE). Une
table est donc rajoutée pour stocker cette information et permettre
d’effectuer des recherches et des tris.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Les cours dans celcat ont un champ id. Ce changement permet de le
stocker dans la base de données (sous la forme d’un entier) et de
l’afficher dans l’interface d’administration.
Pour l’instant, on ne sait pas si cette valeur est unique ou non. Il
n’y a donc pas de contraintes sur ce champ pour le moment.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Pour pouvoir analyser plus facilement les attributs d’un cours, un
nouvel outil est rajouté pour lister tous les attributs d’un ou
plusieurs cours. Il fait appel au parseur et permet de sélectionner
une source, et de limiter le nombre de cours affichés.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Pour les besoins de l’ajout de la notion de module, un nouvel outil
permettant de lister les attributs d’un cours sera rajouté. À
l’instar de timetables, il fera aussi appel au parseur. Pour éviter
de dupliquer du code, la partie accès au parseur est déplacé dans une
autre classe.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
|
|
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
|
|
Le service Calendar du géant du numérique Google ne supporte pas bien
les fichiers ICS. Les mises à jour sont plus ou moins quotidiennes,
et il est impossible d’en changer la fréquence ou de les forcer. Or,
celcatsanitizer rafraîchir ces informations juste après que Google ait
mis à jour ses ICS. Cela signifie qu’il peut y avoir un délai de un
jour entre le changement d’une information sur celcatsanitizer et sa
prise en compte par Google Calendar, sans aucun recours possible.
Les utilisateurs ne sont pas forcément au courant de ce problème,
alors un texte a été rajouté pour les en informer.
Le lecteur attentif pourra se demander si il n’y a pas de conflit
d’intérêt entre l’écosystème Android, dans lequel l’application de
base (Agenda) ne peut se synchroniser qu’à Google Calendar à moins
d’installer une application tierce (telles que DAVDroid ou ICSDroid,
malheureusement payantes sur le Play Store mais gratuites sur
F-Droid).
Il pourra aussi se questionner sur la raison du mauvais support des
ICS par ce service -- serait-ce une technique pour inciter les
utilisateurs à se servir de Google Calendar en priorité, au détriment
des formats standards et des autres écosystèmes (par exemple, celui
d’Apple), et ainsi attirer plus d’utilisateurs ?
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Il est possible que la source renvoie des pages vides ou incorrectes,
il est donc nécessaire de tester le comportement du parseur dans ces
cas-là.
Ajout d’un modèle de page vide dans les données de test.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Dans certaines conditions, un nouveau cours doit être créé dans la
base de données, mais parfois non. Pour vérifier qu’un seul cours a
bien été rajouté (ou non, en fonction des cas), on teste aussi le
nombre de cours présent dans la base de données.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Le parseur est une des parties les plus importantes de
celcatsanitizer, mais ni le parseur 2017, ni le parseur 2018 n’ont eu
de test unitaires à proprement parler. Jusqu’ici, pour tester ce
composant, on ajoutait une source dans la base, on la récupérait, et
on regardait si tout correspondait plus ou moins. Cette technique a
plusieurs inconvénients : c’était une tâche rébarbative et pas
systématiquement effectuée, ce qui a posé quelques problèmes par le
passé, certains cas pouvaient ne pas se trouver dans la source au
moment de la récupération, et ce n’était pas reproductible proprement.
Rajouter des tests permettra donc de tester efficacement le parseur,
avec tous les cas de figure, rapidement et en utilisant seulement des
ressources locales.
Pour éviter d’utiliser le réseau, le module requests est mocké
lorsqu’on teste des fonctions qui l’utilisent.
L’initialisation du parseur et ses fonctions __get_event(),
get_events(), get_source() et get_update_date() (ainsi que la fonction
find_events_list() de manière indirecte) sont testées.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
On dit « choisissez », pas « choississez ».
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Il existe plusieurs logiciels permettant d’utiliser le format ICS,
mais les utilisateurs ne les connaissent pas forcément. Le but est de
les informer sur les solutions existantes.
Google Calendar est volontairement exclu de cette liste.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Il arrive que les pages retournées par la source sont incomplètes et
ne contiennent pas d’événement, et parfois des mois entiers sont
vides.
On tente donc de récupérer une page trois fois au maximum, et, si cela
échoue toujours, on abandonne en renvoyant une exception.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Ce commit change le code HTTP renvoyé si le formulaire de QSJPS est
invalide. Le code renvoyé était le code 200, signifiant que la requête
s’est bien déroulée. Avec ce commit, on renvoye un code 400, qui
indique à l’utilisateur que sa requête est invalide.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Lorsque le formulaire de QSJPS est incorrect, il manque un espace au
message affiché. Ce commit corrige cela.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Pour l’instant, on ne souhaite pas enregistrer les événement globaux.
On vérifie donc si l’événement est global, et, si c’est le cas, on ne
traite pas l’événement. Or, on insérait un cours dans la base de
données avant de faire ce test. Un cours avec aucun attribut était
donc laissé dans la base de données.
Ce commit déplace donc la création du cours après avoir vérifié si un
événement est global.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
suivante/précédente"
|
|
|
|
La plupart des cours contiennent un élément correspondant à l’heure de
début et de fin du cours. Lorsqu’un cours ne possède pas de nom, il
se peut que cet élément soit utilisé comme type, ce qui n’a pas de
sens. On va donc détecter la présence de cet élément à la première
place à l’aide d’une regex, et, si jamais il est présent, on n’utilise
pas le premier élément de la liste.
À l’origine, cet élément ne devait pas être utilisé pour cette raison,
mais ce comportement a été changé avec le commit ab6ca3c ("parsers:
correction de l’index du premier élément à analyser"), après la
détection de cours n’ayant pas cet élément.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
set() ne conserve pas nécessairement l’ordre des données, ce qui a
plusieurs conséquences. Premièrement, un cours avec plusieurs noms
séparés par un point-virgule peut changer de nom dans celcatsanitizer
d’une mise à jour à une autre. Deuxièmement, cette fonctionnalité
devient intestable de manière certaine.
Pour remédier à cela, on utilise la structure OrderedDict à la place.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Commencer au premier élément fait planter l’étape de déduction des
éléments des cours si jamais un cours n’a ni nom, ni type.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
La fonction de recherche QSJPS demande à ce que l’heure de début soit
strictement supérieure à l’heure de fin. Le formulaire vérifie donc
que ce critère soit respecté lors de la validation, et devrait
afficher une erreur si il ne l’est pas.
Or, le message d’erreur n’était pas rajouté correctement et fait
planter la validation.
De plus, lorsqu’il est 23h, les valeurs par défaut ne respectent pas
cette condition (on rajoute une heure, il est donc minuit passé). La
valeur par défaut du champ de fin est donc "23:59" si il est 23
heures. Il est important de noter que cette valeur ne valide toujours
pas le critère à 23h59, il serait bon de trouver une solution plus
pérenne à l’avenir, même si je doute que beaucoup de personnes ne
cherche une salle libre à ces heures…
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Rajout des nouveautés de la (future) version 0.14, met à jour la
feuille de route pour la version 0.15, rajout d’informations par
rapport aux parseurs lors de l’installation, rajout de LXML dans la
liste des modules nécessaires, rajout d’un paragraphe sur les versions
de Python 3 testées.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Certains groupes ont la syntaxe suivante :
L1 4L s1 CM4L
L1 4L s1 TD4L1
L1 4L s1 TP4L12
etc.
Le « 4 » entre le CM/TD/TP et le « numéro » fait échouer la regex. Ce
commit rajoute le support de cette syntaxe, et ajoute les cas de test adéquats.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Certains cours ont des noms trop long pour entrer dans la limite de
255 caractères.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Les champs mention, semestre et sous-groupe d’un groupe n’étaient pas
éditables depuis l’interface d’administration, car ils sont censés
êtres générés automatiquement.
Cela permet de pouvoir éditer les attributs d’un groupe en attendant
de pouvoir corriger la regex des groupes.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Correction d’un bogue qui faisait planter le parseur si on demandait
une mise à jour complète alors que la source ne contenait pas de
semaines. Désormais, si une source ne contient pas de semaines, la
date de mise à jour de la source est modifiée, et aucun cours n’est
supprimé ou rajouté.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Les semaines étaient parsées avec le format de base de Python au lieu
du format ISO-601. Selon le format de Python, le 1er Janvier 2019
fait partie de la 53ème semaine de l’an 2018, alors que selon ISO, il
fait partie de la 1ère semaine de 2019. Étant donné que d’autres
parties de celcatsanitizer gèrent les dates selon ISO, cela posait des
problèmes de cohérence.
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|
|
Signed-off-by: Alban Gruin <alban@pa1ch.fr>
|