예제 #1
0
 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())
예제 #2
0
 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
예제 #3
0
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)
예제 #4
0
 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)
예제 #5
0
    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
예제 #6
0
    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]")
예제 #7
0
 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
         ]
     ]
예제 #8
0
    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