Comment faciliter la lecture de ses routes sous Pyramid ?

Je souhaite vous faire part de mes réflexions à propos de la déclaration de routes sous Pyramid.

Voici un extrait de la déclaration des routes du projet Bookie (Python based delicious.com replacement).

C'est un extrait du fichier bookie/routes.py :

config.add_route("home", "/")
config.add_route("dashboard", "/dashboard")

# auth routes
config.add_route("login", "login")
config.add_route("logout", "logout")
config.add_route("reset", "{username}/reset/{reset_key}")
config.add_route("signup", "signup")
config.add_route("signup_process", "signup_process")

# celery routes
config.add_route("celery_hourly_stats", "jobhourly")

# DELAPI Routes
config.add_route("del_post_add", "{username}/delapi/posts/add")
config.add_route("del_post_delete", "{username}/delapi/posts/delete")
config.add_route("del_post_get", "{username}/delapi/posts/get")
config.add_route("del_tag_complete", "{username}/delapi/tags/complete")

# bmark routes
config.add_route("bmark_recent", "recent")
config.add_route("bmark_recent_tags", "recent/*tags")

config.add_route("bmark_readable", "bmark/readable/{hash_id}")

# user based bmark routes
config.add_route("user_bmark_recent", "{username}/recent")
config.add_route("user_bmark_recent_tags", "{username}/recent/*tags")

config.add_route("user_bmark_edit", "{username}/edit/{hash_id}")
config.add_route("user_bmark_edit_error",
    "{username}/edit_error/{hash_id}")
config.add_route("user_bmark_new", "{username}/new")
config.add_route("user_bmark_new_error", "{username}/new_error")

# config.add_route("bmark_delete", "/bmark/delete")
# config.add_route("bmark_confirm_delete", "/bmark/confirm/delete/{bid}")

# tag related routes
config.add_route("tag_list", "tags")
config.add_route("tag_bmarks", "tags/*tags")

Voici maintenant la liste des fichiers présents dans le dossier views :

.
├── bcelery
├── __init__.py
├── lib
├── models
├── routes.py
├── routes.pyc
├── scripts
├── static
├── templates
├── tests
└── views               <=== ce dossier
    ├── accounts.py
    ├── api.py
    ├── auth.py
    ├── bmarks.py
    ├── delapi.py
    ├── exceptions.py
    ├── __init__.py
    ├── stats.py
    ├── tags.py
    └── utils.py

Maintenant, je vous pose les questions suivantes :

  • En lisant le code source ci-dessous, pouvez vous me dire où sont les fonctions qui gèrent les vues home et dashboard ?
config.add_route("home", "/")
config.add_route("dashboard", "/dashboard")
  • En lisant le code source ci-dessous, pouvez vous me dire où sont les fonctions qui gèrent les vues user_bmark_recent, user_bmark_recent_tags et user_bmark_edit ?
config.add_route("user_bmark_recent", "{username}/recent")
config.add_route("user_bmark_recent_tags", "{username}/recent/*tags")

config.add_route("user_bmark_edit", "{username}/edit/{hash_id}")

Il n'est pas possible de répondre à ces questions facilement… il faut soit ouvrir les fichiers dans le dossier views ou utiliser grep pour faire une recherche.

Dans ce code source, il n'y a que les commentaires au dessus des routes qui nous permettent d'avoir un indice du fichier où se trouvent les fonctions views.

Les chemins complets vers les fonctions views ne sont pas non plus visibles dans l'outil de debug de Pyramid :

Maintenant, voici une autre manière de déclarer ses routes :

config.add_route("home", "/")
config.add_view(name="home", view="bookie.views.home")

config.add_route("dashboard", "/dashboard")
config.add_view(name="dashboard", view="bookie.views.stats.dashboard")

# auth routes
config.add_route("login", "login")
config.add_view(name="login", view="bookie.views.auth.login")

config.add_route("logout", "logout")
config.add_view(name="logout", view="bookie.views.auth.logout")

config.add_route("reset", "{username}/reset/{reset_key}")
config.add_view(name="reset", view="bookie.views.auth.reset")

config.add_route("signup", "signup")
config.add_view(name="signup", view="bookie.views.auth.signup")

config.add_route("signup_process", "signup_process")
config.add_view(name="signup_process", view="bookie.views.auth.signup_process")

…

Ici, en utilisant une déclaration explicite config.add_view je sais directement où sont présentent les fonctions views.

Je trouve cette notation bien plus pratique pour une personne qui souhaite contribuer, comprendre rapidement la structure d'un projet Pyramid.

Qu'en pensez vous ? Quels sont vos pratiques pour faciliter la lecture de vos projets Pyramid ?

blog comments powered by Disqus

Mes flux :