Projet

Général

Profil

Development #16193

api datetimes : pouvoir limiter à un intervalle de dates

Ajouté par Frédéric Péters il y a presque 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Catégorie:
-
Version cible:
-
Début:
05 mai 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers


Demandes liées

Lié à Chrono - Development #17099: api: pouvoir filtrer les datetimes des evenements ou rendez-vous par la dateRejeté22 juin 2017

Actions

Révisions associées

Révision 2ebb54d6 (diff)
Ajouté par Josué Kouka il y a presque 7 ans

api datetimes: add date range filter (#16193)

Historique

#1

Mis à jour par Josué Kouka il y a presque 7 ans

#2

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.

#3

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é
#4

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.

#5

Mis à jour par Josué Kouka il y a presque 7 ans

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.

#6

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).

#7

Mis à jour par Josué Kouka il y a presque 7 ans

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)

#8

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.

#10

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

#11

Mis à jour par Josué Kouka il y a presque 7 ans

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

#12

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']))
#13

Mis à jour par Josué Kouka il y a presque 7 ans

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 :

[...]

#14

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.

#15

Mis à jour par Josué Kouka il y a presque 7 ans

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.

#16

Mis à jour par Serghei Mihai il y a presque 7 ans

Ack

#17

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)
#18

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF