Projet

Général

Profil

Bug #45256

utils: erreur de type sur fonction timestamp_from_datetime lorsque la zone horaire n'est pas précisée

Ajouté par Paul Marillonnet il y a presque 4 ans. Mis à jour il y a presque 4 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Parce qu'alors la méthode utcoffset de l'objet datetime renvoie None, et en python3 semblerait ça ne passe plus :

dt = datetime.datetime(2020, 7, 18, 10, 12, 41, 264101)

    def timestamp_from_datetime(dt):
        '''Convert an aware datetime as an Unix timestamp'''
>       utc_naive = dt.replace(tzinfo=None) - dt.utcoffset()
E       TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'NoneType'


Fichiers

Révisions associées

Révision 9ce7263b (diff)
Ajouté par Paul Marillonnet il y a presque 4 ans

utils: remove obsolete timestamp_from_datetime (#45256)

Historique

#1

Mis à jour par Paul Marillonnet il y a presque 4 ans

#2

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

La méthode est inutile en python3, https://docs.python.org/fr/3.6/library/datetime.html#datetime.datetime.timestamp on peut la remplacer par dt.timestamp() sans souci.

#3

Mis à jour par Paul Marillonnet il y a presque 4 ans

Avec un cast nécessaire quand même car cette méthode renvoie un flottant.
Je viens de me rappeler que, contre toute intuition, int(toto) quand toto est un flottant ne prend pas l'entier le plus proche, juste la troncature.
Ça me paraît pas grave, mais si à la relecture on juge qu'une seconde de plus ou de moins ça peut être important pour le SSO, je referai le patch.

#4

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Paul Marillonnet a écrit :

Avec un cast nécessaire quand même car cette méthode renvoie un flottant.
Je viens de me rappeler que, contre toute intuition, int(toto) quand toto est un flottant ne prend pas l'entier le plus proche, juste la troncature.

C'est quoi l'entier le plus proche de 1,5 ? La troncature c'est tout aussi bien que les milles autres façons arbitraires de le faire, déjà troncature t'en as au moins deux, vers -inf or vers 0. Et pour ta passion des arrondis : https://docs.python.org/2/library/decimal.html#decimal.Context

Ça me paraît pas grave, mais si à la relecture on juge qu'une seconde de plus ou de moins ça peut être important pour le SSO, je referai le patch.

Non ce n'est pas important.

#5

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

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

Mis à jour par Paul Marillonnet il y a presque 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 9ce7263b817f9b4970dc20d7d4b6d39aeb28935e
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Sat Jul 18 10:35:29 2020 +0200

    utils: remove obsolete timestamp_from_datetime (#45256)
#7

Mis à jour par Paul Marillonnet il y a presque 4 ans

Benjamin Dauvergne a écrit :

C'est quoi l'entier le plus proche de 1,5 ? La troncature c'est tout aussi bien que les milles autres façons arbitraires de le faire, déjà troncature t'en as au moins deux, vers -inf or vers 0. Et pour ta passion des arrondis : https://docs.python.org/2/library/decimal.html#decimal.Context

On m'a toujours appris ]0, 0.5[ pour l'entier directement inférieur et [0.5, 1[ va vers l'entier directement supérieur. Je croyais que c'était communément accepté, c'est tout un monde qui s'effondre :)

Ma crainte, sans doute infondée (et en tout cas pas justifiée ici), serait un cas d'usage, de calcul numérique ou autre, où on se trimballe un flottant y qui à un moment donné doit être interprété comme la représentation d'un entier A - Ɛ, où Ɛ est négligeable, mais pas négligé par int(y) qui renvoie donc A - 1, à tort.

#8

Mis à jour par Frédéric Péters il y a presque 4 ans

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

Formats disponibles : Atom PDF