From 30e7f09000c78039114caca50658588bf80ecb62 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen <paulus@paulusschoutsen.nl> Date: Mon, 30 Mar 2015 00:19:56 -0700 Subject: [PATCH] Clean up logbook component --- homeassistant/components/logbook.py | 65 ++++++++++++++--------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/logbook.py b/homeassistant/components/logbook.py index dd7d3275d84..810b06b25da 100644 --- a/homeassistant/components/logbook.py +++ b/homeassistant/components/logbook.py @@ -48,7 +48,7 @@ def _handle_get_logbook(handler, path_match, data): class Entry(object): """ A human readable version of the log. """ - # pylint: disable=too-many-arguments + # pylint: disable=too-many-arguments, too-few-public-methods def __init__(self, when=None, name=None, message=None, domain=None, entity_id=None): @@ -58,11 +58,6 @@ class Entry(object): self.domain = domain self.entity_id = entity_id - @property - def is_valid(self): - """ Returns if this entry contains all the needed fields. """ - return self.when and self.name and self.message - def as_dict(self): """ Convert Entry to a dict to be used within JSON. """ return { @@ -82,7 +77,7 @@ def humanify(events): - if 2+ sensor updates in GROUP_BY_MINUTES, show last - if home assistant stop and start happen in same minute call it restarted """ - # pylint: disable=too-many-branches, too-many-statements + # pylint: disable=too-many-branches # Group events in batches of GROUP_BY_MINUTES for _, g_events in groupby( @@ -138,32 +133,12 @@ def humanify(events): event != last_sensor_event[to_state.entity_id]: continue - entry = Entry( - event.time_fired, domain=domain, - name=to_state.name, entity_id=to_state.entity_id) - - if domain == 'device_tracker': - entry.message = '{} home'.format( - 'arrived' if to_state.state == STATE_HOME else 'left') - - elif domain == 'sun': - if to_state.state == sun.STATE_ABOVE_HORIZON: - entry.message = 'has risen' - else: - entry.message = 'has set' - - elif to_state.state == STATE_ON: - # Future: combine groups and its entity entries ? - entry.message = "turned on" - - elif to_state.state == STATE_OFF: - entry.message = "turned off" - - else: - entry.message = "changed to {}".format(to_state.state) - - if entry.is_valid: - yield entry + yield Entry( + event.time_fired, + name=to_state.name, + message=_entry_message_from_state(domain, to_state), + domain=domain, + entity_id=to_state.entity_id) elif event.event_type == EVENT_HOMEASSISTANT_START: if start_stop_events.get(event.time_fired.minute) == 2: @@ -182,3 +157,27 @@ def humanify(events): yield Entry( event.time_fired, "Home Assistant", action, domain=HA_DOMAIN) + + +def _entry_message_from_state(domain, state): + """ Convert a state to a message for the logbook. """ + # We pass domain in so we don't have to split entity_id again + + if domain == 'device_tracker': + return '{} home'.format( + 'arrived' if state.state == STATE_HOME else 'left') + + elif domain == 'sun': + if state.state == sun.STATE_ABOVE_HORIZON: + return 'has risen' + else: + return 'has set' + + elif state.state == STATE_ON: + # Future: combine groups and its entity entries ? + return "turned on" + + elif state.state == STATE_OFF: + return "turned off" + + return "changed to {}".format(state.state) -- GitLab