turicas/rows

Handle timezones more efficiently

Aperta

#345 aperta il 29 mar 2020

 (0 commenti) (0 reazioni) (0 assegnatari)Python (136 fork)github user discovery
bugenhancementhelp wantedrows.fields

Metriche repository

Star
 (886 stelle)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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.

Guida contributor