From 6c4a6568f55def9f74e0d0957882c580e4d83dfa Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Tue, 19 May 2020 19:13:27 +0200 Subject: [PATCH] Fix timezone issues for db fields in recorder (#35719) The database fields are timezoned via DateTime(timezone=True), so the default value should be timezoned too. When using cockroachdb this is fatal and results in the recorder crashing. --- homeassistant/components/recorder/models.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/recorder/models.py b/homeassistant/components/recorder/models.py index f3e80a9a739..8a6f25d57c3 100644 --- a/homeassistant/components/recorder/models.py +++ b/homeassistant/components/recorder/models.py @@ -1,5 +1,4 @@ """Models for SQLAlchemy.""" -from datetime import datetime import json import logging @@ -39,7 +38,7 @@ class Events(Base): # type: ignore event_data = Column(Text) origin = Column(String(32)) time_fired = Column(DateTime(timezone=True), index=True) - created = Column(DateTime(timezone=True), default=datetime.utcnow) + created = Column(DateTime(timezone=True), default=dt_util.utcnow) context_id = Column(String(36), index=True) context_user_id = Column(String(36), index=True) # context_parent_id = Column(String(36), index=True) @@ -84,9 +83,9 @@ class States(Base): # type: ignore state = Column(String(255)) attributes = Column(Text) event_id = Column(Integer, ForeignKey("events.event_id"), index=True) - last_changed = Column(DateTime(timezone=True), default=datetime.utcnow) - last_updated = Column(DateTime(timezone=True), default=datetime.utcnow, index=True) - created = Column(DateTime(timezone=True), default=datetime.utcnow) + last_changed = Column(DateTime(timezone=True), default=dt_util.utcnow) + last_updated = Column(DateTime(timezone=True), default=dt_util.utcnow, index=True) + created = Column(DateTime(timezone=True), default=dt_util.utcnow) context_id = Column(String(36), index=True) context_user_id = Column(String(36), index=True) # context_parent_id = Column(String(36), index=True) @@ -152,10 +151,10 @@ class RecorderRuns(Base): # type: ignore __tablename__ = "recorder_runs" run_id = Column(Integer, primary_key=True) - start = Column(DateTime(timezone=True), default=datetime.utcnow) + start = Column(DateTime(timezone=True), default=dt_util.utcnow) end = Column(DateTime(timezone=True)) closed_incorrect = Column(Boolean, default=False) - created = Column(DateTime(timezone=True), default=datetime.utcnow) + created = Column(DateTime(timezone=True), default=dt_util.utcnow) __table_args__ = (Index("ix_recorder_runs_start_end", "start", "end"),) @@ -191,7 +190,7 @@ class SchemaChanges(Base): # type: ignore __tablename__ = "schema_changes" change_id = Column(Integer, primary_key=True) schema_version = Column(Integer) - changed = Column(DateTime(timezone=True), default=datetime.utcnow) + changed = Column(DateTime(timezone=True), default=dt_util.utcnow) def _process_timestamp(ts):