async def test_event_to_db_model(): """Test we can round trip Event conversion.""" event = ha.Event("state_changed", {"some": "attr"}, ha.EventOrigin.local, dt_util.utcnow()) native = Events.from_event(event).to_native() assert native == event native = Events.from_event(event, event_data="{}").to_native() event.data = {} assert native == event
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States import sqlalchemy.exc while True: try: self._setup_connection() self._setup_run() break except sqlalchemy.exc.SQLAlchemyError as e: log_error(e, retry_wait=CONNECT_RETRY_WAIT, rollback=False, message="Error during connection setup: %s") if self.purge_days is not None: def purge_ticker(event): """Rerun purge every second day.""" self._purge_old_data() track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(days=2)) track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(minutes=5)) while True: event = self.queue.get() if event == self.quit_object: self._close_run() self._close_connection() # pylint: disable=global-statement global _INSTANCE _INSTANCE = None self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue dbevent = Events.from_event(event) self._commit(dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(dbstate) self.queue.task_done()
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States import sqlalchemy.exc while True: try: self._setup_connection() self._setup_run() break except sqlalchemy.exc.SQLAlchemyError as e: log_error(e, retry_wait=CONNECT_RETRY_WAIT, rollback=False, message="Error during connection setup: %s") if self.purge_days is not None: def purge_ticker(event): """Rerun purge every second day.""" self._purge_old_data() track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(days=2)) track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(minutes=5)) while True: event = self.queue.get() if event == self.quit_object: self._close_run() self._close_connection() # pylint: disable=global-statement global _INSTANCE _INSTANCE = None self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue dbevent = Events.from_event(event) self._commit(dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(dbstate) self.queue.task_done()
def test_from_event_to_db_event(): """Test converting event to db event.""" event = ha.Event("test_event", {"some_data": 15}) db_event = Events.from_event(event) db_event.event_data = EventData.from_event(event).shared_data assert event == db_event.to_native()
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States import sqlalchemy.exc while True: try: self._setup_connection() self._setup_run() break except sqlalchemy.exc.SQLAlchemyError as e: log_error(e, retry_wait=CONNECT_RETRY_WAIT, rollback=False, message="Error during connection setup: %s") if self.purge_days is not None: def purge_ticker(event): """Rerun purge every second day.""" self._purge_old_data() track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(days=2)) track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(minutes=5)) while True: event = self.queue.get() if event is None: self._close_run() self._close_connection() self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue if ATTR_ENTITY_ID in event.data: entity_id = event.data[ATTR_ENTITY_ID] domain = split_entity_id(entity_id)[0] # Exclude entities OR # Exclude domains, but include specific entities if (entity_id in self.exclude) or \ (domain in self.exclude and entity_id not in self.include_e): self.queue.task_done() continue # Included domains only (excluded entities above) OR # Include entities only, but only if no excludes if (self.include_d and domain not in self.include_d) or \ (self.include_e and entity_id not in self.include_e and not self.exclude): self.queue.task_done() continue dbevent = Events.from_event(event) self._commit(dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(dbstate) self.queue.task_done()
def test_from_event(self): """Test converting event to db event.""" event = ha.Event('test_event', { 'some_data': 15 }) assert event == Events.from_event(event).to_native()
def test_from_event(self): """Test converting event to db event.""" event = ha.Event("test_event", {"some_data": 15}) assert event == Events.from_event(event).to_native()
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States from sqlalchemy.exc import SQLAlchemyError while True: try: self._setup_connection() self._setup_run() self.db_ready.set() self.hass.loop.call_soon_threadsafe(self.async_db_ready.set) break except SQLAlchemyError as err: _LOGGER.error("Error during connection setup: %s (retrying " "in %s seconds)", err, CONNECT_RETRY_WAIT) time.sleep(CONNECT_RETRY_WAIT) if self.purge_days is not None: async_track_time_interval( self.hass, self._purge_old_data, timedelta(days=2)) while True: event = self.queue.get() if event is None: self._close_run() self._close_connection() self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue if ATTR_ENTITY_ID in event.data: entity_id = event.data[ATTR_ENTITY_ID] domain = split_entity_id(entity_id)[0] # Exclude entities OR # Exclude domains, but include specific entities if (entity_id in self.exclude) or \ (domain in self.exclude and entity_id not in self.include_e): self.queue.task_done() continue # Included domains only (excluded entities above) OR # Include entities only, but only if no excludes if (self.include_d and domain not in self.include_d) or \ (self.include_e and entity_id not in self.include_e and not self.exclude): self.queue.task_done() continue with session_scope() as session: dbevent = Events.from_event(event) self._commit(session, dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(session, dbstate) self.queue.task_done()
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States import sqlalchemy.exc while True: try: self._setup_connection() self._setup_run() break except sqlalchemy.exc.SQLAlchemyError as e: log_error(e, retry_wait=CONNECT_RETRY_WAIT, rollback=False, message="Error during connection setup: %s") if self.purge_days is not None: def purge_ticker(event): """Rerun purge every second day.""" self._purge_old_data() track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(days=2)) track_point_in_utc_time(self.hass, purge_ticker, dt_util.utcnow() + timedelta(minutes=5)) while True: event = self.queue.get() if event is None: self._close_run() self._close_connection() self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue if ATTR_ENTITY_ID in event.data: entity_id = event.data[ATTR_ENTITY_ID] domain = split_entity_id(entity_id)[0] # Exclude entities OR # Exclude domains, but include specific entities if (entity_id in self.exclude) or \ (domain in self.exclude and entity_id not in self.include_e): self.queue.task_done() continue # Included domains only (excluded entities above) OR # Include entities only, but only if no excludes if (self.include_d and domain not in self.include_d) or \ (self.include_e and entity_id not in self.include_e and not self.exclude): self.queue.task_done() continue dbevent = Events.from_event(event) self._commit(dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(dbstate) self.queue.task_done()
def run(self): """Start processing events to save.""" from homeassistant.components.recorder.models import Events, States import sqlalchemy.exc while True: try: self._setup_connection() self._setup_run() break except sqlalchemy.exc.SQLAlchemyError as err: _LOGGER.error( "Error during connection setup: %s (retrying " "in %s seconds)", err, CONNECT_RETRY_WAIT) time.sleep(CONNECT_RETRY_WAIT) if self.purge_days is not None: async_track_time_interval(self.hass, self._purge_old_data, timedelta(days=2)) while True: event = self.queue.get() if event is None: self._close_run() self._close_connection() self.queue.task_done() return if event.event_type == EVENT_TIME_CHANGED: self.queue.task_done() continue if ATTR_ENTITY_ID in event.data: entity_id = event.data[ATTR_ENTITY_ID] domain = split_entity_id(entity_id)[0] # Exclude entities OR # Exclude domains, but include specific entities if (entity_id in self.exclude) or \ (domain in self.exclude and entity_id not in self.include_e): self.queue.task_done() continue # Included domains only (excluded entities above) OR # Include entities only, but only if no excludes if (self.include_d and domain not in self.include_d) or \ (self.include_e and entity_id not in self.include_e and not self.exclude): self.queue.task_done() continue with session_scope() as session: dbevent = Events.from_event(event) self._commit(session, dbevent) if event.event_type != EVENT_STATE_CHANGED: self.queue.task_done() continue dbstate = States.from_event(event) dbstate.event_id = dbevent.event_id self._commit(session, dbstate) self.queue.task_done()