Thank you everybody, I'll try to set up a working example tomorrow. Actually you're right, my question was formulated incorrectly, it may not be a question of lambdas. Basically, I was trying to create a series of routes in a reasonably concise way, something like this : 2 types of objects (actes, constats), 2 operations (archive, unarchive), 2 variants (handle one object, or handle a list of ids):
- /actes/{id}/archive - /actes/{id}/unarchive - /constats/{id}/archive - /constats/{id}/unarchive - /actes/-/archive_selection - /actes/-/unarchive_selection - /constats/-/archive_selection - /constats/-/unarchive_selection ``` factories = {'actes': {'fact': acte_factory, 'rsrc': ActeResource}, 'constats': {'fact': constat_factory, 'rsrc': ConstatResource}} functions = {'archive': (_archive, _archive_multi), 'unarchive': (_unarchive, _unarchive_multi)} for cat in ('actes', 'constats'): for op in ('archive', 'unarchive'): route_name: str = f'api.{cat}.{op}' config.add_route(route_name, f'/{cat}/{{id}}/{op}', factory=factories[cat]['fact']) config.add_view(functions[op][0], route_name=route_name, request_method='GET', renderer='json') config.add_route(route_name + '_selection', f'/{cat}/-/{op}_selection') config.add_view( lambda request: functions[op][1](request, factories[cat]['rsrc']), route_name=route_name + '_selection', request_method='POST', renderer='json') ``` The first 4 routes (those with "{id}" in them) worked fine, but last 4 (those using lambdas) were all mapped to the same function (`_unarchive_multi`) in the end. In order to make them work, I had to unroll the loops and enumerate everything. Ugly :( ``` config.add_route('api.actes.archive_selection', '/actes/-/archive_selection') config.add_route('api.constats.archive_selection', '/constats/-/archive_selection') config.add_view( lambda request: _archive_multi(request, ActeResource), route_name='api.actes.archive_selection', request_method='POST', renderer='json') config.add_view( lambda request: _archive_multi(request, ConstatResource), route_name='api.constats.archive_selection', request_method='POST', renderer='json') config.add_route('api.actes.unarchive_selection', '/actes/-/unarchive_selection') config.add_route('api.constats.unarchive_selection', '/constats/-/unarchive_selection') config.add_view( lambda request: _unarchive_multi(request, ActeResource), route_name='api.actes.unarchive_selection', request_method='POST', renderer='json') config.add_view( lambda request: _unarchive_multi(request, ConstatResource), route_name='api.constats.unarchive_selection', request_method='POST', renderer='json') ``` Laurent. -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pylons-discuss+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/pylons-discuss/CAB7cU6wqp1fSXJ_6ngOBqOw2RSSTxzjAZwGoyYsoDa58OdJkPg%40mail.gmail.com.