base-adresse: provide ordering options to cities endpoint (#74374) #103
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/74374-base-adresse-cities-endpoint-ordering"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -347,2 +348,4 @@
'region_code': {'description': _('Region code'), 'example_value': '11'},
'department_code': {'description': _('Department code'), 'example_value': '75'},
'ordering': {
'description': _('Comma-separated ordering fields'),
Ici il faudrait préciser la liste des clés de tri (name, unaccent_name, code, zipcode, population, departement, region) et je mettrais "-population,zipcode,unaccent_name,name" en exemple, sous-entendant que c'est la valeur par défaut, et "documentant" au passage l'usage du "-".
Ok, j’ai ajouté la liste des clés, et j’ai modifié l’exemple comme tu le suggères ici.
@ -377,0 +384,4 @@
if ordering:
try:
if ',' in ordering:
Ce "if" n'est pas utile, car
cities.order_by(*ordering.split(','))
fonctionne aussi avec une chaîne sans virgule.Bien vu, en effet, j’avais loupé ça. C’est corrigé, c’est plus simple ainsi.
@ -377,0 +385,4 @@
if ordering:
try:
if ',' in ordering:
ordered = cities.order_by(*ordering.split(','))
Ici il faut juste modifier la query_set cities et laisser la suite (le return des cities) s'appliquer tranquillement. A voir d'ailleurs d'il faut faire le select_related('department', 'region') avant ou après.
Le problème est que le FieldError n’est pas levé lors du order_by (comportement “lazy”), seulement lorsque le sql est réellement exécuté, c’est-à-dire lors de
@ -377,0 +390,4 @@
ordered = cities.order_by(ordering)
return {'data': [city.to_json() for city in ordered]}
except FieldError:
self.logger.error(f'cities: erroneous ordering query {ordering}')
Il faut faire une APIError qui retourne une 400 (un self.logger.error ça fait surtout une trace sentry, non merci ;) )
Ok, j’avais mélangé ces deux choses. C’est corrigé dans la branche.
4c2a9f34d1
tobec630fb32
bec630fb32
toacdf6b94e5
(juste un seul commentaire, tu en fais ce que tu veux)
@ -377,0 +389,4 @@
if ordering:
try:
ordered = cities.order_by(*ordering.split(','))
return {'data': [city.to_json() for city in ordered]}
en mode pénible, je dirais de sortir le return du try/except