Contribuer au code de Sakia

Introduction

Cet article est un tutoriel d’initiation au code source de l’applicationSakia. Celui-ci vous permettra, à travers une succession d’étapes, d’accéder à la maîtrise des outils et méthodes utilisés quotidiennement par les développeurs de Sakia pour créer et modifier l’application.

À la fin de ce tutoriel, vous serez donc capable de modifier l’application. Et si le cœur vous en dit, vous pourrez même réaliser une modification et partager celle-ci avec le dépôt de code principal, afin que celle-ci soit officiellement intégrée et disponible aux utilisateurs !

À vos claviers !

###Sommaire

  • Niveau I : Récupérer le code source
  • Niveau II : Installation logiciel
  • Niveau III : Lancer les tests
  • Niveau IV : Navigation dans le code
  • Niveau V : Editer une vue
  • Niveau VI : Modifications simples du code
  • Niveau VII : Modifications avancées du code
  • Niveau VIII : Finalisation du code

##Niveau I : Récupérer le code source

Ce premier niveau consiste à créer votre propre version des sources du logiciel et de récupérer cette copie sur votre ordinateur. Vous y produirez :

  • Votre propre compte GitHub
  • Votre propre version du logiciel, votre fork
  • Une copie locale des fichiers de code source provenant de votre fork

###Créez un compte GitHub

Si vous disposez déjà d’un compte GitHub, vous pouvez passer cette étape.

Rendez-vous sur https://github.com (site en anglais). Renseigner les 3 champs proposés :

  • Nom d’utilisateur
  • E-mail
  • Mot de passe

Vous recevrez probablement un e-mail de confirmation qu'il vous faudra valider. Une fois cette étape passée, vous devriez disposer d'un compte GitHub .

###Forkez le dépôt principal

Si vous avez déjà forké le dépôt principal duniter/sakia, vous pouhttps://forum.duniter.org/uploads/default/original/1X/3b9228c664520496d6a7e86e3f9c4c438f111914.pngvez passer cette étape.

Rendez-vous à l’adresse duniter/sakia. Cliquez sur le bouton « Fork » en dans le coin supérieur droit de la page :

Vous aurez alors votre propre version du code de Sakia, dans votre dépôt GitHub :

Installer Git

L'installation de Git dépend de votre système d'exploitation. Suivez simplement les indications présentes sur : https://git-scm.com/

Cloner votre fork

A ce stade, vous êtes en mesure de récupérer votre version du code source (votre fork), afin de pouvoir travailler dessus.

Ouvrez Git en ligne de commande

Pour récupérer le code source, lancez Git en mode console.

  • Sous Linux et MacOS, ouvrez tout simplement le Terminal
  • Sous Windows lancez le programme Git Bash :

Clonez votre fork

Retournez sur la page web GitHub, puis trouvez le bouton « Clone or download » :

Cliquez dessus, vous pourrez alors copier l'URL de clonage en cliquant sur l'icône de valise :

Vous n'avez plus qu'à retourner dans votre console Git et saisir :

