Ejemplo n.º 1
0
def manager(request, nodeid):
    graph = ResourceGraph(nodeid)
    validations = models.Validation.objects.all()
    branches = JSONSerializer().serializeToPython(
        models.BranchMetadata.objects.all())
    branch_nodes = models.Node.objects.filter(~Q(branchmetadata=None),
                                              istopnode=True)

    for branch in branches:
        rootnode = branch_nodes.get(
            branchmetadata_id=branch['branchmetadataid'])
        branch['graph'] = ResourceGraph(rootnode)

    datatypes = models.DDataType.objects.all()
    return render(
        request, 'graph-manager.htm', {
            'main_script': 'graph-manager',
            'graph': JSONSerializer().serialize(graph),
            'validations': JSONSerializer().serialize(validations),
            'branches': JSONSerializer().serialize(branches),
            'datatypes': JSONSerializer().serialize(datatypes),
            'node_list': {
                'title': _('Node List'),
                'search_placeholder': _('Find a node in the graph')
            },
            'permissions_list': {
                'title': _('Permissions'),
                'search_placeholder': _('Find a group or user account')
            },
            'branch_list': {
                'title': _('Branch Library'),
                'search_placeholder': _('Find a graph branch')
            }
        })
Ejemplo n.º 2
0
    def test_copy_graph(self):
        """
        test that a copy of a graph has the same number of nodes and edges and that the primary keys have been changed
        and that the actual node references are different

        """

        graph = ResourceGraph(self.HERITAGE_RESOURCE_FIXTURE)
        graph_copy = graph.copy()

        self.assertEqual(len(graph.nodes), len(graph_copy.nodes))
        self.assertEqual(len(graph.edges), len(graph_copy.edges))
        self.assertEqual(len(graph.nodegroups), len(graph_copy.nodegroups))

        def findNodeByName(graph, name):
            for key, node in graph.nodes.iteritems():
                if node.name == name:
                    return node
            return None

        for key, node in graph.nodes.iteritems():
            node_copy = findNodeByName(graph_copy, node.name)
            self.assertIsNotNone(node_copy)
            self.assertNotEqual(node.pk, node_copy.pk)
            self.assertNotEqual(id(node), id(node_copy))
            if node.nodegroup != None:
                self.assertNotEqual(node.nodegroup, node_copy.nodegroup)
            
        for key, newedge in graph_copy.edges.iteritems():
            self.assertIsNotNone(graph_copy.nodes[newedge.domainnode_id])
            self.assertIsNotNone(graph_copy.nodes[newedge.rangenode_id])
            self.assertEqual(newedge.domainnode, graph_copy.nodes[newedge.domainnode.pk])
            self.assertEqual(newedge.rangenode, graph_copy.nodes[newedge.rangenode.pk])
            with self.assertRaises(KeyError):
                graph.edges[newedge.pk]
Ejemplo n.º 3
0
def append_branch(request, nodeid, property, branchmetadataid):
    if request.method == 'POST':
        graph = ResourceGraph(nodeid)
        newBranch = graph.append_branch(property, branchmetadataid=branchmetadataid)
        graph.save()
        return JSONResponse(newBranch)

    return HttpResponseNotFound()
Ejemplo n.º 4
0
def load_resource_graph_file(path_to_file):
    if isfile(path_to_file) and path_to_file.endswith(suffix):
        basepath = path_to_file
        name = basepath.split(os.sep)[-1]

        with open(basepath, 'rU') as f:
            file = json.load(f)
            resource_graph = ResourceGraph(file['graph'][0])
            resource_graph.save()
Ejemplo n.º 5
0
def load_resource_graph_file(path_to_file):
    if isfile(path_to_file) and path_to_file.endswith(suffix):
        basepath = path_to_file
        name = basepath.split(os.sep)[-1]

        with open(basepath, 'rU') as f:
            file = json.load(f)
            resource_graph = ResourceGraph(file['graph'][0])
            resource_graph.save()
Ejemplo n.º 6
0
def append_branch(request, nodeid, property, branchmetadataid):
    if request.method == 'POST':
        graph = ResourceGraph(nodeid)
        newBranch = graph.append_branch(property,
                                        branchmetadataid=branchmetadataid)
        graph.save()
        return JSONResponse(newBranch)

    return HttpResponseNotFound()
