def load_nodes(self): """ Load nodes.json file from disk, use backup if necessary. If that fails, then reset to defaults. """ nodes_path = self.link.config.nodes_path if os.path.exists(nodes_path): try: nodes_file = open(nodes_path, "r") obj = json.load(nodes_file) nodes_file.close() return Node.from_json(obj, None, "", link=self.link) except Exception, e: print(e) self.link.logger.error("Unable to load nodes data") if os.path.exists(nodes_path + ".bak"): try: self.link.logger.warn("Restoring backup nodes") os.remove(nodes_path) os.rename(nodes_path + ".bak", nodes_path) nodes_file = open(nodes_path, "r") obj = json.load(nodes_file) nodes_file.close() return Node.from_json(obj, None, "", link=self.link) except: self.link.logger.error("Unable to restore nodes, using default") return self.link.get_default_nodes(self.create_empty_super_root()) else: self.link.logger.warn("Backup nodes data doesn't exist, using default") return self.link.get_default_nodes(self.create_empty_super_root())
def create_empty_super_root(self): """ Create empty super root. :return: Empty Super Root. """ super_root = Node("", None) super_root.link = self.link return super_root
class PopulationDSLink(DSLink): def __init__(self): super().__init__(Configuration("Population", responder=True)) self.countries = Node("Countries", self.super_root) self.hammock = hammock.Hammock("http://api.population.io/1.0") countries = self.hammock.countries().GET(headers={"Content-Type": "application/json"}).json()["countries"] for country in countries: country_node = Node(country, self.countries) self.countries.add_child(country_node) self.super_root.add_child(self.countries)
def create_defs(self): """ Create /defs/ Node. """ defs = Node("defs", self.get_super_root()) defs.set_transient(True) defs.set_config("$hidden", True) defs.add_child(Node("profile", defs)) self.get_super_root().add_child(defs)
def get_default_nodes(self): root = self.get_root_node() play_sound = Node("playSound", root) play_sound.set_name("Play Sound") play_sound.set_config("$is", "playSound") play_sound.set_invokable("write") root.add_child(play_sound) pause_sound = Node("pauseSound", root) pause_sound.set_name("Pause Sound") pause_sound.set_config("$is", "pauseSound") pause_sound.set_invokable("write") root.add_child(pause_sound) queue_sound = Node("queueSound", root) queue_sound.set_name("Queue Sound") queue_sound.set_config("$is", "queueSound") queue_sound.set_invokable("write") queue_sound.set_parameters([ { "name": "Sound Path", "type": "string" } ]) root.add_child(queue_sound) return root
def test(self): floatnode = Node(None, None) floatnode.set_type("number") floatnode.set_invokable("config") floatnode.set_value(0.0) self.assertEqual(floatnode.get_type(), "number") self.assertEqual(floatnode.get_value(), 0.0) self.assertEqual(floatnode.get_config("$invokable"), "config") intnode = Node(None, None) intnode.set_type("int") intnode.set_value(1) self.assertEqual(intnode.get_type(), "int") self.assertEqual(intnode.get_value(), 1) enumnode = Node(None, None) enumnode.set_type("enum") enumnode.set_value(["test", "hi"]) self.assertEqual(enumnode.get_type(), "enum") self.assertEqual(enumnode.get_value(), "enum[test,hi]")
def create_rng(self, data): name = data[1]["Name"] if self.responder.get_super_root().get("/%s" % name) is None: rng = Node(name, self.responder.get_super_root()) rng.set_config("$is", "rng") rng.set_type("number") rng.set_value(0) self.responder.get_super_root().add_child(rng) delete = Node("delete", rng) delete.set_config("$is", "delete_rng") delete.set_invokable("config") rng.add_child(delete) self.rngs[name] = rng return [ [ True ] ] return [ [ False ] ]
def get_default_nodes(self, super_root): create_rng = Node("create_rng", super_root) create_rng.set_display_name("Create RNG") create_rng.set_config("$is", "create_rng") create_rng.set_invokable("config") create_rng.set_parameters([ { "name": "Name", "type": "string" } ]) create_rng.set_columns([ { "name": "Success", "type": "bool" } ]) set_speed = Node("set_speed", super_root) set_speed.set_display_name("Set Speed") set_speed.set_config("$is", "set_speed") set_speed.set_invokable("config") set_speed.set_parameters([ { "name": "Speed", "type": "number" } ]) set_speed.set_columns([ { "name": "Success", "type": "bool" } ]) temp = Node("temp", super_root) temp.set_invokable("config") super_root.add_child(create_rng) super_root.add_child(set_speed) super_root.add_child(temp) return super_root