Installation de celcatsanitizer

Dépendances

celcatsanitizer est écrit en Python 3. Il dépend des bibliothèques suivantes :

celcatsanitizer requiert Python 3.4 au minimum, et marche avec les versions 3.5 et 3.6. Les versions antérieures de Python 3 n’ont pas étés testées, et les versions supérieures devraient fonctionner sans problèmes.

A priori, il est possible d’utiliser n’importe quel SGBD supporté par Django avec celcatsanitizer. Cependant, l’utilisation de PostgreSQL est fortement recommandée. Dans ce cas, vous aurez besoin d’installer le module psycopg2.

Pour l’instant, l’installation doit passer par git.

Notes sur Django

celcatsanitizer utilise des versions assez récentes de Django, notamment en ce qui concerne son ORM. Le passage de Django 1.10 à Django 1.11 s’est fait pour utiliser l’annotation ExtractWeek, le passage de Django 1.11 à Django 2.0 pour utiliser l’attribut distinct de l’aggrégat ArrayAgg.

celcatsanitizer passera à Django 2.1 lorsqu’il sortira pour utiliser l’annotation TruncWeek, pour l’instant implémenté avec une requête SQL brute. Cette fonctionnalité ne sera nécessaire que pour les utilisateurs de PostgreSQL.

Installation

Création de l’environnement virtuel

Cette étape est optionnelle, mais est tout de même fortement recommandée.

Placez-vous dans le répertoire souhaité, installez l’environnement virtuel, puis activez-le :

$ virtualenv -p python3 celcatsanitizer
$ cd celcatsanitizer
$ source bin/activate

Il est possible que votre version de pip soit ancienne. Si vous le souhaitez, mettez-le à jour :

$ pip install -U pip

Installation des dépendances

Vous pouvez demander à pip d’installer les dépendances à partir du fichier requirements.txt présent dans le dépôt :

$ pip install -r requirements.txt

Cette commande installera aussi psycopg2-binary et gunicorn.

Il est aussi possible d’installer les dépendances à la main :

$ pip install django beautifulsoup4 icalendar requests

Si vous utilisez PostgreSQL, vous devez installer le module psycopg2 :

$ pip install psycopg2-binary

Si vous êtes en production, il est recommandé d’utiliser gunicorn si vous n’utilisez pas le serveur Apache. Installez-le de la même manière :

$ pip install gunicorn

Création du projet Django

$ django-admin startproject celcatsanitizer
$ cd celcatsanitizer

Récupération des sources de celcatsanitizer

$ git clone https://git.pa1ch.fr/alban/celcatsanitizer.git edt

Pour la production, il est recommandé d’utiliser une version stable. Elles sont accessibles à travers les tags git.

Configuration de Django

Avant de pouvoir lancer celcatsanitizer, vous allez devoir modifier quelques fichiers.

settings.py

Dans le fichier celcatsanitizer/settings.py, vous devrez renseigner plusieurs informations.

Configuration des administrateurs

Vous pouvez retrouver la documentation de la variable ADMIN sur le site de Django.

Cette variable est obligatoire.

Configuration de la base de données

Vous pouvez retrouver la documentation relative à la configuration de la base de données sur le site de Django.

Cette étape est obligatoire.

Configuration du mode de Django

Si jamais vous utilisez Django en production, vous devez impérativement mettre la valeur de la variable DEBUG à False.

Ajout de celcatsanitizer à la liste des applications Django

Ajoutez la chaîne de caractère edt à la liste INSTALLED_APPS.

Cette étape est obligatoire.

Activation des flatpages

celcatsanitizer se sert des flatpages pour rendre les pages « contact » et « à propos ». Vous pouvez retrouver le guide d’installation sur le site de Django. Effectuez uniquement les deux premières étapes, celcatsanitizer enregistre déjà une route pour les pages statiques, et la commande de l’étape 4 sera effectuée plus loin.

Cette étape est obligatoire.

Sélection du parseur

celcatsanitizer dispose d’un système de parseurs modulaires depuis la version 0.14, et embarque par défaut deux parseurs :

  • edt.management.parsers.ups2017, pour le format utilisé par l’Université Paul Sabatier en 2017. C’est le parseur utilisé par défaut si aucun autre n’est spécifié. Ce parseur utilise BeautifulSoup4.
  • edt.management.parsers.ups2018, pour le format utilisé par l’Université Paul Sabatier en 2018. Ce parseur utilise LXML et exploite l’IO asynchrone de Python.

Pour spécifier le parseur à utiliser, il faut rajouter une variable CS_PARSER, contenant le parseur à utiliser sous forme de chaîne de caractères. Pour utiliser le parseur edt.management.parsers.ups2018, il faut donc rajouter cette ligne :

CS_PARSERS = "edt.management.parsers.ups2018"

Pour l’instant, le parseur est global. Il n’est pas encore possible d’en spécifier un par source d’emploi du temps.

Vous devez vérifier le format des emplois du temps à parser, cette étape est donc obligatoire.

Gestion des fichiers statiques

Si vous êtes en production, vous devez renseigner l’emplacement de vos fichiers statiques dans la variable STATIC_ROOT de la configuration de Django (vous pouvez retrouver la documentation correspondante sur le site de Django).

Cette étape est obligatoire en production, mais inutile en déboguage.

Ajout du processeur de contexte de celcatsanitizer

Rajoutez la chaîne de caractères edt.views.ctx_processor à la liste context_processors dans la variable TEMPLATES.

Cette étape est fortement recommandée.

Configuration de l’internationalisation

Vous pouvez retrouver la documentation de l’internationalisation sur le site de Django.

Ce paramètre est optionnel.

urls.py

Dans le fichier celcatsanitizer/urls.py, importez la fonction django.conf.urls.include si elle ne l’est pas déjà, et rajouter url(r'^', include("edt.urls")) à la fin de la liste urlspatterns.

Cette étape est obligatoire.

Derniers préparatifs

Génération de la base de données

Générez les migrations de Django et de celcatsanitizer, puis appliquez-les :

$ ./manage.py makemigrations edt
$ ./manage.py migrate

Collection des fichiers statiques

Si vous êtes en production, il faut regrouper les fichiers statiques. Pour ce faire, exécutez la commande suivante :

$ ./manage.py collectstatic

Cette étape est obligatoire en production, mais inutile en déboguage.

Création d’un super-utilisateur

Pour pouvoir accéder à l’interface d’administration, il est important de créer un super-utilisateur. Pour cela, exécutez la commande suivante :

$ ./manage.py createsuperuser

Répondez ensuite aux questions posées.

Cette étape est fortement recommandée.

Cron

Pour mettre à jour les emplois du temps de manière régulière, il faut rajouter la commande de mise à jour dans une tâche cron.

Lancement

En mode de déboguage

Exécutez tout simplement la commande suivante :

$ ./manage.py runserver

En production

Le serveur intégré à Django n’est pas adapté pour un usage en production. Il vaut mieux utiliser Apache avec mod_wsgi, ou avec un serveur gunicorn derrière nginx.

Ajout des pages statiques

Comme indiqué plus haut, celcatsanitizer fait appel aux flatpages de Django.

À l’aide de l’interface d’administration de Django (si votre instance se trouve à l’adresse example.com, vous pourrez y accéder à l’adresse example.com/admin), dans la section « pages statiques », rajoutez les pages /a-propos/ et /contact/.

Si vous êtes en production, changez le site de base (example.com) par le site sur lequel se trouvera votre instance de celcatsanitizer, trouvable dans la section « sites ».