Initial commit
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
load_dotenv(find_dotenv())
|
||||
import os
|
||||
import modules.logger_tool as logger
|
||||
log_name = 'api_modules_database_tools_neo4j_http_tools'
|
||||
log_dir = os.getenv("LOG_PATH", "/logs") # Default path as fallback
|
||||
logging = logger.get_logger(
|
||||
name=log_name,
|
||||
log_level=os.getenv("LOG_LEVEL", "DEBUG"),
|
||||
log_path=log_dir,
|
||||
log_file=log_name,
|
||||
runtime=True,
|
||||
log_format='default'
|
||||
)
|
||||
import requests
|
||||
import base64
|
||||
|
||||
dev_mode = os.getenv('DEV_MODE', 'false')
|
||||
|
||||
def send_query(query, encoded_credentials=None, params=None, method='POST', database="system", endpoint="/tx/commit"):
|
||||
if encoded_credentials is None:
|
||||
logging.debug(f"Sending query to Neo4j: {query}")
|
||||
credentials = f"{os.getenv('USER_NEO4J')}:{os.getenv('PASSWORD_NEO4J')}"
|
||||
encoded_credentials = base64.b64encode(credentials.encode()).decode('utf-8')
|
||||
logging.debug(f"Encoded credentials: {encoded_credentials}")
|
||||
|
||||
# Use HTTPS for production, HTTP for development
|
||||
neo4j_url = f"{os.getenv('APP_GRAPH_URL')}/db/{database}{endpoint}"
|
||||
logging.debug(f"URL: {neo4j_url}")
|
||||
headers = {'Content-Type': 'application/json', 'Authorization': f'Basic {encoded_credentials}'}
|
||||
logging.debug(f"Headers: {headers}")
|
||||
data = {
|
||||
"statements": [{
|
||||
"statement": query,
|
||||
"parameters": params or {}
|
||||
}]
|
||||
}
|
||||
logging.debug(f"Data: {data}")
|
||||
|
||||
try:
|
||||
logging.debug(f"Sending request to Neo4j...")
|
||||
response = requests.request(method, neo4j_url, json=data, headers=headers)
|
||||
response.raise_for_status() # Raise an HTTPError for bad responses
|
||||
logging.debug(f"Response status code: {response.status_code}")
|
||||
logging.debug(f"Response content: {response.content}")
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
logging.error(f"Request to Neo4j failed: {e}")
|
||||
raise
|
||||
|
||||
def create_node(node_type: str, node_data: dict, db=None):
|
||||
query = f"CREATE (n:{node_type} $props) RETURN id(n)"
|
||||
params = {"props": node_data}
|
||||
response = send_query(query, database=db, params=params)
|
||||
return response['results'][0]['data'][0]['meta'][0]['id']
|
||||
|
||||
def create_relationship(relationship_data: dict, db=None):
|
||||
query = """
|
||||
MATCH (a), (b) WHERE id(a) = $start_id AND id(b) = $end_id
|
||||
CREATE (a)-[r:{rel_type}]->(b)
|
||||
RETURN r
|
||||
"""
|
||||
params = {"start_id": relationship_data['start_node']['id'], "end_id": relationship_data['end_node']['id'], "rel_type": relationship_data['relationship_type'], "props": relationship_data.get('properties', {})}
|
||||
return send_query("/db/neo4j/tx/commit", query, params, db=db)
|
||||
Reference in New Issue
Block a user