turicas/rows

Handle timezones more efficiently

Ouverte

#345 ouverte le 29 mars 2020

 (0 commentaire) (0 réaction) (0 personne assignée)Python (136 forks)github user discovery
bugenhancementhelp wantedrows.fields

Métriques du dépôt

Stars
 (886 étoiles)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

I've run into some problems serializing/deserializing datetime objects with timezones - in the end came up the this DIY solution:

import pytz

TIMEZONE_UTC = pytz.utc
TIMEZONE_BRAZIL = pytz.timezone("America/Sao_Paulo")

class BrazilianDatetimeField(rows.fields.DatetimeField):
    @classmethod
    def deserialize(cls, value):
        value = str(value or "").strip()
        if not value:
            return None
        dt = datetime.datetime.fromisoformat(value)
        if dt.tzinfo is None:  # Force naive to be UTC
            dt = TIMEZONE_UTC.localize(dt)
        dt = dt.astimezone(TIMEZONE_BRAZIL)
        return dt

    @classmethod
    def serialize(cls, value):
        if value is None:
            return ""
        return value.isoformat()

It'd be awesome if rows could handle timezones in more standard way.

Guide contributeur