Ejemplo n.º 7
0
    def test_nodes_are_byref(self):
        """
        test that the nodes referred to in the ResourceGraph.edges are exact references to
        the nodes as opposed to a node with the same attribute values

        """

        graph = ResourceGraph(self.HERITAGE_RESOURCE_FIXTURE)

        node_mapping = {
            nodeid: id(node)
            for nodeid, node in graph.nodes.iteritems()
        }

        for key, edge in graph.edges.iteritems():
            self.assertEqual(node_mapping[edge.domainnode.pk],
                             id(edge.domainnode))
            self.assertEqual(node_mapping[edge.rangenode.pk],
                             id(edge.rangenode))

        for key, node in graph.nodes.iteritems():
            for key, edge in graph.edges.iteritems():
                newid = uuid.uuid4()
                if (edge.domainnode.pk == node.pk):
                    node.pk = newid
                    self.assertEqual(edge.domainnode.pk, newid)
                elif (edge.rangenode.pk == node.pk):
                    node.pk = newid
                    self.assertEqual(edge.rangenode.pk, newid)
Ejemplo n.º 8
0
    def test_branch_append(self):
        """
        test if a branch is properly appended to a graph

        """

        nodes_count_before = models.Node.objects.count()
        edges_count_before = models.Edge.objects.count()
        nodegroups_count_before = models.NodeGroup.objects.count()

        graph = ResourceGraph(self.rootNode)
        graph.append_branch(
            'P1', branchmetadataid=self.NODE_NODETYPE_BRANCHMETADATAID)
        graph.save()

        self.assertEqual(len(graph.nodes), 3)
        self.assertEqual(len(graph.edges), 2)
        self.assertEqual(len(graph.nodegroups), 2)

        self.assertEqual(models.Node.objects.count() - nodes_count_before, 2)
        self.assertEqual(models.Edge.objects.count() - edges_count_before, 2)
        self.assertEqual(
            models.NodeGroup.objects.count() - nodegroups_count_before, 1)

        for key, edge in graph.edges.iteritems():
            self.assertIsNotNone(graph.nodes[edge.domainnode_id])
            self.assertIsNotNone(graph.nodes[edge.rangenode_id])
            self.assertEqual(edge.domainnode, graph.nodes[edge.domainnode.pk])
            self.assertEqual(edge.rangenode, graph.nodes[edge.rangenode.pk])

        for key, node in graph.nodes.iteritems():
            if node.istopnode:
                self.assertEqual(node, self.rootNode)

        appended_branch = graph.append_branch(
            'P1', branchmetadataid=self.SINGLE_NODE_BRANCHMETADATAID)
        graph.save()
        self.assertEqual(len(graph.nodes), 4)
        self.assertEqual(len(graph.edges), 3)
        self.assertEqual(len(graph.nodegroups), 2)

        self.assertEqual(models.Node.objects.count() - nodes_count_before, 3)
        self.assertEqual(models.Edge.objects.count() - edges_count_before, 3)
        self.assertEqual(
            models.NodeGroup.objects.count() - nodegroups_count_before, 1)

        self.assertEqual(appended_branch.root.nodegroup,
                         self.rootNode.nodegroup)
Ejemplo n.º 9
0
    def test_graph_doesnt_polute_db(self):
        """
        test that the mere act of creating a ResourceGraph instance 
        doesn't save anything to the database

        """

        graph_obj = {
            'nodes': [{
                "status": None,
                "branchmetadataid": None,
                "description": "",
                "name": "ROOT_NODE",
                "istopnode": True,
                "ontologyclass": "",
                "nodeid": "55555555-343e-4af3-8857-f7322dc9eb4b",
                "nodegroupid": "55555555-343e-4af3-8857-f7322dc9eb4b",
                "datatype": "semantic",
                "cardinality": "1"
            }, {
                "status": None,
                "branchmetadataid": None,
                "description": "",
                "name": "NODE_NAME",
                "istopnode": False,
                "ontologyclass": "",
                "nodeid": "66666666-24c9-4226-bde2-2c40ee60a26c",
                "nodegroupid": "55555555-343e-4af3-8857-f7322dc9eb4b",
                "datatype": "string",
                "cardinality": "n"
            }],
            'edges': [{
                "branchmetadataid": None,
                "rangenodeid": "66666666-24c9-4226-bde2-2c40ee60a26c",
                "name": "",
                "edgeid": "11111111-d50f-11e5-8754-80e6500ee4e4",
                "domainnodeid": "55555555-343e-4af3-8857-f7322dc9eb4b",
                "ontologyproperty": "P2",
                "description": ""
            }]
        }

        nodes_count_before = models.Node.objects.count()
        edges_count_before = models.Edge.objects.count()
        nodegroups_count_before = models.NodeGroup.objects.count()

        graph = ResourceGraph(graph_obj)

        self.assertEqual(models.Node.objects.count() - nodes_count_before, 0)
        self.assertEqual(models.Edge.objects.count() - edges_count_before, 0)
        self.assertEqual(
            models.NodeGroup.objects.count() - nodegroups_count_before, 0)
