Modification #123
Utilisation du parser Ruby déporté
| Status : | Résolu | Start : | 04/07/2009 | |
| Priority : | Immédiat | Due date : | ||
| Assigned to : | David THENON | % Done : | 100% |
|
| Category : | Noyau applicatif | |||
| Target version : | - | |||
Description
Bon alors pour solutionner ce problème de parser défaillant, on va tenter d'utiliser un parser déporté. C'est le parser Ruby de bouchot.org qui a été choisi. Il sera autonome, installé sur le même serveur et utilisé en localhost.
Le but est donc que lorsque Shoop recoit un message, il le renvoi directement au parser Ruby qui renvoi le message formaté par ses soins. Pour suivre le mouvement, le modèle des messages incluera maintenant une colonne supplémentaire render pour stocker le message formaté en plus de la version originale. Il faut aussi revoir le système pour pouvoir switcher d'un parser à l'autre au besoin, sauf si ça prends trop de temps.
Donc désormais, seulement l'action du POST d'un message fera intervenir le parser, tout le reste n'aura jamais plus besoin que d'utiliser simplement le @render.
La transaction entre Shoop et le parser Ruby se fait en JSON.
{
'identity': 'superman',
'ua': 'Internet Explorer 4',
'datetime': '1977-06-02 13:30:23.99999',
'time': '13:30:23',
'content': 'plop foo meuh'
'wiki_url': 'http://foo.plop/'
}
@identity : contient le nom d'utilisateur si le message vient d'un utilisateur
identitié sur le site. Si c'est un anonyme, la valeure sera 'false'.
@ua : le user agent complet , non tronqué
@datetime : datetime complet à la réception du message sur le serveur.
@time : l'horloge basée sur le datetime complet.
@content : le message brut tel qu'il a été reçu.
@wiki_url : l'url de base d'un wiki dans le cas d'un mot Wiki.
Le retour de ton parser est identique, plus un attribut @render qui contient le rendu généré par le parser Ruby à partir du message brut, ainsique l'attribut @urls contenant une liste [] des urls captés et un attribut @clocks avec les horloges captés.
History
04/08/2009 03:53 AM - David THENON
- % Done changed from 0 to 20
Ok j'ai fait mon wrapper pour le parser Ruby externe, je l'implémenter mais ça introduit des petits modifs qui feront que mon parser sera un peu HS le temps que je le mette à jour, chose que je ferais après que tout fonctionne avec le nouveau.
04/08/2009 10:48 PM - Redmine Admin
- % Done changed from 20 to 70
Intégration terminée, me reste à tout revérifier pour un ou deux petits détails, puis à faire des unittests et la doc. ensuite c'est mettable en prod.
04/08/2009 11:28 PM - David THENON
Dans l'ordre ce qu'il reste à faire :
- Faire la séléction et l'import du parser une fois au démarrage dans un tribune/engine/parser/__init__ , ranger le parser wiki et le wrapper externe dedans et séléctionner l'un des deux soit par défaut d'existence de l'un avec try/except soit par une option dans les settings de l'appli. (attention pour l'instant l'ancien parser wiki nécessite des modifs pour fonctionner dans le nouveau système).
- unittest unique pour tout les parser, mais avec une option pour ne pas dépendre du choix de l'installation et pouvoir forcer le test d'un parser non activé (si jamais il est dispo). Ces unittests doivent tester les bases de syntaxes, puis pas mal de lignes foireuses. Tester le mode "bulk" aussi, que ce soit à la suite des autres, ou à part avec une option.
- Si les stats renvoyés par l'unittest est pas suffisant, faire quelque chose genre avec curl ou avec un script python.
- Faire un README pour le dépot du projet bois2cagette et rédiger la doc de syntaxe du parser (wiki2xhtml ? redmine ?)
Ce sera pour après la première mise en prod fonctionnelle, mais il faudra penser à modifier l'ancien parser wiki pour qu'il puisse être réutilisé directement dans Shoop.
04/09/2009 04:28 AM - David THENON
- % Done changed from 70 to 90
Faire la séléction et l'import du parser une fois au démarrage dans un tribune/engine/parser/__init__ , ranger le parser wiki et le wrapper externe dedans et séléctionner l'un des deux soit par défaut d'existence de l'un avec try/except soit par une option dans les settings de l'appli. (attention pour l'instant l'ancien parser wiki nécessite des modifs pour fonctionner dans le nouveau système).unittest unique pour tout les parser, mais avec une option pour ne pas dépendre du choix de l'installation et pouvoir forcer le test d'un parser non activé (si jamais il est dispo). Ces unittests doivent tester les bases de syntaxes, puis pas mal de lignes foireuses. Tester le mode "bulk" aussi, que ce soit à la suite des autres, ou à part avec une option.
04/10/2009 04:32 AM - David THENON
- Status changed from Assigné to Résolu
- % Done changed from 90 to 100
Le README a été ajouté dans le dépôt de bois2cagette, tout est documenté, les unittests sont corrects, le switch de parser est opérationnel.
Reste juste à passer un petit coup sur la doc d'aide pour que la syntaxe change selon le parser.
Ca ne bloque pas la mise en prod mais il faut penser à rendre l'ancien parser utilisable avec le nouveau système.