« MasterBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 22 : Ligne 22 :
http://localhost:5000/api/v1/bots/run?name=SummarizingBot
http://localhost:5000/api/v1/bots/run?name=SummarizingBot
</nowiki>
</nowiki>
Ceci va appeller la fonction run_bot(), qui va parser et formatter les paramètres de la requête (dans l'exemple, le nom), récupérer le code du bot à l'aide d'une function auxiliaire, et puis executer le code correspondant. Dans certains cas, il faut appeler une certaine fonction et lui donner quelques paramètres. Un message de succès s'affiche lors de la fin d'execution du bot, ainsi que tout les messages print du bot (changement du stdout). Si le bot est introuvable, un message d'erreur s'affiche. L'affichage est formaté à l'aide d'un simple template html.   
Ceci va appeler la fonction run_bot_request(), qui va parser et formatter les paramètres de la requête (dans l'exemple, le nom), et appeler la méthode auxiliaire run_bot(). Cette dernière va récupérer le code du bot à l'aide de la fonction retrieve_bot() puis executer le code correspondant. Dans certains cas, il faut appeler une certaine fonction et lui donner des paramètres. Un message de succès s'affiche lors de la fin d'execution du bot, ainsi que tout les messages print du bot (changement du stdout vers un fichier out.txt). Si le bot est introuvable, la fonction run_bot() retourne -1 et la fonction plus générale retourne un message d'erreur. L'affichage est formaté à l'aide d'un simple template html.   


==== Récupérer le code d'un bot ====
==== Récupérer le code d'un bot ====
Ligne 39 : Ligne 39 :
http://localhost:5000/api/v1/bots/all
http://localhost:5000/api/v1/bots/all
</nowiki>
</nowiki>
== Séquence de lancement des bots ==
Pour pouvoir lancer une séquence de bots, il faut pouvoir uploader un fichier texte contenant un nom de bot par ligne. La fonction upload_sequence() se charge de vérifier la validité du fichier (extension valide .txt et fichier existant), de le renommer en "sequence.txt", et de le sauvegarder. Le formulaire d'upload "upload_form.html" envoie donc une requête POST à l'adresse
http://localhost:5000/api/v1/config/sequence
lors de la soumission d'un fichier.
Ensuite, il faut pouvoir lire et parser les lignes de ce fichier, et pour chaque ligne, lancer le bot correspondant avec comme paramètre toutes les pages a traduire périodiquement (i.e. biographies). Lors de la réception de la requête GET
http://localhost:5000/api/v1/bots/sequence
la fonction run_sequence() se charge de trouver le fichier, l'ouvrir, et lancer chaque bot dans l'ordre précisé à l'aide de la fonction run_bot(). Lors du lancement de la séquence, un registre documente toutes les actions effectuées (ouverture du fichier séquence, lancement d'un bot, son succès ou son échec...)


==Limitations==
==Limitations==
Ligne 46 : Ligne 56 :
Il faudrait donc essayer d'harmoniser la structure des bots de façon à ce qu'ils prennent un nombre non spécifié d'arguments (en utilisant *args), et qu'ils soient tous structurés de la même manière.
Il faudrait donc essayer d'harmoniser la structure des bots de façon à ce qu'ils prennent un nombre non spécifié d'arguments (en utilisant *args), et qu'ils soient tous structurés de la même manière.


== Séquence de lancement des bots ==
 





Version du 28 avril 2019 à 07:36

Langue Français English

Description

Le MasterBot se charge de gérer et d'orchestrer les bots de wikipast. D'une part, il permet de lancer les bots de manière individuelle, en entrant des paramètres depuis un tableau de bord. D'autre part, il permet personaliser des séquences de lancement de bots, en spécifiant les paramètres (i.e. la fréquence le lancement, l'ordre, etc) de chaque bot.

Implémentation et fonctionnalités