Ejemplo n.º 10
0
    def test_copy_graph(self):
        """
        test that a copy of a graph has the same number of nodes and edges and that the primary keys have been changed
        and that the actual node references are different

        """

        graph = ResourceGraph(self.HERITAGE_RESOURCE_FIXTURE)
        graph_copy = graph.copy()

        self.assertEqual(len(graph.nodes), len(graph_copy.nodes))
        self.assertEqual(len(graph.edges), len(graph_copy.edges))
        self.assertEqual(len(graph.nodegroups), len(graph_copy.nodegroups))

        def findNodeByName(graph, name):
            for key, node in graph.nodes.iteritems():
                if node.name == name:
                    return node
            return None

        for key, node in graph.nodes.iteritems():
            node_copy = findNodeByName(graph_copy, node.name)
            self.assertIsNotNone(node_copy)
            self.assertNotEqual(node.pk, node_copy.pk)
            self.assertNotEqual(id(node), id(node_copy))
            if node.nodegroup != None:
                self.assertNotEqual(node.nodegroup, node_copy.nodegroup)

        for key, newedge in graph_copy.edges.iteritems():
            self.assertIsNotNone(graph_copy.nodes[newedge.domainnode_id])
            self.assertIsNotNone(graph_copy.nodes[newedge.rangenode_id])
            self.assertEqual(newedge.domainnode,
                             graph_copy.nodes[newedge.domainnode.pk])
            self.assertEqual(newedge.rangenode,
                             graph_copy.nodes[newedge.rangenode.pk])
            with self.assertRaises(KeyError):
                graph.edges[newedge.pk]
Ejemplo n.º 11
0
    def test_branch_append(self):
        """
        test if a branch is properly appended to a graph

        """

        nodes_count_before = models.Node.objects.count()
        edges_count_before = models.Edge.objects.count()
        nodegroups_count_before = models.NodeGroup.objects.count()

        graph = ResourceGraph(self.rootNode)
        graph.append_branch('P1', branchmetadataid=self.NODE_NODETYPE_BRANCHMETADATAID)
        graph.save()

        self.assertEqual(len(graph.nodes), 3)
        self.assertEqual(len(graph.edges), 2)
        self.assertEqual(len(graph.nodegroups), 2)

        self.assertEqual(models.Node.objects.count()-nodes_count_before, 2)
        self.assertEqual(models.Edge.objects.count()-edges_count_before, 2)
        self.assertEqual(models.NodeGroup.objects.count()-nodegroups_count_before, 1)

        for key, edge in graph.edges.iteritems():
            self.assertIsNotNone(graph.nodes[edge.domainnode_id])
            self.assertIsNotNone(graph.nodes[edge.rangenode_id])
            self.assertEqual(edge.domainnode, graph.nodes[edge.domainnode.pk])
            self.assertEqual(edge.rangenode, graph.nodes[edge.rangenode.pk])

        for key, node in graph.nodes.iteritems():
            if node.istopnode:
                self.assertEqual(node, self.rootNode)


        appended_branch = graph.append_branch('P1', branchmetadataid=self.SINGLE_NODE_BRANCHMETADATAID)
        graph.save()
        self.assertEqual(len(graph.nodes), 4)
        self.assertEqual(len(graph.edges), 3)
        self.assertEqual(len(graph.nodegroups), 2)

        self.assertEqual(models.Node.objects.count()-nodes_count_before, 3)
        self.assertEqual(models.Edge.objects.count()-edges_count_before, 3)
        self.assertEqual(models.NodeGroup.objects.count()-nodegroups_count_before, 1)

        self.assertEqual(appended_branch.root.nodegroup,self.rootNode.nodegroup)
Ejemplo n.º 12
0
 def test_make_tree(self):
     graph = ResourceGraph(self.HERITAGE_RESOURCE_FIXTURE)