git clone [coller l'URL copiée] --recursive

ce qui donne dans mon cas :

git clone https://github.com/insoleet/sakia.git --recursive
Clonage dans 'sakia'...
remote: Counting objects: 18877, done.
remote: Compressing objects: 100% (148/148), done.
remote: Total 18877 (delta 67), reused 0 (delta 0), pack-reused 18714
Réception d'objets: 100% (18877/18877), 9.82 MiB | 142.00 KiB/s, fait.
Résolution des deltas: 100% (11733/11733), fait.
Vérification de la connectivité... fait.

Si vous êtes arrivés à un comportement similaire, bravo, vous posséder désormais le code source Sakia!

Niveau II : Installation logiciel

Ce second niveau vise à obtenir les outils de base pour exécuter le code source, et vérifier son bon fonctionnement. Vous y réaliserez :

  • l'installation de pyenv
  • l'installation de pyqt5
  • l'installation des outils Qt5

Pour se faire, suivez le guide d’installation de l’environnement développeur sur le wiki Sakia sur Github.

Niveau III : Lancer les tests

Dans le dossier sakia, utilisez la commande suivante pour rentrer dans l’environnement de travail :
pyenv local sakia-env

Vous pouvez ensuite lancer les tests avec la commande :
python setup.py test

Des fenêtres vont s’ouvrr et agir toutes seules. Ce sont les tests fonctionnels. Ne vous inquiétez pas, votre PC n’est pas en train de devenir fou :wink:

La conclusion des tests joués doit être la suivante :

----------------------------------------------------------------------
Ran 143 tests in 50.867s

OK

Niveau IV : Navigation dans le code

Pour naviguer dans le code, j’utilise le logiciel Pycharm. Il existe une version communautaire sous licence libre. Bien entendu, vous pouvez utiliser n’importe quel logiciel pour travailler sur Sakia, ça reste du simple python :slight_smile:

L’arborescence des sources est constitué comme sous l’image suivante :

En interne, les classes sont constituées suivant les blocs fonctionnels suivants :

Pour plus d’informations, je vous invite à regarder la présentation que j’ai réalisé sur l’architecture de Sakia aux RML6 et RML7.

Niveau V : Éditer une vue

Pour éditer une UI, il est nécessaire d’utiliser le logiciel Qt Designer. Sous Linux, vous pouvez le trouver dans le dépot respectif de votre distribution si vous ne l’avez pas déja suite à l’installation des dépendances de Sakia. Sous Windows, le logiciel est compris dans l’installation de Qt.

Nous allons par exemple éditer le fichier de vue des communautés. Dans le dossier res/ui, réaliser un clic droit sur account_cfg.ui puis “Ouvrir avec Qt Designer”. La procédure dépend de votre système d’exploitation.

L’interface est de la forme suivante :

A gauche se trouvent les différents Widget que vous pouvez insérer par cliquer-glisser. A droite se trouve l’arborescence des widgets ainsi que leurs propriétés. Il est possible de préparer les signaux/slots directement dans cet éditeur mais nous ne l’évitons pour pouvoir réaliser une architecture sous forme d’injection de dépendances.

Essayez par exemple d’ajouter un nouveau bouton pour générer la révocation d’identité :

Sauvegardez votre fichier et utilisez la commande suivante pour mettre à jour les fichiers python générés à partir des fichiers ui :
python gen_resources.py

Niveau VI : Modification simple du code

Dans le fichier src/gui/process_configure_account.py, vous pouvez maintenant ajouter une méthode "generate_revokation` afin de sauver le document de révocation quelquepart.

Pour ce faire, il faut réaliser 3 étapes :

  • Créer cette méthode supplémentaire dans la classe ProcessConfigureAccount qui log un message lorsque l’on clique sur ce bouton :
def generate_revokation(self):
    logging.debug("Bouton cliqué avec succès !")

  • Ajouter une connexion entre le clic sur le bouton et cette nouvelle méthode via une connexion de slot :
self.button_generate.connect(self.generate_revokation())

Niveau VII : Modification avancées du code

Notre bouton est maintenant cliquable mais ne fait rien. Nous allons sauvegarder le document de révocation. Je vais lister ici les principales choses à faire, mais c’est à vous d’essayer et de découvrir le fonctionnement de tout ce code :wink:

  • Dans la méthode generate_revokation(self), ouvrir un QFileDialog. Choisir un emplacement de sauvegarde.
  • Utiliser la librairie duniter-python-api pour créer un document de revocation
  • Sauvegarder ce document au format raw. Vous pouvez décider d’utiliser une librairie de crypto telle que nacl ou pylibscrypt pour chiffrer le fichier.

Niveau VIII : Finalisation des modifications du code

Il faudrait à présent permettre à l’utilisateur de publier sa demande de révocation d’identité. Si vous souhaitez aller jusque là, je vous laisse libre de choisir une implémentation. Il faut savoir cependant que :

  • Le bouton de demande de révocation ne doit pas être accessible depuis l’interface principale. C’est une action qui doit être réalisée consciemment et ce n’est pas quelque chose qui doit être trop user-friendly. On risquerait alors d’avoir des utilisateurs qui révoquent leur identité sans le vouloir :wink:
  • Cette demande doit être vérifiée par une confirmation
  • Il faut tester le code écrit, soit fonctionnellement, soit unitairement. Vous pouvez prendre exemple sur les tests existants pour ce faire !

N’hésitez pas à poser des questions si nécessaires et amusez vous bien en modifiant Sakia surtout :wink:

5 Likes

14 messages ont été envoyés vers un nouveau sujet : Aide sur la mise en place de Sakia