Skip to content

Commit

Permalink
Merge pull request #1 from jclock98/cli_EER
Browse files Browse the repository at this point in the history
Merge EER commands into AAD
  • Loading branch information
jclock98 authored Nov 23, 2023
2 parents b34ec81 + e30d790 commit bfe9851
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 95 deletions.
85 changes: 54 additions & 31 deletions routes/elements.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from flask import Blueprint, request

import click
from prov.model import ProvDocument
from py2neo.matching import NodeMatcher

import json,sys
from extensions import neo4j

from .utils import (
Expand All @@ -14,22 +14,25 @@
set_document_ns
)


elements_bp = Blueprint('elements', __name__)

# Create
@elements_bp.route('', methods=['POST'])
def create_element(doc_id):
@elements_bp.cli.command('create')
@click.argument("doc_id")
@click.argument("file", type=click.Path(exists=True))
def create_element(doc_id,file):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# create ProvDocument and add namespaces
prov_document = ProvDocument()
Expand All @@ -38,29 +41,36 @@ def create_element(doc_id):
set_document_ns(ns_node, prov_document)

# parsing
prov_element = json_to_prov_record(request.json, prov_document)
with open(file,"r") as fp:
data = json.load(fp)
prov_element = json_to_prov_record(data, prov_document)
node = prov_element_to_node(prov_element)

try:
graph.create(node)
except:
return "DB error", 500
print("DB error")
sys.exit()

return "Element created", 201
print("Element created")

# Read
@elements_bp.route('/<string:e_id>', methods=['GET'])
@elements_bp.cli.command('get')
@click.argument("doc_id")
@click.argument("e_id")
def get_element(doc_id, e_id):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# check if element is in document
try:
Expand All @@ -69,9 +79,9 @@ def get_element(doc_id, e_id):
node = node_matcher.match(id=e_id).first()
assert(node)
except AssertionError:
return "Element not found", 404
print("Element not found")
sys.exit()


# create ProvDocument and add namespaces
prov_document = ProvDocument()
node_matcher = NodeMatcher(graph)
Expand All @@ -80,21 +90,26 @@ def get_element(doc_id, e_id):

prov_element = node_to_prov_element(node, prov_document)

return prov_element_to_json(prov_element)
print(prov_element_to_json(prov_element))

# Update
@elements_bp.route('/<string:e_id>', methods=['PUT'])
def replace_element(doc_id, e_id):
@elements_bp.cli.command('update')
@click.argument("doc_id")
@click.argument("e_id")
@click.argument("file", type=click.Path(exists=True))
def replace_element(doc_id, e_id,file):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# match the node
node_matcher = NodeMatcher(graph)
Expand All @@ -108,7 +123,9 @@ def replace_element(doc_id, e_id):
set_document_ns(ns_node, prov_document)

# parsing
prov_element = json_to_prov_record(request.json, prov_document)
with open(file,"r") as fp:
data = json.load(fp)
prov_element = json_to_prov_record(data, prov_document)
input_node = prov_element_to_node(prov_element)

# if exist then update else create
Expand All @@ -118,29 +135,33 @@ def replace_element(doc_id, e_id):
node[key]=value

graph.push(node)

return "Element updated", 200
print("Element updated")
else:
try:
graph.create(input_node)
except:
return "DB error", 500
print("DB error")
sys.exit()

return "Element created", 201
print("Element created")

# Delete
@elements_bp.route('/<string:e_id>', methods=['DELETE'])
@elements_bp.cli.command('delete')
@click.argument("doc_id")
@click.argument("e_id")
def delete_element(doc_id, e_id):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# check if element is in document
try:
Expand All @@ -150,11 +171,13 @@ def delete_element(doc_id, e_id):
node = node_matcher.match(id=e_id).first()
assert(node)
except AssertionError:
return "Element not found", 404
print("Element not found")
sys.exit()

try:
graph.delete(node)
except AssertionError:
return "DB error", 500
print("DB error")
sys.exit()

return "Element deleted", 200
print("Element deleted")
86 changes: 58 additions & 28 deletions routes/entities.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from flask import Blueprint, request

