UTC bugfixes

This commit is contained in:
Paulus Schoutsen 2015-04-28 22:38:43 -07:00
parent 54904a1630
commit 3720333927
3 changed files with 18 additions and 36 deletions

View File

@ -37,7 +37,7 @@ def setup(hass, config):
def _handle_get_logbook(handler, path_match, data): def _handle_get_logbook(handler, path_match, data):
""" Return logbook entries. """ """ 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( handler.write_json(humanify(
recorder.query_events( recorder.query_events(

View File

@ -10,7 +10,6 @@ import threading
import queue import queue
import sqlite3 import sqlite3
from datetime import datetime, date from datetime import datetime, date
import time
import json import json
import atexit import atexit
@ -302,7 +301,7 @@ class Recorder(threading.Thread):
migration_id = 0 migration_id = 0
if migration_id < 1: if migration_id < 1:
cur.execute(""" self.query("""
CREATE TABLE recorder_runs ( CREATE TABLE recorder_runs (
run_id integer primary key, run_id integer primary key,
start integer, start integer,
@ -311,7 +310,7 @@ class Recorder(threading.Thread):
created integer) created integer)
""") """)
cur.execute(""" self.query("""
CREATE TABLE events ( CREATE TABLE events (
event_id integer primary key, event_id integer primary key,
event_type text, event_type text,
@ -319,10 +318,10 @@ class Recorder(threading.Thread):
origin text, origin text,
created integer) created integer)
""") """)
cur.execute( self.query(
'CREATE INDEX events__event_type ON events(event_type)') 'CREATE INDEX events__event_type ON events(event_type)')
cur.execute(""" self.query("""
CREATE TABLE states ( CREATE TABLE states (
state_id integer primary key, state_id integer primary key,
entity_id text, entity_id text,
@ -332,55 +331,41 @@ class Recorder(threading.Thread):
last_updated integer, last_updated integer,
created 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) save_migration(1)
if migration_id < 2: if migration_id < 2:
cur.execute(""" self.query("""
ALTER TABLE events ALTER TABLE events
ADD COLUMN time_fired integer ADD COLUMN time_fired integer
""") """)
cur.execute('UPDATE events SET time_fired=created') self.query('UPDATE events SET time_fired=created')
save_migration(2) save_migration(2)
if migration_id < 3: if migration_id < 3:
utc_offset = self.utc_offset utc_offset = self.utc_offset
cur.execute(""" self.query("""
ALTER TABLE recorder_runs ALTER TABLE recorder_runs
ADD COLUMN utc_offset integer ADD COLUMN utc_offset integer
""") """)
cur.execute(""" self.query("""
ALTER TABLE events ALTER TABLE events
ADD COLUMN utc_offset integer ADD COLUMN utc_offset integer
""") """)
cur.execute(""" self.query("""
ALTER TABLE states ALTER TABLE states
ADD COLUMN utc_offset integer ADD COLUMN utc_offset integer
""") """)
cur.execute("UPDATE schema_version SET performed=performed+?", self.query("UPDATE recorder_runs SET utc_offset=?", [utc_offset])
(utc_offset,)) self.query("UPDATE events SET utc_offset=?", [utc_offset])
self.query("UPDATE states SET utc_offset=?", [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)
save_migration(3) save_migration(3)
@ -411,7 +396,7 @@ class Recorder(threading.Thread):
def _adapt_datetime(datetimestamp): def _adapt_datetime(datetimestamp):
""" Turn a datetime into an integer for in the DB. """ """ 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(): def _verify_instance():

View File

@ -32,15 +32,12 @@ def get_time_zone(time_zone_str):
def utcnow(): def utcnow():
""" Get now in UTC time. """ """ Get now in UTC time. """
return dt.datetime.utcnow().replace(tzinfo=pytz.utc) return dt.datetime.now(pytz.utc)
def now(time_zone=None): def now(time_zone=None):
""" Get now in specified time zone. """ """ Get now in specified time zone. """
if time_zone is None: return dt.datetime.now(time_zone or DEFAULT_TIME_ZONE)
time_zone = DEFAULT_TIME_ZONE
return utcnow().astimezone(time_zone)
def as_utc(dattim): def as_utc(dattim):
@ -66,7 +63,7 @@ def as_local(dattim):
def utc_from_timestamp(timestamp): def utc_from_timestamp(timestamp):
""" Returns a UTC time from a 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): def datetime_to_local_str(dattim, time_zone=None):