From 3c95d80d3ef39f7ea7e909aa27c233f1fe6b4ee9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 31 Jan 2015 20:05:18 -0800 Subject: [PATCH] Ensure recorder loaded first to capture all --- homeassistant/loader.py | 6 ++++++ homeassistant/util.py | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/homeassistant/loader.py b/homeassistant/loader.py index ad865589694..528158f23c2 100644 --- a/homeassistant/loader.py +++ b/homeassistant/loader.py @@ -147,6 +147,7 @@ def load_order_components(components): Takes in a list of components we want to load: - filters out components we cannot load - filters out components that have invalid/circular dependencies + - Will make sure the recorder component is loaded first - Will ensure that all components that do not directly depend on the group component will be loaded before the group component. - returns an OrderedSet load order. @@ -154,6 +155,7 @@ def load_order_components(components): _check_prepared() group = get_component('group') + recorder = get_component('recorder') load_order = OrderedSet() @@ -171,6 +173,10 @@ def load_order_components(components): group and group.DOMAIN in order): load_order.update(comp_load_order) + # Push recorder to first place in load order + if recorder.DOMAIN in load_order: + load_order.promote(recorder.DOMAIN) + return load_order diff --git a/homeassistant/util.py b/homeassistant/util.py index c2efadbd1f3..ae5fcea609d 100644 --- a/homeassistant/util.py +++ b/homeassistant/util.py @@ -216,12 +216,21 @@ class OrderedSet(collections.MutableSet): return key in self.map def add(self, key): - """ Add an element to the set. """ + """ Add an element to the end of the set. """ if key not in self.map: end = self.end curr = end[1] curr[2] = end[1] = self.map[key] = [key, curr, end] + def promote(self, key): + """ Promote element to beginning of the set, add if not there. """ + if key in self.map: + self.discard(key) + + begin = self.end[2] + curr = begin[1] + curr[2] = begin[1] = self.map[key] = [key, curr, begin] + def discard(self, key): """ Discard an element from the set. """ if key in self.map: