예제 #1
0
    def graph_from_json_list (self, ilist):

        # Give each item a unique identifier
        registry = Registry()
        found = {}

        first_guid = None

        counter = 0
        for i in ilist:
            i["guid"] = registry.get_guid()
            found[counter] = i
            counter+=1

        # load all the json into a dict with {"guid" : Graph}
        loaded = {}
        counter = 0
        for i in ilist:
            g = self.graph_from_json(found[counter])
            g.guid = i["guid"]
            loaded[found[counter]["guid"]] = copy.deepcopy(g)
            counter += 1

        # Convert loaded to an array
        loaded_array = []
        for i in found:
            loaded_array.append(loaded[found[i]["guid"]])

        # Go through all of the nexts and make sure they're set to the right value
        for i in found:
            nexts = found[i]["nexts"]
            new_nexts = []
            for n in nexts:
                if (n < 0):
                    new_nexts.append(None)
                else:
                    new_nexts.append(loaded_array[n])
            loaded[found[i]["guid"]].nexts = new_nexts

        # Find the first node, the one to return
        anchor = copy.deepcopy(loaded[found[0]["guid"]])
        # Update the start nodes to the loaded values

        start = anchor.startNode
        new_nexts = []
        for n in start.nexts:
            if type(n) is int:
                new_nexts.append(loaded_array[n])
            else:
                new_nexts.append(n)

        start.nexts = new_nexts

        return anchor
예제 #2
0
    def set_guids (self, node, registry=None):

        if (registry == None):
            registry = Registry()
            node.clear_guids(node)
        if not node:
            return
        if not node.guid == "":
            return
        else:
            node.guid = registry.get_guid()
            for n in node.nexts:
                if n:
                    n.set_guids(n, registry=registry)
            node.set_guids(node.startNode,registry=registry)
        return