view weather_server/common.py @ 26:7def5611895b

Add support for an index page displaying all locations. This seems as good a time as any to declare 0.1.0.
author Paul Fisher <paul@pfish.zone>
date Sun, 10 Nov 2019 23:46:51 -0500
parents 52ef21607b31
children
line wrap: on
line source

import datetime
import json
import typing as t

import bson
import pytz

BSON_OPTIONS = bson.DEFAULT_CODEC_OPTIONS.with_options(
    tz_aware=True, tzinfo=pytz.UTC)


def bson_encode(data: t.Dict[str, t.Any]) -> bytes:
    return bson.BSON.encode(data, codec_options=BSON_OPTIONS)


class DateEncoder(json.JSONEncoder):

    def default(self, o: t.Any) -> t.Any:
        if not isinstance(o, datetime.datetime):
            return super().default(o)
        return o.timestamp()


JSON_ENCODER = DateEncoder(sort_keys=True)


def json_dumps(data: t.Any) -> str:
    return JSON_ENCODER.encode(data)


def utc_now():
    return datetime.datetime.utcnow().replace(tzinfo=pytz.UTC)