◐ Shell
clean mode source ↗

fix: Add adapters for sqlite datetime conversion by emgeee · Pull Request #4797 · feast-dev/feast

Expand Up @@ -17,7 +17,7 @@ import sqlite3 import struct import sys from datetime import datetime from datetime import date, datetime from pathlib import Path from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple, Union
Expand All @@ -39,6 +39,46 @@ from feast.utils import _build_retrieve_online_document_record, to_naive_utc

def adapt_date_iso(val: date): """Adapt datetime.date to ISO 8601 date.""" return val.isoformat()

def adapt_datetime_iso(val: datetime): """Adapt datetime.datetime to timezone-naive ISO 8601 date.""" return val.isoformat()

def adapt_datetime_epoch(val: datetime): """Adapt datetime.datetime to Unix timestamp.""" return int(val.timestamp())

sqlite3.register_adapter(date, adapt_date_iso) sqlite3.register_adapter(datetime, adapt_datetime_iso) sqlite3.register_adapter(datetime, adapt_datetime_epoch)

def convert_date(val: bytes): """Convert ISO 8601 date to datetime.date object.""" return date.fromisoformat(val.decode())

def convert_datetime(val: bytes): """Convert ISO 8601 datetime to datetime.datetime object.""" return datetime.fromisoformat(val.decode())

def convert_timestamp(val: bytes): """Convert Unix epoch timestamp to datetime.datetime object.""" return datetime.fromtimestamp(int(val))

sqlite3.register_converter("date", convert_date) sqlite3.register_converter("datetime", convert_datetime) sqlite3.register_converter("timestamp", convert_timestamp)

class SqliteOnlineStoreConfig(FeastConfigBaseModel, VectorStoreConfig): """Online store config for local (SQLite-based) store"""
Expand Down