mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Use ciso8601 for parsing datetimes with sqlalchemy sqlite dialect (#71766)
This commit is contained in:
parent
d76ff7d5a2
commit
8ab27f26b9
@ -6,6 +6,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, TypedDict, cast, overload
|
from typing import Any, TypedDict, cast, overload
|
||||||
|
|
||||||
|
import ciso8601
|
||||||
from fnvhash import fnv1a_32
|
from fnvhash import fnv1a_32
|
||||||
from sqlalchemy import (
|
from sqlalchemy import (
|
||||||
BigInteger,
|
BigInteger,
|
||||||
@ -22,7 +23,7 @@ from sqlalchemy import (
|
|||||||
Text,
|
Text,
|
||||||
distinct,
|
distinct,
|
||||||
)
|
)
|
||||||
from sqlalchemy.dialects import mysql, oracle, postgresql
|
from sqlalchemy.dialects import mysql, oracle, postgresql, sqlite
|
||||||
from sqlalchemy.engine.row import Row
|
from sqlalchemy.engine.row import Row
|
||||||
from sqlalchemy.ext.declarative import declared_attr
|
from sqlalchemy.ext.declarative import declared_attr
|
||||||
from sqlalchemy.orm import declarative_base, relationship
|
from sqlalchemy.orm import declarative_base, relationship
|
||||||
@ -91,8 +92,18 @@ TABLES_TO_CHECK = [
|
|||||||
EMPTY_JSON_OBJECT = "{}"
|
EMPTY_JSON_OBJECT = "{}"
|
||||||
|
|
||||||
|
|
||||||
DATETIME_TYPE = DateTime(timezone=True).with_variant(
|
class FAST_PYSQLITE_DATETIME(sqlite.DATETIME): # type: ignore[misc]
|
||||||
mysql.DATETIME(timezone=True, fsp=6), "mysql"
|
"""Use ciso8601 to parse datetimes instead of sqlalchemy built-in regex."""
|
||||||
|
|
||||||
|
def result_processor(self, dialect, coltype): # type: ignore[no-untyped-def]
|
||||||
|
"""Offload the datetime parsing to ciso8601."""
|
||||||
|
return lambda value: None if value is None else ciso8601.parse_datetime(value)
|
||||||
|
|
||||||
|
|
||||||
|
DATETIME_TYPE = (
|
||||||
|
DateTime(timezone=True)
|
||||||
|
.with_variant(mysql.DATETIME(timezone=True, fsp=6), "mysql")
|
||||||
|
.with_variant(FAST_PYSQLITE_DATETIME(), "sqlite")
|
||||||
)
|
)
|
||||||
DOUBLE_TYPE = (
|
DOUBLE_TYPE = (
|
||||||
Float()
|
Float()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user