turicas/rows

Handle timezones more efficiently

Aberta

#345 aberto em 29 de mar. de 2020

 (0 comentário) (0 reação) (0 responsável)Python (136 forks)github user discovery
bugenhancementhelp wantedrows.fields

Métricas do repositório

Stars
 (886 estrelas)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

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.

Guia do colaborador