Projet

Général

Profil

Development #50278

ajouter une zone "meta" à la réponse datetimes

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
18 janvier 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui dans les valeurs retournées on a toutes les date·heures, certaines marquées "disabled": true, ça fait qu'on ne peut pas faire un ...data|length == 0 pour voir s'il y a des créneaux dispos.

Ce ticket pour étendre l'API pour retourner :

{
  "data": [...], # comme maintenant
  "err": 0,      # pareil
  "meta": {
       ... # des infos en plus
  }
}

En information supplémentaire, immédiatement en réponse au besoin initial, il y aurait une clé permettant de savoir s'il y a des créneaux, peut-être un booléen "no-bookable-datetimes": true, ou alors le compte, "bookable-datetimes-number": 23 (et ainsi pouvoir afficher un message quand c'est presque plein).

Thomas notait aussi qu'on pourrait avoir « le nombre de créneaux total, le nombre de créneaux ouverts, la 1ere date possible, etc. ».


Fichiers

Révisions associées

Révision 446ca922 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

api: add a meta dict on datetimes endpoints (#50278)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 3 ans

Note : dans meta, je propose d'éviter des noms de clé avec des "-" (donc éviter "no-bookable-datetimes") car ça en rendra l'usage peu simple dans les appels du style webservice.foo.meta.key

Ici on pourrait avoir "empty": true s'il n'y a aucune place disponible.

#3

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

Oui j'ai écrit empty dans l'autre ticket mais en fait je ne suis pas fan parce que trop imprécis, je préfère une clé plus longue, mais tout à fait avec des underscores et pas des tirets.

#4

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Nicolas Roche
#6

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

Je préférerais un seul commit, pris isolément le 0001 amène trop de questions qui sont sans doute répondues quand se trouve en même temps considéré le contenu de 0002.

-        response = {'data': [get_event_detail(request, x, agenda=agenda) for x in entries]}
+        response = {
+            'data': [get_event_detail(request, x, agenda=agenda) for x in entries],
+        }

Ta configuration black ne doit pas correspondre à chrono, ce changement ne devrait pas apparaître.

                'no_bookable_datetimes': bookable_datetimes_number_available == 0,

affaire perso mais sur ce genre je préfère un explicite bool() qui indique l'affaire dès le début de la lecture, i.e.

                'no_bookable_datetimes': bool(bookable_datetimes_number_available == 0),
#7

Mis à jour par Nicolas Roche il y a plus de 3 ans

Remarques prises en compte (j'avais oublié de passer black ; pour la configuration j'ai pris celle donnée dans le README avec py35).

#8

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

            # we do not have the := operator, so we do that

Il était là avant et pas bien clair mais il me semble que c'est tout à fait inutile désormais, que le truc d'appeler make_id() c'était pour ne pas recalculer deux fois le slot_id dans la list comprehension, mais que comme elle a été dégagée, il deviendrait bien plus simple et lisible de :

        for slot in generator_of_unique_slots:
            # Make virtual id for a slot, combining meeting_type.id and
            # iso-format of date and time.
            # !!! The datetime must always be in the local timezone and the local
            # timezone must not change if we want the id to be stable.
            # It MUST be a garanty of SharedTimePeriod.get_time_slots() !!!
            slot_id = ...
            data.append(
                    {
                        'id': slot_id,

et à nouveau à parler de commentaire je ne comprends pas la dernière ligne de celui-ci, soit on explicite/complète, soit on dégage.

#9

Mis à jour par Nicolas Roche il y a plus de 3 ans

(fait)

... soit on explicite/complète, soit on dégage.

Le commentaire une redite du cartouche de SharedTimePeriod.get_time_slots() :

"""...
Generated start_datetime MUST be in the local timezone as the API
needs it to generate stable ids.
""" 

Je propose de remplacer le commentaire par :

# (SharedTimePeriod.get_time_slots() generate datetime in fixed local timezone,
# in order to make slot_id stable.)

et de rajouter l'obligation de ne pas changer de fuseau horaire dans le cartouche de get_time_slots() :

Generated start_datetime MUST be in the local timezone, and the local
timezone must not change, as the API needs it to generate stable ids.

#10

Mis à jour par Lauréline Guérin il y a plus de 3 ans

Est-ce que pour les tests que tu ajoutes, l'utilisation des fixtures mock_now ou utilisant mock_now (virtual_meetings_agenda, some_data) est utile ?
Est-ce qu'on a vraiment besoin de tester les timezones et l'heure courante ?
Ces fixtures multiplient les tests (x9), j'ai tendance à éviter de les utiliser quand on peut s'en passer.

#12

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

  • Statut changé de Solution proposée à Solution validée
#13

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

  • Statut changé de Solution validée à Résolu (à déployer)

J'ai poussé pour pouvoir tagguer/déployer ce matin,

commit 446ca922bef238e8ce2b053d36429511362d5dea
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Mon Jan 18 18:00:50 2021 +0100

    api: add a meta dict on datetimes endpoints (#50278)
#14

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

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF