Skip to content
This repository has been archived by the owner on Feb 23, 2022. It is now read-only.

Commit

Permalink
Merge pull request #98 from multinet-app/graph_validation
Browse files Browse the repository at this point in the history
Add Graph Validation on Creation
  • Loading branch information
jjnesbitt committed Jul 25, 2019
2 parents 24fbc9c + 3077877 commit e961c34
Show file tree
Hide file tree
Showing 3 changed files with 341 additions and 2 deletions.
11 changes: 9 additions & 2 deletions client/src/views/WorkspaceDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
<v-card-text>
<v-layout row wrap>
<v-flex>
<v-text-field v-model="newGraph" placeholder="name your graph" solo />
<v-text-field v-model="newGraph" placeholder="name your graph" solo :error-messages="graphCreationErrors"/>
</v-flex>
</v-layout>

Expand Down Expand Up @@ -205,6 +205,7 @@ export default {
selectedType: null,
graphNodeTables: [],
graphEdgeTable: null,
graphCreationErrors: [],
tableCreationError: null,
}
},
Expand Down Expand Up @@ -288,13 +289,19 @@ export default {
}`});
if (response.data.errors.length > 0) {
this.graphCreationErrors = response.data.errors;
throw new Error(response.data.errors);
}
if (!response.data.data.graph) {
throw new Error(`Graph "${this.newGraph}" already exists.`);
const message = `Graph "${this.newGraph}" already exists.`
this.graphCreationErrors = [message];
throw new Error(message);
}
this.graphCreationErrors = [];
this.update();
},
Expand Down
12 changes: 12 additions & 0 deletions multinet/multinet/resolvers/mutation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Mutation queries for GraphQL interface."""
from multinet import db
from multinet.types import Graph, Table
from graphql import GraphQLError


def workspace(root, info, name):
Expand All @@ -17,6 +18,17 @@ def delete_workspace(root, info, name):
def graph(root, info, workspace, name, node_tables, edge_table):
"""Create a graph."""
graph = Graph(workspace, name)

# Validate that all referenced tables exist
edges = list(db.db(workspace).collection(edge_table).find({}))
invalid_from = set([edge['_from'].split('/')[0] for edge in edges
if edge['_from'].split('/')[0] not in node_tables])
invalid_to = set([edge['_to'].split('/')[0] for edge in edges
if edge['_to'].split('/')[0] not in node_tables])

if (invalid_from or invalid_to):
raise GraphQLError(f"Undefined Tables Referenced: {', '.join(invalid_from | invalid_to)}")

return graph if db.create_graph(graph, node_tables, edge_table) else None


Expand Down
320 changes: 320 additions & 0 deletions test/data/membership_invalid.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,320 @@
_from,_to
herewego/7,clubs/2
members/7,sas/3
neitherhere/8,northere/2
members/8,clubs/3
members/8,clubs/5
members/8,clubs/6
members/9,clubs/2
members/10,clubs/2
members/10,clubs/5
members/11,clubs/0
members/12,clubs/6
members/13,clubs/6
members/14,clubs/1
members/14,clubs/6
members/15,clubs/6
members/16,clubs/2
members/17,clubs/2
members/17,clubs/4
members/17,clubs/5
members/17,clubs/6
members/18,clubs/4
members/19,clubs/0
members/19,clubs/6
members/20,clubs/1
members/20,clubs/2
members/20,clubs/4
members/20,clubs/6
members/21,clubs/0
members/22,clubs/0
members/23,clubs/2
members/24,clubs/4
members/25,clubs/6
members/26,clubs/5
members/26,clubs/6
members/27,clubs/6
members/28,clubs/5
members/28,clubs/6
members/29,clubs/4
members/30,clubs/4
members/31,clubs/4
members/32,clubs/4
members/33,clubs/0
members/34,clubs/2
members/35,clubs/4
members/36,clubs/6
members/37,clubs/6
members/38,clubs/6
members/39,clubs/0
members/40,clubs/6
members/41,clubs/6
members/42,clubs/4
members/43,clubs/0
members/44,clubs/0
members/45,clubs/2
members/46,clubs/4
members/47,clubs/0
members/48,clubs/0
members/49,clubs/4
members/50,clubs/2
members/51,clubs/2
members/52,clubs/2
members/53,clubs/1
members/53,clubs/2
members/53,clubs/4
members/53,clubs/6
members/54,clubs/2
members/54,clubs/6
members/55,clubs/0
members/56,clubs/2
members/57,clubs/2
members/57,clubs/3
members/57,clubs/5
members/57,clubs/6
members/58,clubs/4
members/59,clubs/1
members/60,clubs/4
members/61,clubs/4
members/62,clubs/4
members/63,clubs/0
members/64,clubs/2
members/64,clubs/4
members/65,clubs/2
members/65,clubs/4
members/65,clubs/6
members/66,clubs/3
members/66,clubs/4
members/67,clubs/3
members/68,clubs/0
members/68,clubs/1
members/69,clubs/4
members/70,clubs/5
members/70,clubs/6
members/71,clubs/6
members/72,clubs/4
members/73,clubs/6
members/74,clubs/3
members/75,clubs/2
members/75,clubs/5
members/76,clubs/0
members/77,clubs/3
members/78,clubs/4
members/79,clubs/0
members/80,clubs/4
members/81,clubs/4
members/81,clubs/6
members/82,clubs/4
members/83,clubs/1
members/83,clubs/2
members/84,clubs/2
members/85,clubs/4
members/86,clubs/4
members/87,clubs/0
members/88,clubs/1
members/89,clubs/0
members/90,clubs/3
members/91,clubs/6
members/92,clubs/4
members/93,clubs/4
members/94,clubs/4
members/95,clubs/6
members/96,clubs/4
members/97,clubs/0
members/98,clubs/0
members/99,clubs/2
members/99,clubs/4
members/99,clubs/6
members/100,clubs/0
members/101,clubs/4
members/102,clubs/2
members/102,clubs/5
members/102,clubs/6
members/103,clubs/5
members/103,clubs/6
members/104,clubs/6
members/105,clubs/0
members/106,clubs/4
members/107,clubs/6
members/108,clubs/3
members/108,clubs/6
members/109,clubs/4
members/110,clubs/4
members/111,clubs/2
members/112,clubs/4
members/113,clubs/5
members/114,clubs/0
members/115,clubs/2
members/116,clubs/4
members/117,clubs/0
members/118,clubs/2
members/119,clubs/4
members/120,clubs/6
members/121,clubs/2
members/122,clubs/4
members/123,clubs/4
members/124,clubs/4
members/125,clubs/4
members/126,clubs/4
members/127,clubs/4
members/128,clubs/4
members/129,clubs/0
members/130,clubs/6
members/131,clubs/6
members/132,clubs/0
members/133,clubs/6
members/134,clubs/0
members/135,clubs/0
members/136,clubs/6
members/137,clubs/2
members/138,clubs/2
members/139,clubs/0
members/140,clubs/2
members/141,clubs/4
members/142,clubs/3
members/143,clubs/4
members/144,clubs/0
members/145,clubs/4
members/146,clubs/4
members/147,clubs/2
members/148,clubs/4
members/149,clubs/5
members/150,clubs/4
members/151,clubs/4
members/152,clubs/0
members/153,clubs/0
members/154,clubs/6
members/155,clubs/6
members/156,clubs/6
members/157,clubs/2
members/158,clubs/4
members/159,clubs/0
members/160,clubs/4
members/161,clubs/2
members/162,clubs/0
members/163,clubs/2
members/163,clubs/4
members/163,clubs/5
members/164,clubs/0
members/165,clubs/4
members/166,clubs/4
members/167,clubs/2
members/168,clubs/4
members/169,clubs/4
members/170,clubs/0
members/171,clubs/6
members/172,clubs/0
members/173,clubs/3
members/173,clubs/5
members/174,clubs/0
members/175,clubs/4
members/176,clubs/2
members/177,clubs/4
members/178,clubs/2
members/178,clubs/6
members/179,clubs/6
members/180,clubs/4
members/181,clubs/2
members/182,clubs/2
members/183,clubs/0
members/183,clubs/4
members/184,clubs/2
members/185,clubs/4
members/186,clubs/0
members/187,clubs/3
members/188,clubs/6
members/189,clubs/4
members/190,clubs/5
members/191,clubs/6
members/192,clubs/4
members/193,clubs/6
members/194,clubs/4
members/195,clubs/0
members/196,clubs/5
members/196,clubs/6
members/197,clubs/4
members/198,clubs/4
members/199,clubs/6
members/200,clubs/2
members/200,clubs/4
members/200,clubs/6
members/201,clubs/2
members/201,clubs/6
members/202,clubs/0
members/203,clubs/4
members/204,clubs/3
members/204,clubs/5
members/205,clubs/4
members/206,clubs/0
members/206,clubs/2
members/206,clubs/3
members/206,clubs/4
members/206,clubs/6
members/207,clubs/4
members/208,clubs/6
members/209,clubs/2
members/209,clubs/6
members/210,clubs/4
members/211,clubs/4
members/212,clubs/4
members/213,clubs/0
members/214,clubs/2
members/215,clubs/4
members/216,clubs/2
members/217,clubs/4
members/218,clubs/4
members/219,clubs/0
members/220,clubs/1
members/221,clubs/4
members/222,clubs/4
members/223,clubs/4
members/224,clubs/0
members/225,clubs/4
members/226,clubs/4
members/227,clubs/4
members/228,clubs/2
members/229,clubs/2
members/230,clubs/2
members/230,clubs/4
members/231,clubs/2
members/231,clubs/4
members/232,clubs/5
members/233,clubs/2
members/234,clubs/2
members/235,clubs/0
members/236,clubs/2
members/237,clubs/1
members/238,clubs/3
members/239,clubs/0
members/239,clubs/2
members/239,clubs/4
members/240,clubs/6
members/241,clubs/6
members/242,clubs/0
members/242,clubs/2
members/242,clubs/3
members/242,clubs/5
members/242,clubs/6
members/243,clubs/0
members/244,clubs/0
members/245,clubs/0
members/245,clubs/1
members/246,clubs/5
members/246,clubs/6
members/247,clubs/4
members/248,clubs/2
members/249,clubs/0
members/250,clubs/6
members/251,clubs/6
members/252,clubs/4
members/253,clubs/6
members/254,clubs/4
members/255,clubs/4
members/256,clubs/0
members/257,clubs/3
members/258,clubs/2
members/258,clubs/6
members/259,clubs/4
members/260,clubs/2
members/260,clubs/4
members/260,clubs/5

0 comments on commit e961c34

Please sign in to comment.