From 372033392732d32256c3bc4a7aa192708493998d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 28 Apr 2015 22:38:43 -0700 Subject: [PATCH] UTC bugfixes --- homeassistant/components/logbook.py | 2 +- homeassistant/components/recorder.py | 43 +++++++++------------------- homeassistant/util/dt.py | 9 ++---- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/homeassistant/components/logbook.py b/homeassistant/components/logbook.py index 4d1e5ba8e00..68718a7ac43 100644 --- a/homeassistant/components/logbook.py +++ b/homeassistant/components/logbook.py @@ -37,7 +37,7 @@ def setup(hass, config): def _handle_get_logbook(handler, path_match, data): """ Return logbook entries. """ - start_today = dt_util.now().date() + start_today = dt_util.now().replace(hour=0, minute=0, second=0) handler.write_json(humanify( recorder.query_events( diff --git a/homeassistant/components/recorder.py b/homeassistant/components/recorder.py index ad4d2f3caa4..4f0a76cf18a 100644 --- a/homeassistant/components/recorder.py +++ b/homeassistant/components/recorder.py @@ -10,7 +10,6 @@ import threading import queue import sqlite3 from datetime import datetime, date -import time import json import atexit @@ -302,7 +301,7 @@ class Recorder(threading.Thread): migration_id = 0 if migration_id < 1: - cur.execute(""" + self.query(""" CREATE TABLE recorder_runs ( run_id integer primary key, start integer, @@ -311,7 +310,7 @@ class Recorder(threading.Thread): created integer) """) - cur.execute(""" + self.query(""" CREATE TABLE events ( event_id integer primary key, event_type text, @@ -319,10 +318,10 @@ class Recorder(threading.Thread): origin text, created integer) """) - cur.execute( + self.query( 'CREATE INDEX events__event_type ON events(event_type)') - cur.execute(""" + self.query(""" CREATE TABLE states ( state_id integer primary key, entity_id text, @@ -332,55 +331,41 @@ class Recorder(threading.Thread): last_updated integer, created integer) """) - cur.execute('CREATE INDEX states__entity_id ON states(entity_id)') + self.query('CREATE INDEX states__entity_id ON states(entity_id)') save_migration(1) if migration_id < 2: - cur.execute(""" + self.query(""" ALTER TABLE events ADD COLUMN time_fired integer """) - cur.execute('UPDATE events SET time_fired=created') + self.query('UPDATE events SET time_fired=created') save_migration(2) if migration_id < 3: utc_offset = self.utc_offset - cur.execute(""" + self.query(""" ALTER TABLE recorder_runs ADD COLUMN utc_offset integer """) - cur.execute(""" + self.query(""" ALTER TABLE events ADD COLUMN utc_offset integer """) - cur.execute(""" + self.query(""" ALTER TABLE states ADD COLUMN utc_offset integer """) - cur.execute("UPDATE schema_version SET performed=performed+?", - (utc_offset,)) - - cur.execute(""" - UPDATE recorder_runs SET utc_offset=?, - start=start + ?, end=end + ?, created=created + ? - """, [utc_offset]*4) - - cur.execute(""" - UPDATE events SET utc_offset=?, - time_fired=time_fired + ?, created=created + ? - """, [utc_offset]*3) - - cur.execute(""" - UPDATE states SET utc_offset=?, last_changed=last_changed + ?, - last_updated=last_updated + ?, created=created + ? - """, [utc_offset]*4) + self.query("UPDATE recorder_runs SET utc_offset=?", [utc_offset]) + self.query("UPDATE events SET utc_offset=?", [utc_offset]) + self.query("UPDATE states SET utc_offset=?", [utc_offset]) save_migration(3) @@ -411,7 +396,7 @@ class Recorder(threading.Thread): def _adapt_datetime(datetimestamp): """ Turn a datetime into an integer for in the DB. """ - return time.mktime(date_util.as_utc(datetimestamp).timetuple()) + return date_util.as_utc(datetimestamp.replace(microsecond=0)).timestamp() def _verify_instance(): diff --git a/homeassistant/util/dt.py b/homeassistant/util/dt.py index c0e695bbb0c..2439f77c558 100644 --- a/homeassistant/util/dt.py +++ b/homeassistant/util/dt.py @@ -32,15 +32,12 @@ def get_time_zone(time_zone_str): def utcnow(): """ Get now in UTC time. """ - return dt.datetime.utcnow().replace(tzinfo=pytz.utc) + return dt.datetime.now(pytz.utc) def now(time_zone=None): """ Get now in specified time zone. """ - if time_zone is None: - time_zone = DEFAULT_TIME_ZONE - - return utcnow().astimezone(time_zone) + return dt.datetime.now(time_zone or DEFAULT_TIME_ZONE) def as_utc(dattim): @@ -66,7 +63,7 @@ def as_local(dattim): def utc_from_timestamp(timestamp): """ Returns a UTC time from a timestamp. """ - return dt.datetime.fromtimestamp(timestamp, pytz.utc) + return dt.datetime.utcfromtimestamp(timestamp).replace(tzinfo=pytz.utc) def datetime_to_local_str(dattim, time_zone=None):