J'ai un problème avec le code répété dans les routes de notre application pyramide. Je suis sûr que je me trompe, mais je ne sais pas comment faire mieux. Notre application a essentiellement trois "modes" qui sont représentés comme des préfixes au chemin de l'URL. Sans préfixe, nous sommes en mode "prod", puis nous avons les préfixes "/ mock" et "/ old" qui utilisent les mêmes vues avec des backends différents pour récupérer les données.pyramide: dédupliquer des routes similaires
Le code se révèle ressembler à ceci:
def routes(config):
"""Add routes to the configuration."""
config.add_route('my_view:old', '/old/my_view')
config.add_route('my_view:prod', '/my_view')
config.add_route('my_view:mock', '/mock/my_view')
@view_config(route_name='my_view:mock', renderer='string')
def my_view_mock(request):
return my_view(request, data.mock)
@view_config(route_name='my_view:prod', renderer='string')
def my_view_prod(request):
return my_view(request, data.prod)
@view_config(route_name='my_view:old', renderer='string')
def my_view_old(request):
return my_view(request, data.old)
def my_view(request, data):
results = data.query(**request.json)
Ce qui est pire, est-ce schéma se répète pour tous nos critères d'évaluation, ce qui entraîne une tonne de code boilerplate presque-double.
Comment puis-je enseigner de manière centralisée la pyramide de ma configuration et me débarrasser de cette plaque?
Je ne vois pas ce qui différencie context.data. – bukzor
Ce serait quelque chose lié à la façon dont l'objet est créé ... l'itinéraire peut contrôler cela comme je l'ai dit plus haut. Vous spécifiez une usine différente par route. –
J'ai mis à jour l'exemple pour montrer comment 'MyView' pourrait être implémenté. Tout cela est juste des trucs pour vous aider à réfléchir à la façon dont vous devez résoudre votre problème. Votre exemple d'origine ne montre pas d'où proviennent les données. –