Development #16193
api datetimes : pouvoir limiter à un intervalle de dates
100%
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-allow-filtering-through-datetime-range.patch 0001-api-datetimes-allow-filtering-through-datetime-range.patch ajouté
- Statut changé de Nouveau à En cours
- Assigné à mis à Josué Kouka
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a presque 7 ans
Taper le test dans sa propre fonction.
Il y a un test avec start_dt et end_dt, et un test avec end_dt, mais pas de test avec juste start_dt.
Se permettre d'appeler ça _datetime plutôt que _dt.
Le ticket parlait de filter sur une date donnée, le patch permet de filtrer sur début/fin de dates/heures. Je peux comprendre le cas d'usage du date/fin sur des dates, mais pourquoi faire date/heure ?
Pas fan de l'imbrication de fonction surtout quand c'est totalement inutile vu qu'il y a un seul appel.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Lié à Development #17099: api: pouvoir filtrer les datetimes des evenements ou rendez-vous par la date ajouté
Mis à jour par Frédéric Péters il y a presque 7 ans
- Sujet changé de api datetimes : pouvoir limiter à une date donnée à api datetimes : pouvoir limiter à un intervalle de dates
Le ticket parlait de filter sur une date donnée, le patch permet de filtrer sur début/fin de dates/heures. Je peux comprendre le cas d'usage du date/fin sur des dates, mais pourquoi faire date/heure ?
(pas de réponse...)
Pour #17099, j'ai renommé ici pour parler d'intervalle, mais je reste à penser qu'on a juste besoin de dates, pas de datetimes.
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
Frédéric Péters a écrit :
Le ticket parlait de filter sur une date donnée, le patch permet de filtrer sur début/fin de dates/heures. Je peux comprendre le cas d'usage du date/fin sur des dates, mais pourquoi faire date/heure ?
(pas de réponse...)
Désolé j'avais mal compris le ticket.
Pour #17099, j'ai renommé ici pour parler d'intervalle, mais je reste à penser qu'on a juste besoin de dates, pas de datetimes.
Voici un patch avec filter juste sur les dates.
Mis à jour par Frédéric Péters il y a presque 7 ans
Pourquoi une méthode de classe ?
Pourquoi passer par un opérateur particulier pour le cas où les deux bornes sont présentes ?
Tout ceci ne tiendrait-il pas dans un patch de cinq lignes, plus clair ?
if request.GET.get('date_start'): kwargs['start_datetime__gte'] = parse_date(request.GET['date_start']) if request.GET.get('date_end'): kwargs['start_datetime__lte'] = parse_date(request.GET['date_end])
Aussi, je n'incluerais perso pas la borne supérieure (ce qui fait un plus logique start=d, end=d+7 pour couvrir une semaine, ou 1/mm/yy → 1/mm+1/yy pour un mois, je trouve).
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
Frédéric Péters a écrit :
Pourquoi une méthode de classe ?
Pourquoi passer par un opérateur particulier pour le cas où les deux bornes sont présentes ?
Ok overkill
Tout ceci ne tiendrait-il pas dans un patch de cinq lignes, plus clair ?
[...]
Aussi, je n'incluerais perso pas la borne supérieure (ce qui fait un plus logique start=d, end=d+7 pour couvrir une semaine, ou 1/mm/yy → 1/mm+1/yy pour un mois, je trouve).
Ok
Une question par contre, est ce que l'on autorise la récupération des événements au delà du max_booking_delay
?
(patch avec correction)
Mis à jour par Frédéric Péters il y a presque 7 ans
Une question par contre, est ce que l'on autorise la récupération des événements au delà du max_booking_delay ?
Non, on présente les dates de réservation possibles uniquement.
Ainsi, la fonction devrait être réécrite pour enchainer les .filter() sur le queryset, plutôt que remplir un kwargs.
from django.utils.dateparse import parse_date
dateparse vient avant timezone.
Mis à jour par Josué Kouka il y a presque 7 ans
Mis à jour par Thomas Noël il y a presque 7 ans
Tu peux conserver le « entries = Event.objects.filter(agenda=agenda).filter(**kwargs) » tel quel à la suite des ajouts sur kwargs, au lieu de le couper en deux
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
Thomas Noël a écrit :
Tu peux conserver le « entries = Event.objects.filter(agenda=agenda).filter(**kwargs) » tel quel à la suite des ajouts sur kwargs, au lieu de le couper en deux
Done
Mis à jour par Frédéric Péters il y a presque 7 ans
Alors en fait, quand je parlais d'enchainer les .filter() plutôt que remplir un kwargs, je ne pensais pas à remplir un kwargs puis un params (puis demain que sais-je).
Genre :
entries = Event.objects.filter(agenda=agenda) # we never want to allow booking for past events. entries = entries.filter(start_datetime__gte=localtime(now())) if agenda.minimal_booking_delay: entries = entries.filter( start_datetime__gte=localtime(now() + datetime.timedelta(days=agenda.minimal_booking_delay)).date()) if agenda.maximal_booking_delay: entries = entries.filter( start_datetime__lt=localtime(now() + datetime.timedelta(days=agenda.maximal_booking_delay)).date()) if 'date_start' in request.GET: entries = entries.filter(start_datetime__gte=parse_date(request.GET['date_start'])) if 'date_end' in request.GET: entries = entries.filter(start_datetime__lt=parse_date(request.GET['date_end']))
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
Frédéric Péters a écrit :
Alors en fait, quand je parlais d'enchainer les .filter() plutôt que remplir un kwargs, je ne pensais pas à remplir un kwargs puis un params (puis demain que sais-je).
Genre :
[...]
Mis à jour par Frédéric Péters il y a presque 7 ans
Il faudrait ajouter des tests assurant le respect de minimal_booking_delay et/ou maximal_booking_delay, pour éviter les régressions lors d'un refactoring de Datetimes qui déciderait de tout mettre dans un kwargs.
Mis à jour par Josué Kouka il y a presque 7 ans
- Fichier 0001-api-datetimes-add-date-range-filter-16193.patch 0001-api-datetimes-add-date-range-filter-16193.patch ajouté
Frédéric Péters a écrit :
Il faudrait ajouter des tests assurant le respect de minimal_booking_delay et/ou maximal_booking_delay, pour éviter les régressions lors d'un refactoring de Datetimes qui déciderait de tout mettre dans un kwargs.
Avec ces tests en plus.
Mis à jour par Josué Kouka il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
- % réalisé changé de 0 à 100
commit 2ebb54d63ce0e816c5e115d9535a66aca66bae67 Author: Josue Kouka <jkouka@entrouvert.com> Date: Mon May 15 16:37:20 2017 +0200 api datetimes: add date range filter (#16193)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
api datetimes: add date range filter (#16193)