RETOUR

Organisation du projet

Situation

Dans le cadre de mon BTS SIO option SLAM, j’ai réalisé seul un projet nommé ExportGitlab, une application web permettant d’exporter des issues GitLab au format PDF.

Ce projet a été développé à une demande en interne d'un PO (Product Owner), dans un contexte réel. Il vise à simplifier la récupération, le filtrage et l’export de tickets GitLab dans un format lisible en PDF

L’objectif principal était de concevoir un outil simple, intuitif, sécurisé, utilisable en interne, tout en respectant les contraintes d’authentification imposées par l’infrastructure universitaire.

Étude des solutions

Le cahier des charges imposait plusieurs fonctionnalités clés :

Le choix de Django s’est imposé pour sa robustesse et sa compatibilité avec des outils comme WKHTMLTOPDF. Le front-end utilise Vue.js en CDN pour une interface légère et réactive.

Technologies utilisées :

Contraintes techniques :


Partie back-end avec Django

Modèles (models.py)

Un modèle Page simple avec un champ token_gitlab (nullable), et une relation ManyToMany vers un ou plusieurs projets. Le modèle Project contient les champs gitlab_id, name, url.

Modèles Django

Routes et vues (views.py)

Plusieurs routes sont disponibles. Les principales sont :

Routes et vues Django

Connexion GitLab (gitlab.py)

Ce fichier initialise la connexion GitLab grâce à la fonction gl_connexion. Celle-ci définit l’URL (gitlab.com) et utilise le token privé de l’utilisateur.

Ensuite, gl.auth() valide l’authentification et retourne un objet gl contenant les outils nécessaires pour faire des requêtes GitLab.

Connexion GitLab

Décorateurs (decorators.py)

Un décorateur valid_auth est défini pour vérifier que l’utilisateur est bien connecté à GitLab. En cas d’échec, une exception GitlabAuthenticationError est levée et empêche l’exécution de la vue.

Décorateurs

Vue principale : list_all_projects (homepage)

Cette vue est protégée par les décorateurs @login_required et @valid_auth. Elle gère deux méthodes :

Le résultat est paginé avec l’outil de pagination de Django, puis renvoyé via render() à la page HTML avec la variable page_obj.

Vue principale Django

Vue download_report_issues

Cette vue gère le téléchargement des issues sélectionnées. Elle récupère le projet (ou renvoie une erreur 404 si introuvable), puis les issues cochées via le champ checkbox_issues.

Vue download_report_issues

On commence par vérifier si une issue a été cochée. Si oui, pour chaque issue sélectionnée, on appelle la fonction make_data pour récupérer le titre et la description au format HTML. Ces informations sont ajoutées à issues_data qui contient l'ID, le titre, la description et le nom du projet. Ensuite, on génère le rendu HTML via un template, qu'on convertit en PDF avec WKHTMLTOPDF, en gérant les exceptions. La réponse sera un PDF nommé selon le projet, avec les issues numérotées.

Vue download_report_issues 2

Tests unitaires

Des tests ont été écrits pour valider les fonctions critiques interagissant avec l’API GitLab, en simulant les appels via unittest.mock (patch et Mock) pour éviter toute dépendance réelle au réseau ou à un token actif.

Tests unitaires

Partie front-end (templates Django)

Arborescence des templates

Toutes les pages héritent de base.html, qui contient :

exemple de base.html

L'Arborescence des templates ressemble à ça :

Arborescence des templates

Exemple projects_list.html

Un formulaire y est présent, protégé par un {% csrf_token %}. Il permet de saisir l’ID d’un projet GitLab à ajouter.

Exemple projects_list.html

Template html_to_pdf_output.html

Ce fichier sert à générer le HTML à convertir en PDF. Il affiche chaque issue avec ses champs name, title, id, description, à l’aide d’une boucle.

Template html_to_pdf_output.html

Conclusion

Ce projet m’a permis de :

J’ai particulièrement renforcé mes compétences sur la gestion de projets réels, en assurant la cohérence entre authentification, logique métier, intégration d’API tierces et restitution soignée des données pour les utilisateurs finaux.


Annexes :

Site web : export.orabis.fr

Github : github.com/Orabis/export-gitlab


Capture d'écran de la page de projet

Page d'affichages des projets

Capture d'écran de la page télécharger les issues

Page de téléchargement des issues

Capture d'écran du rendu pdf

Rendu pdf des issues