Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,6 +2,7 @@ import json
|
|
| 2 |
import os
|
| 3 |
import logging
|
| 4 |
import shutil
|
|
|
|
| 5 |
from fastapi import FastAPI, File, Query,Form, Request, HTTPException, UploadFile
|
| 6 |
from fastapi.responses import JSONResponse, RedirectResponse
|
| 7 |
from fastapi.staticfiles import StaticFiles
|
|
@@ -10,6 +11,10 @@ from fastapi.middleware.cors import CORSMiddleware
|
|
| 10 |
from dotenv import load_dotenv
|
| 11 |
import mysql.connector
|
| 12 |
from typing import List
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
# Load environment variables
|
| 15 |
load_dotenv()
|
|
@@ -52,8 +57,63 @@ DB_USER = 'u852023448_redmindgpt'
|
|
| 52 |
DB_PASSWORD = 'redmindGpt@123'
|
| 53 |
DB_HOST = '217.21.88.10'
|
| 54 |
DB_NAME = 'u852023448_redmindgpt'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
|
| 56 |
-
|
|
|
|
|
|
|
|
|
|
| 57 |
def get_db_connection():
|
| 58 |
try:
|
| 59 |
cnx = mysql.connector.connect(user=DB_USER, password=DB_PASSWORD, host=DB_HOST, database=DB_NAME)
|
|
@@ -207,6 +267,115 @@ async def get_companies():
|
|
| 207 |
logging.error(f"Database error: {err}")
|
| 208 |
raise HTTPException(status_code=500, detail="Internal Server Error")
|
| 209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
@app.get("/knowledgebase")
|
| 211 |
async def knowledgebase(request: Request):
|
| 212 |
return templates.TemplateResponse("knowledgebase.html", {"request": request,"title":"KnowledgeBase"})
|
|
@@ -262,9 +431,9 @@ async def get_document(company_id: str = Query(...), company_name: str = Query(.
|
|
| 262 |
cnx = get_db_connection()
|
| 263 |
cursor = cnx.cursor()
|
| 264 |
query = """
|
| 265 |
-
SELECT kb.company_id, kb.file_path, kb.document_name, kb.document_desc,kb.department,kb.version,kb.vectorDBflag,kb.last_updated
|
| 266 |
-
FROM
|
| 267 |
-
JOIN
|
| 268 |
WHERE kb.company_id = %s and cd.company_name=%s
|
| 269 |
"""
|
| 270 |
logging.info(f"Executing query: {query} with company_id: {company_id}")
|
|
@@ -279,15 +448,17 @@ async def get_document(company_id: str = Query(...), company_name: str = Query(.
|
|
| 279 |
cnx.close()
|
| 280 |
companies=[]
|
| 281 |
for row in result:
|
|
|
|
| 282 |
companies.append({
|
| 283 |
-
"
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
"
|
| 287 |
-
"
|
| 288 |
-
"
|
| 289 |
-
"
|
| 290 |
-
"
|
|
|
|
| 291 |
})
|
| 292 |
if companies:
|
| 293 |
return companies
|
|
@@ -298,6 +469,139 @@ async def get_document(company_id: str = Query(...), company_name: str = Query(.
|
|
| 298 |
logging.error(f"Database error: {err}")
|
| 299 |
raise HTTPException(status_code=500, detail="Internal Server Error")
|
| 300 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 301 |
@app.get("/data_connectors")
|
| 302 |
async def data_connectors(request: Request):
|
| 303 |
return templates.TemplateResponse("data_connectors.html", {"request": request, "title": "Data Connectors"})
|
|
|
|
| 2 |
import os
|
| 3 |
import logging
|
| 4 |
import shutil
|
| 5 |
+
import asyncpg
|
| 6 |
from fastapi import FastAPI, File, Query,Form, Request, HTTPException, UploadFile
|
| 7 |
from fastapi.responses import JSONResponse, RedirectResponse
|
| 8 |
from fastapi.staticfiles import StaticFiles
|
|
|
|
| 11 |
from dotenv import load_dotenv
|
| 12 |
import mysql.connector
|
| 13 |
from typing import List
|
| 14 |
+
from pydantic import BaseModel
|
| 15 |
+
import psycopg2
|
| 16 |
+
|
| 17 |
+
|
| 18 |
|
| 19 |
# Load environment variables
|
| 20 |
load_dotenv()
|
|
|
|
| 57 |
DB_PASSWORD = 'redmindGpt@123'
|
| 58 |
DB_HOST = '217.21.88.10'
|
| 59 |
DB_NAME = 'u852023448_redmindgpt'
|
| 60 |
+
from pydantic import BaseModel
|
| 61 |
+
class DatabaseConnection(BaseModel):
|
| 62 |
+
database_type: str
|
| 63 |
+
server: str
|
| 64 |
+
port: str
|
| 65 |
+
databaseName: str
|
| 66 |
+
username: str
|
| 67 |
+
password: str
|
| 68 |
+
@app.post("/api/connect")
|
| 69 |
+
async def connect_to_database(connection: DatabaseConnection):
|
| 70 |
+
try:
|
| 71 |
+
if connection.database_type == "postgres":
|
| 72 |
+
conn = psycopg2.connect(
|
| 73 |
+
host=connection.server,
|
| 74 |
+
port=connection.port,
|
| 75 |
+
database=connection.databaseName,
|
| 76 |
+
user=connection.username,
|
| 77 |
+
password=connection.password
|
| 78 |
+
)
|
| 79 |
+
query_schemas = "SELECT schema_name FROM information_schema.schemata"
|
| 80 |
+
query_tables = "SELECT table_name FROM information_schema.tables WHERE table_schema = %s"
|
| 81 |
+
elif connection.database_type == "mysql":
|
| 82 |
+
print(f"inside mysql",connection.server,connection.port,connection.databaseName,connection.username,connection.password)
|
| 83 |
+
conn = mysql.connector.connect(
|
| 84 |
+
host=connection.server,
|
| 85 |
+
port=connection.port,
|
| 86 |
+
database=connection.databaseName,
|
| 87 |
+
user=connection.username,
|
| 88 |
+
password=connection.password
|
| 89 |
+
)
|
| 90 |
+
query_schemas = "SELECT schema_name FROM information_schema.schemata"
|
| 91 |
+
query_tables = "SELECT table_name FROM information_schema.tables WHERE table_schema = %s"
|
| 92 |
+
else:
|
| 93 |
+
raise HTTPException(status_code=400, detail="Unsupported database type")
|
| 94 |
+
|
| 95 |
+
cursor = conn.cursor()
|
| 96 |
+
|
| 97 |
+
# Fetch all schemas
|
| 98 |
+
cursor.execute(query_schemas)
|
| 99 |
+
schemas = cursor.fetchall()
|
| 100 |
+
|
| 101 |
+
# Fetch all tables within each schema
|
| 102 |
+
schema_tables = {}
|
| 103 |
+
for schema in schemas:
|
| 104 |
+
cursor.execute(query_tables, (schema[0],))
|
| 105 |
+
tables = cursor.fetchall()
|
| 106 |
+
schema_tables[schema[0]] = [table[0] for table in tables]
|
| 107 |
+
|
| 108 |
+
cursor.close()
|
| 109 |
+
conn.close()
|
| 110 |
+
|
| 111 |
+
return {"schemas": [schema[0] for schema in schemas], "schema_tables": schema_tables, "success": True}
|
| 112 |
|
| 113 |
+
except Exception as e:
|
| 114 |
+
raise HTTPException(status_code=500, detail=str(e))
|
| 115 |
+
|
| 116 |
+
# Function to create a new database connection for MySQL (Example)
|
| 117 |
def get_db_connection():
|
| 118 |
try:
|
| 119 |
cnx = mysql.connector.connect(user=DB_USER, password=DB_PASSWORD, host=DB_HOST, database=DB_NAME)
|
|
|
|
| 267 |
logging.error(f"Database error: {err}")
|
| 268 |
raise HTTPException(status_code=500, detail="Internal Server Error")
|
| 269 |
|
| 270 |
+
#to view the details
|
| 271 |
+
@app.get("/api/getcompanydetails/{company_id}")
|
| 272 |
+
async def get_company_details(company_id: int):
|
| 273 |
+
company = await get_company_from_db(company_id)
|
| 274 |
+
if not company:
|
| 275 |
+
raise HTTPException(status_code=404, detail="Company not found")
|
| 276 |
+
return company
|
| 277 |
+
|
| 278 |
+
async def get_company_from_db(company_id: int):
|
| 279 |
+
try:
|
| 280 |
+
# Establish a connection to the database
|
| 281 |
+
cnx = get_db_connection()
|
| 282 |
+
if cnx is None:
|
| 283 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 284 |
+
cursor = cnx.cursor(dictionary=True)
|
| 285 |
+
query = "SELECT * FROM company_detail WHERE company_id = %s"
|
| 286 |
+
cursor.execute(query, (company_id,))
|
| 287 |
+
company = cursor.fetchone()
|
| 288 |
+
cursor.close()
|
| 289 |
+
cnx.close()
|
| 290 |
+
return company
|
| 291 |
+
except mysql.connector.Error as err:
|
| 292 |
+
logging.error(f"Error fetching company: {err}")
|
| 293 |
+
raise HTTPException(status_code=500, detail="Failed to fetch company")
|
| 294 |
+
# to edit the details
|
| 295 |
+
@app.put("/api/putcompanydetails/{company_id}")
|
| 296 |
+
async def update_company_details(company_id: int,
|
| 297 |
+
company_name: str = Form(...),
|
| 298 |
+
company_code: str = Form(...),
|
| 299 |
+
domain: str = Form(...),
|
| 300 |
+
llm_tools: List[str] = Form(...)):
|
| 301 |
+
print(f"Received company_id",company_id) # Debug statement
|
| 302 |
+
logging.info(f"Received request for company data")
|
| 303 |
+
company_data = {
|
| 304 |
+
'company_name': company_name,
|
| 305 |
+
'company_code': company_code,
|
| 306 |
+
'domain': domain,
|
| 307 |
+
'llm_tools': ','.join(llm_tools)
|
| 308 |
+
}
|
| 309 |
+
updated_company = await update_company_in_db(company_id, company_data)
|
| 310 |
+
if not updated_company:
|
| 311 |
+
raise HTTPException(status_code=500, detail="Failed to update company")
|
| 312 |
+
return updated_company
|
| 313 |
+
|
| 314 |
+
async def update_company_in_db(company_id: int, company_data: dict):
|
| 315 |
+
try:
|
| 316 |
+
print(f"Received company_nid inside function",company_id) # Debug statement
|
| 317 |
+
logging.info(f"Received request for company name")
|
| 318 |
+
cnx = get_db_connection()
|
| 319 |
+
if cnx is None:
|
| 320 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 321 |
+
cursor = cnx.cursor()
|
| 322 |
+
update_query = """
|
| 323 |
+
UPDATE redmind_gpt.company_detail cd
|
| 324 |
+
SET cd.company_name = %s, cd.company_code = %s, cd.domain = %s, cd.llm_tools = %s
|
| 325 |
+
WHERE cd.company_id = %s;
|
| 326 |
+
"""
|
| 327 |
+
logging.info(f"Executing query: {update_query} with company_id: {company_id}")
|
| 328 |
+
params = (company_id,company_data)
|
| 329 |
+
logging.info(f"Query parameters: {params}")
|
| 330 |
+
print(f"Query parameters: {params}")
|
| 331 |
+
|
| 332 |
+
|
| 333 |
+
cursor.execute(update_query, (
|
| 334 |
+
company_data['company_name'],
|
| 335 |
+
company_data['company_code'],
|
| 336 |
+
company_data['domain'],
|
| 337 |
+
company_data['llm_tools'],
|
| 338 |
+
company_id
|
| 339 |
+
))
|
| 340 |
+
|
| 341 |
+
cnx.commit()
|
| 342 |
+
success = cursor.rowcount > 0
|
| 343 |
+
cursor.close()
|
| 344 |
+
cnx.close()
|
| 345 |
+
if not success:
|
| 346 |
+
return None
|
| 347 |
+
return company_data
|
| 348 |
+
except mysql.connector.Error as err:
|
| 349 |
+
logging.error(f"Error updating company: {err}")
|
| 350 |
+
raise HTTPException(status_code=500, detail="Failed to update company")
|
| 351 |
+
|
| 352 |
+
|
| 353 |
+
def delete_company_from_db(company_id: int) -> bool:
|
| 354 |
+
print(f"Received company_name: {company_id}") # Debug statement
|
| 355 |
+
logging.info(f"Received request for company name: {company_id}")
|
| 356 |
+
try:
|
| 357 |
+
# Establish a connection to the database
|
| 358 |
+
cnx = get_db_connection()
|
| 359 |
+
if cnx is None:
|
| 360 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 361 |
+
cursor = cnx.cursor()
|
| 362 |
+
delete_query = "DELETE FROM company_detail WHERE company_id = %s"
|
| 363 |
+
cursor.execute(delete_query, (company_id,))
|
| 364 |
+
cnx.commit()
|
| 365 |
+
success = cursor.rowcount > 0
|
| 366 |
+
cursor.close()
|
| 367 |
+
cnx.close()
|
| 368 |
+
return success
|
| 369 |
+
except mysql.connector.Error as err:
|
| 370 |
+
logging.error(f"Error deleting company: {err}")
|
| 371 |
+
raise HTTPException(status_code=500, detail="Failed to delete company")
|
| 372 |
+
@app.delete("/api/delcompanydetails/{company_id}")
|
| 373 |
+
async def delete_company(company_id: int):
|
| 374 |
+
deletion_success = delete_company_from_db(company_id)
|
| 375 |
+
if not deletion_success:
|
| 376 |
+
raise HTTPException(status_code=404, detail="Company not found or failed to delete")
|
| 377 |
+
return {"message": "Company deleted successfully"}
|
| 378 |
+
|
| 379 |
@app.get("/knowledgebase")
|
| 380 |
async def knowledgebase(request: Request):
|
| 381 |
return templates.TemplateResponse("knowledgebase.html", {"request": request,"title":"KnowledgeBase"})
|
|
|
|
| 431 |
cnx = get_db_connection()
|
| 432 |
cursor = cnx.cursor()
|
| 433 |
query = """
|
| 434 |
+
SELECT kb.kid,kb.company_id, kb.file_path, kb.document_name, kb.document_desc,kb.department,kb.version,kb.vectorDBflag,kb.last_updated
|
| 435 |
+
FROM redmind_gpt.knowledge_base kb
|
| 436 |
+
JOIN redmind_gpt.company_detail cd ON kb.company_id = cd.company_id
|
| 437 |
WHERE kb.company_id = %s and cd.company_name=%s
|
| 438 |
"""
|
| 439 |
logging.info(f"Executing query: {query} with company_id: {company_id}")
|
|
|
|
| 448 |
cnx.close()
|
| 449 |
companies=[]
|
| 450 |
for row in result:
|
| 451 |
+
|
| 452 |
companies.append({
|
| 453 |
+
"row_id":row[0],
|
| 454 |
+
"company_id": row[1],
|
| 455 |
+
#"file_path":row[2],
|
| 456 |
+
"document_name": row[3],
|
| 457 |
+
"document_desc": row[4],
|
| 458 |
+
"department": row[5],
|
| 459 |
+
"version": row[6],
|
| 460 |
+
"vectorDBflag":row[7],
|
| 461 |
+
"last_updated": row[8]
|
| 462 |
})
|
| 463 |
if companies:
|
| 464 |
return companies
|
|
|
|
| 469 |
logging.error(f"Database error: {err}")
|
| 470 |
raise HTTPException(status_code=500, detail="Internal Server Error")
|
| 471 |
|
| 472 |
+
#to get data for view in knowledgebase
|
| 473 |
+
@app.get("/api/getknowledgebase/{company_id}")
|
| 474 |
+
async def get_company_details(company_id: int):
|
| 475 |
+
company = await get_knowledge_from_db(company_id)
|
| 476 |
+
if not company:
|
| 477 |
+
raise HTTPException(status_code=404, detail="Company not found")
|
| 478 |
+
return company
|
| 479 |
+
|
| 480 |
+
async def get_knowledge_from_db(company_id: int):
|
| 481 |
+
try:
|
| 482 |
+
# Establish a connection to the database
|
| 483 |
+
cnx = get_db_connection()
|
| 484 |
+
if cnx is None:
|
| 485 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 486 |
+
cursor = cnx.cursor(dictionary=True)
|
| 487 |
+
query = "SELECT * FROM knowledge_base WHERE kid = %s"
|
| 488 |
+
cursor.execute(query, (company_id,))
|
| 489 |
+
company = cursor.fetchone()
|
| 490 |
+
cursor.close()
|
| 491 |
+
cnx.close()
|
| 492 |
+
if company:
|
| 493 |
+
logging.debug(f"Extracted filename")
|
| 494 |
+
if company.get('file_path'):
|
| 495 |
+
company['file_path'] = os.path.basename(company['file_path'])
|
| 496 |
+
logging.debug(f"Extracted filename: {company['file_path']}")
|
| 497 |
+
return company
|
| 498 |
+
else:
|
| 499 |
+
raise HTTPException(status_code=404, detail="Company not found or file not found for the company")
|
| 500 |
+
except mysql.connector.Error as err:
|
| 501 |
+
logging.error(f"Error fetching company: {err}")
|
| 502 |
+
raise HTTPException(status_code=500, detail="Failed to fetch company")
|
| 503 |
+
|
| 504 |
+
# to edit the knowledgebase details
|
| 505 |
+
@app.put("/api/putknowledgebase/{kid}")
|
| 506 |
+
async def update_company_details(
|
| 507 |
+
kid: int,
|
| 508 |
+
company_id: str = Form(...),
|
| 509 |
+
# file_name: str = Form(...),
|
| 510 |
+
documentName: str = Form(...),
|
| 511 |
+
documentDescription: str = Form(...),
|
| 512 |
+
department: str = Form(...),
|
| 513 |
+
version: str = Form(...),
|
| 514 |
+
vectorDBFlag: str = Form(...),
|
| 515 |
+
lastUpdated: str = Form(...)):
|
| 516 |
+
logging.info(f"Received request for company data with ID: {kid}")
|
| 517 |
+
|
| 518 |
+
# upload_folder = "uploads/"
|
| 519 |
+
# os.makedirs(upload_folder, exist_ok=True)
|
| 520 |
+
# file_path = os.path.join(upload_folder, uploadFile.filename)
|
| 521 |
+
|
| 522 |
+
# with open(file_path, "wb") as buffer:
|
| 523 |
+
# shutil.copyfileobj(uploadFile.file, buffer)
|
| 524 |
+
|
| 525 |
+
company_data = {
|
| 526 |
+
'company_id': company_id,
|
| 527 |
+
#'file_path': file_name,
|
| 528 |
+
'document_name': documentName,
|
| 529 |
+
'document_desc': documentDescription,
|
| 530 |
+
'department': department,
|
| 531 |
+
'version': version,
|
| 532 |
+
'vectorDBflag': vectorDBFlag,
|
| 533 |
+
'last_updated': lastUpdated
|
| 534 |
+
}
|
| 535 |
+
|
| 536 |
+
updated_company = await update_knowledge_in_db(kid, company_data)
|
| 537 |
+
if not updated_company:
|
| 538 |
+
raise HTTPException(status_code=500, detail="Failed to update company")
|
| 539 |
+
return updated_company
|
| 540 |
+
async def update_knowledge_in_db(kid: int, company_data: dict):
|
| 541 |
+
try:
|
| 542 |
+
logging.info(f"Updating knowledge base for ID: {kid}")
|
| 543 |
+
cnx = get_db_connection()
|
| 544 |
+
if cnx is None:
|
| 545 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 546 |
+
|
| 547 |
+
cursor = cnx.cursor()
|
| 548 |
+
update_query = """
|
| 549 |
+
UPDATE redmind_gpt.knowledge_base kb
|
| 550 |
+
SET kb.company_id,kb.document_name=%s, kb.document_desc=%s, kb.department=%s, kb.version=%s, kb.vectorDBflag=%s, kb.last_updated=%s
|
| 551 |
+
WHERE kb.kid = %s;
|
| 552 |
+
"""
|
| 553 |
+
cursor.execute(update_query, (
|
| 554 |
+
company_data['company_id'],
|
| 555 |
+
# company_data['file_path'],
|
| 556 |
+
company_data['document_name'],
|
| 557 |
+
company_data['document_desc'],
|
| 558 |
+
company_data['department'],
|
| 559 |
+
company_data['version'],
|
| 560 |
+
company_data['vectorDBflag'],
|
| 561 |
+
company_data['last_updated'],
|
| 562 |
+
kid
|
| 563 |
+
))
|
| 564 |
+
|
| 565 |
+
cnx.commit()
|
| 566 |
+
success = cursor.rowcount > 0
|
| 567 |
+
cursor.close()
|
| 568 |
+
cnx.close()
|
| 569 |
+
if not success:
|
| 570 |
+
return None
|
| 571 |
+
return company_data
|
| 572 |
+
except mysql.connector.Error as err:
|
| 573 |
+
logging.error(f"Error updating company: {err}")
|
| 574 |
+
raise HTTPException(status_code=500, detail="Failed to update company")
|
| 575 |
+
|
| 576 |
+
|
| 577 |
+
def delete_knowledge_from_db(company_id: int) -> bool:
|
| 578 |
+
print(f"Received knowledge base company_id: {company_id}") # Debug statement
|
| 579 |
+
logging.info(f"Received request for knowledgebase company id: {company_id}")
|
| 580 |
+
try:
|
| 581 |
+
# Establish a connection to the database
|
| 582 |
+
cnx = get_db_connection()
|
| 583 |
+
if cnx is None:
|
| 584 |
+
raise HTTPException(status_code=500, detail="Failed to connect to the database")
|
| 585 |
+
cursor = cnx.cursor()
|
| 586 |
+
delete_query = "DELETE FROM knowledge_base WHERE kid = %s"
|
| 587 |
+
cursor.execute(delete_query, (company_id,))
|
| 588 |
+
cnx.commit()
|
| 589 |
+
success = cursor.rowcount > 0
|
| 590 |
+
cursor.close()
|
| 591 |
+
cnx.close()
|
| 592 |
+
return success
|
| 593 |
+
except mysql.connector.Error as err:
|
| 594 |
+
logging.error(f"Error deleting company: {err}")
|
| 595 |
+
raise HTTPException(status_code=500, detail="Failed to delete company")
|
| 596 |
+
|
| 597 |
+
@app.delete("/api/delknowledgebase/{company_id}")
|
| 598 |
+
async def delete_company(company_id: int):
|
| 599 |
+
deletion_success = delete_knowledge_from_db(company_id)
|
| 600 |
+
if not deletion_success:
|
| 601 |
+
raise HTTPException(status_code=404, detail="Company not found or failed to delete")
|
| 602 |
+
return {"message": "Company deleted successfully"}
|
| 603 |
+
|
| 604 |
+
|
| 605 |
@app.get("/data_connectors")
|
| 606 |
async def data_connectors(request: Request):
|
| 607 |
return templates.TemplateResponse("data_connectors.html", {"request": request, "title": "Data Connectors"})
|