99import os
1010import json
1111import csv
12+ import traceback
1213from fastapi .responses import JSONResponse
1314from fastapi .encoders import jsonable_encoder
1415load_dotenv ()
1819# password = os.environ.get('NEO4J_PASSWORD')
1920graph = 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
84100def 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