====== Module routeur ====== Dans le fichier ''%%routeur.py%%'' on définit la classe ''%%Routeur%%''. Le rôle du routeur est, en fonction de la requête reçue, chercher l'action à exécuter. Vous pouvez tester le bon fonctionnement avec le module de test : {{ .:routeur.test.py |}}. ===== Interface de la classe Routeur ===== * attribut ''%%_routes%%'' de type ''list'' détaillés plus bas, * attribut ''%%_default_action%%'' contenant l'action à déclencher par défaut. Cette action est une fonction prenant en argument la requête et qui renvoie le contenu encodé qui sera la réponse à transmettre au client. * méthode ''%%__init__(self, routes, default_action)%%'' qui initialise le routeur avec une liste de routes et précise l'action par défaut. * méthode ''%%add_route(self, route)%%'' où ''%%route%%'' est de la forme ''%%{'pattern':..., 'action':...}%%'' et qui ajoute la route à la liste des routes du routeur. * méthode ''%%trigger(self, req:Requete)%%'' Cette méthode cherche dans la liste de routes la première qui est validée par ''%%req%%''. * Si aucune route n'est validée, déclenche l'action par défaut. * Si une route est disponible, la fonction ''%%action%%'' correspondante est exécutée et sa réponse renvoyée. //trigger// signifie //déclencher//. ===== routes ===== Chaque item de ''%%_routes%%'' est un dictionnaire de forme ''%%{ 'pattern':..., 'action':...}%%'' où ''%%pattern%%'' est un schéma comme ceux défini dans la classe ''%%Requete%%'' et ''%%action%%'' une fonction qui s'exécutera si le schéma est validé. La fonction doit être prévue pour avoir comme arguments : * ''%%req:Requete%%'', représentant la requête envoyée, * ''%%params%%'', un dictionnaire, résultat de ''%%req.match(pattern)%%'' -- voir [[requete]]. * En sortie, ''%%action%%'' doit renvoyer le contenu encodé qui sera la réponse à transmettre au client.