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.
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.
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.
Plusieurs routes sont disponibles. Les principales sont :
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.
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.
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.
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.
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.
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.
Toutes les pages héritent de base.html, qui contient :
L'Arborescence des templates ressemble à ça :
Un formulaire y est présent, protégé par un {% csrf_token %}. Il permet de saisir l’ID d’un projet GitLab à ajouter.
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.
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.
Site web : export.orabis.fr
Github : github.com/Orabis/export-gitlab
Page d'affichages des projets
Page de téléchargement des issues
Rendu pdf des issues