L'idée est d'avoir le code de chaque bot sur une page (ou section d'une page) spécifique. Cela permet de lancer les bots à partir du code disponible sur la page de chacun (ou même depuis Github). Une simple API créée avec flask se charge de gérer les requêtes reçues. Tous les bots et leurs informations pertinentes (nom, adresse du code, ...) sont stockés dans un dictionnaire. L'API est dotée d'une interface web graphique qui facilite l'interaction avec le bot.

Dictionnaire des bots

Le dictionnaire des bots contient le nom du bot, l'adresse où son code se trouve, le nom d'une fonction main à appeler (si nécessaire), et une brève description du bot. Si le code du bot se trouve sur la page wiki de ce dernier, l'adresse est donc l'adresse de la page wiki du bot. Si le code se trouve sur GitHub, l'adresse stockée dans le dictionnaire est le lien direct vers le fichier python du code.

Lancer un bot

Pour lancer un bot, il suffit d'effectuer une requête GET de la manière suivante, sur un navigateur web. Il faut passer en paramètre le nom du bot, et éventuellement, les paramètres requis.

http://localhost:5000/api/v1/bots/run?name=SummarizingBot

Ceci va appeler la fonction run_bot_request(), qui va parser et formatter les paramètres de la requête (dans l'exemple, le nom), et appeler la méthode auxiliaire run_bot(). Cette dernière va récupérer le code du bot à l'aide de la fonction retrieve_bot() puis executer le code correspondant. Dans certains cas, il faut appeler une certaine fonction et lui donner des paramètres. Un message de succès s'affiche lors de la fin d'execution du bot, ainsi que tout les messages print du bot (changement du stdout vers un fichier out.txt). Si le bot est introuvable, la fonction run_bot() retourne -1 et la fonction plus générale retourne un message d'erreur. L'affichage est formaté à l'aide d'un simple template html.

Récupérer le code d'un bot

La fonction vérifie si l'adresse où se trouve le code (dans le dictionnaire des bots) contient le mot clé "GitHub" ou "wikipast". Si le code se trouve sur wikipast, la fonction assume qu'il est dans une seule section "Code" et entouré des tags "nowiki". Si le code se trouve sur GitHub, la fonction assume que le code est disponible dans un seul et unique fichier (et donc ne dépend pas de fichier externes) -

Obtenir de l'information sur les différents bots

Pour obtenir une brève description du bot il suffit d'effectuer la requête suivante (en passant le nom du bot en paramètre)

http://localhost:5000/api/v1/bots/info?name=SummarizingBot

Pour avoir une vue d'ensemble sur tous les bots disponibles:

http://localhost:5000/api/v1/bots/all

Séquence de lancement des bots

Pour pouvoir lancer une séquence de bots, il faut pouvoir uploader un fichier texte contenant un nom de bot par ligne. La fonction upload_sequence() se charge de vérifier la validité du fichier (extension valide .txt et fichier existant), de le renommer en "sequence.txt", et de le sauvegarder. Le formulaire d'upload "upload_form.html" envoie donc une requête POST à l'adresse

http://localhost:5000/api/v1/config/sequence

lors de la soumission d'un fichier.

Ensuite, il faut pouvoir lire et parser les lignes de ce fichier, et pour chaque ligne, lancer le bot correspondant avec comme paramètre toutes les pages a traduire périodiquement (i.e. biographies). Lors de la réception de la requête GET

http://localhost:5000/api/v1/bots/sequence

la fonction run_sequence() se charge de trouver le fichier, l'ouvrir, et lancer chaque bot dans l'ordre précisé à l'aide de la fonction run_bot(). Lors du lancement de la séquence, un registre documente toutes les actions effectuées (ouverture du fichier séquence, lancement d'un bot, son succès ou son échec...)

Limitations

Le code des bots est soit sur gitub, soit directement sur la page wiki du bot. Cependant, la structure des bots n'est pas homogène. Certains bots sont programmés pour agir sur des pages spécifiques, ou sur toutes les pages des biographies: il n'y a aucun moyen de spécifier une page précise. D'autre part, le code de certains bots est éparpillé sur plusieurs fichiers python: cela n'est plus en accord avec les assomptions de la fonction qui récupère le code des bots.

Il faudrait donc essayer d'harmoniser la structure des bots de façon à ce qu'ils prennent un nombre non spécifié d'arguments (en utilisant *args), et qu'ils soient tous structurés de la même manière.



Code

def debug(*arg):
	print("I was called with", len(arg), "arguments:", arg)