import click
from prov.model import ProvDocument
from py2neo.matching import NodeMatcher

import json,sys
from extensions import neo4j

from .utils import (
Expand All @@ -18,18 +18,22 @@
entities_bp = Blueprint('entities', __name__)

# Create
@entities_bp.route('', methods=['POST'])
def create_entity(doc_id):
@entities_bp.cli.command('create')
@click.argument("doc_id")
@click.argument("file", type=click.Path(exists=True))
def create_entity(doc_id,file):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# create ProvDocument and add namespaces
prov_document = ProvDocument()
Expand All @@ -38,29 +42,39 @@ def create_entity(doc_id):
set_document_ns(ns_node, prov_document)

# parsing
prov_element = json_to_prov_record(request.json, prov_document)
with open(file,"r") as fp:
data = json.load(fp)

#prov_element = json_to_prov_record(request.json, prov_document)
prov_element = json_to_prov_record(data, prov_document)
node = prov_element_to_node(prov_element)

try:
graph.create(node)
except:
return "DB error", 500
print("DB error")
sys.exit()

return "Entity created", 201
print("Element created")

# Read
@entities_bp.route('/<string:e_id>', methods=['GET'])
#@entities_bp.route('/<string:e_id>', methods=['GET'])
@entities_bp.cli.command('get')
@click.argument("doc_id")
@click.argument("e_id")
def get_entity(doc_id, e_id):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# check if element is in document
try:
Expand All @@ -69,7 +83,8 @@ def get_entity(doc_id, e_id):
node = node_matcher.match('Entity', id=e_id).first()
assert(node)
except AssertionError:
return "Entity not found", 404
print("Entity not found")
sys.exit()

# create ProvDocument and add namespaces
prov_document = ProvDocument()
Expand All @@ -79,21 +94,26 @@ def get_entity(doc_id, e_id):

prov_element = node_to_prov_element(node, prov_document)

return prov_element_to_json(prov_element)
print(prov_element_to_json(prov_element))

# Update
@entities_bp.route('/<string:e_id>', methods=['PUT'])
def replace_entity(doc_id, e_id):
@entities_bp.cli.command('update')
@click.argument("doc_id")
@click.argument("e_id")
@click.argument("file")
def replace_entity(doc_id, e_id,file):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# match the node
node_matcher = NodeMatcher(graph)
Expand All @@ -107,7 +127,10 @@ def replace_entity(doc_id, e_id):
set_document_ns(ns_node, prov_document)

# parsing
prov_element = json_to_prov_record(request.json, prov_document)
with open(file,"r") as fp:
data = json.load(fp)

prov_element = json_to_prov_record(data, prov_document)
input_node = prov_element_to_node(prov_element)

# if exist then update else create
Expand All @@ -118,28 +141,33 @@ def replace_entity(doc_id, e_id):

graph.push(node)

return "Entity updated", 200
print("Entity updated")
else:
try:
graph.create(input_node)
except:
return "DB error", 500
print("DB error")
sys.exit()

return "Entity created", 201
print("Entity created")

# Delete
@entities_bp.route('/<string:e_id>', methods=['DELETE'])
@entities_bp.cli.command('delete')
@click.argument("doc_id")
@click.argument("e_id")
def delete_entity(doc_id, e_id):
try:
graph = neo4j.get_db(doc_id)
except:
return "DB error", 500
print("DB error")
sys.exit()

# check if document is in neo4j
try:
assert graph
except AssertionError:
return "Document not found", 404
print("Document not found")
sys.exit()

# check if element is in document
try:
Expand All @@ -149,11 +177,13 @@ def delete_entity(doc_id, e_id):
# node = node_matcher.match(id=e_id).first()
assert(node)
except AssertionError:
return "Element not found", 404
print("Element not found")
sys.exit()

try:
graph.delete(node)
except AssertionError:
return "DB error", 500
print("DB error")
sys.exit()

return "Element deleted", 200
print("Element deleted")
Loading

0 comments on commit bfe9851

Please sign in to comment.