Skip to content

Commit e04c6d2

Browse files
create souces api and cleanup code
1 parent 31e815a commit e04c6d2

File tree

2 files changed

+54
-21
lines changed

2 files changed

+54
-21
lines changed

backend/score.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def sick():
2626
)
2727
app.add_api_route("/health", health([healthy_condition, healthy]))
2828

29+
@app.post('/sources')
30+
async def create_source_knowledge_graph(uri= Form(), userName= Form(), password= Form(),file: UploadFile = File(...)):
31+
return create_source_node_graph(uri, userName, password, file)
2932

3033
@app.post('/extract')
3134
async def extract_knowledge_graph_from_file(uri= Form(), userName= Form(), password= Form(),file: UploadFile = File(...)):

backend/src/main.py

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import os
1010
import json
1111
import csv
12+
import traceback
1213
from fastapi.responses import JSONResponse
1314
from fastapi.encoders import jsonable_encoder
1415
load_dotenv()
@@ -18,26 +19,39 @@
1819
# password = os.environ.get('NEO4J_PASSWORD')
1920
graph = Neo4jGraph();
2021

21-
22-
def extract_graph_from_file(uri, userName, password, file):
22+
def create_source_node_graph(uri, userName, password, file):
2323
try:
2424
start_time = datetime.now()
25-
job_status = "In-Progess"
25+
job_status = "New"
2626
file_type = file.filename.split('.')[1]
2727
file_size = round(file.size/(1<<10), 2)
2828
file_name = file.filename
2929

30+
graph = Neo4jGraph(url=uri, username=userName, password=password)
31+
32+
source_node = "fileName: '{}'"
33+
update_node_prop = "SET s.fileSize = '{} KB', s.fileType = '{}' ,s.createdAt ='{}',s.status = '{}'"
34+
#create source node as file name if not exist
35+
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(file_size,file_type,start_time,job_status))
36+
return create_api_response("Success",data="Source Node created succesfully")
37+
except Exception as e:
38+
job_status = "Failure"
39+
error_message = str(e)
40+
update_node_prop = "SET s.status = '{}', s.errorMessgae = '{}'"
41+
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(job_status,error_message))
42+
print(f'Exception Stack trace: {traceback.print_exc()}')
43+
return create_api_response(job_status,error=error_message)
44+
45+
def extract_graph_from_file(uri, userName, password, file):
46+
try:
47+
start_time = datetime.now()
48+
file_name = file.filename
3049
diffbot_api_key = os.environ.get('DIFFBOT_API_KEY')
3150
diffbot_nlp = DiffbotGraphTransformer(diffbot_api_key=diffbot_api_key)
3251

3352
graph = Neo4jGraph(url=uri, username=userName, password=password)
3453

3554
metadata = {"source": "local","filename": file.filename, "filesize":file.size }
36-
37-
source_node = "fileName: '{}'"
38-
update_node_prop = "SET s.fileSize = '{} KB', s.fileType = '{}' ,s.createdAt ='{}',s.status = '{}',s.nodeCount= 0, s.relationshipCount = 0"
39-
#create source node as file name if not exist
40-
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(file_size,file_type,start_time,job_status))
4155

4256
with open('temp.pdf','wb') as f:
4357
f.write(file.file.read())
@@ -61,33 +75,49 @@ def extract_graph_from_file(uri, userName, password, file):
6175
job_status = "Completed"
6276
error_message =""
6377

64-
update_node_prop = "SET s.fileSize = '{} KB', s.fileType = '{}' ,s.createdAt ='{}', s.updatedAt = '{}', s.processingTime = '{}',s.status = '{}', s.errorMessgae = '{}',s.nodeCount= {}, s.relationshipCount = {}"
65-
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(file_size,file_type,start_time,end_time,round(processed_time.total_seconds(),2),job_status,error_message,nodes_created,relationships_created))
78+
source_node = "fileName: '{}'"
79+
update_node_prop = "SET s.createdAt ='{}', s.updatedAt = '{}', s.processingTime = '{}',s.status = '{}', s.errorMessgae = '{}',s.nodeCount= {}, s.relationshipCount = {}"
80+
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(start_time,end_time,round(processed_time.total_seconds(),2),job_status,error_message,nodes_created,relationships_created))
6681

6782
output = {
68-
"fileSize": file_size,
83+
"fileName": file_name,
6984
"nodeCount": nodes_created,
7085
"relationshipCount": relationships_created,
7186
"processingTime": round(processed_time.total_seconds(),2),
7287
"status" : job_status
7388
}
7489

75-
return JSONResponse(content=jsonable_encoder(output))
90+
# return JSONResponse(content=jsonable_encoder(output))
91+
return create_api_response("Success",data=output)
7692
except Exception as e:
77-
job_status = "Failed"
93+
job_status = "Failure"
7894
error_message = str(e)
7995
update_node_prop = "SET s.status = '{}', s.errorMessgae = '{}'"
8096
graph.query('MERGE(s:Source {'+source_node.format(file_name)+'}) '+update_node_prop.format(job_status,error_message))
81-
print(f'Unexpected Error: {str(e)[:200]}')
82-
return f'Unexpected Error: {str(e)[:200]}'
97+
print(f'Exception Stack trace: {traceback.print_exc()}')
98+
return create_api_response(job_status,error=error_message)
8399

84100
def get_source_list_from_graph():
85-
query = "MATCH(s:Source) RETURN s ORDER BY s.updatedAt DESC;"
86-
result = graph.query(query)
87-
list_of_json_objects = [entry['s'] for entry in result]
88-
# Print the final result
89-
# print(list_of_json_objects)
90-
return list_of_json_objects
101+
try:
102+
query = "MATCH(s:Source) RETURN s ORDER BY s.updatedAt DESC;"
103+
result = graph.query(query)
104+
list_of_json_objects = [entry['s'] for entry in result]
105+
return create_api_response("Success",data=list_of_json_objects)
106+
except Exception as e:
107+
job_status = "Failure"
108+
error_message = str(e)
109+
return create_api_response(job_status,error=error_message)
110+
111+
def create_api_response(status, data=None, error=None):
112+
response = {"status": status}
113+
114+
if data is not None:
115+
response["data"] = data
116+
117+
if error is not None:
118+
response["error"] = error
119+
120+
return response
91121

92122
# chain = GraphCypherQAChain.from_llm(
93123
# cypher_llm=ChatOpenAI(temperature=0, model_name="gpt-4"),

0 commit comments

Comments
 (0)