| | from fastapi import FastAPI |
| | import uvicorn |
| | from fastapi.middleware.cors import CORSMiddleware |
| | from fastapi import FastAPI, File, UploadFile, HTTPException |
| | from fastapi.responses import JSONResponse |
| | from typing import Annotated |
| | import os |
| | import shutil |
| | from typing import List |
| | from pydantic import BaseModel |
| | from api_connection.apiConnection import Create_Service |
| | from comparator.report import ( |
| | AddReport, |
| | CheckFolders, |
| | DeleteReport, |
| | ) |
| | import json |
| | import asyncio |
| | from concurrent.futures import ThreadPoolExecutor |
| | from api_connection.apiConnection import token_file_exists |
| | from comparator.summerized import AddSummary, DeleteSummary, Get_All_Reports |
| |
|
| | from api_connection.apiConnection import removeAccount |
| | import uuid |
| | from comparator.text_summerizer.summerize2 import Summerized_Text |
| | from comparator.extract.extract import extract_text_from_pdf |
| |
|
| | from comparator.compareSummerized import compareText |
| |
|
| | from token_operation.driveToken import Delete_Drive_Token, Create_Drive_Token |
| | from token_operation.tokenOperation import Create_Token_Drive, Delete_Token_File, Expire_Token_File |
| |
|
| | from pydantic import BaseModel |
| | class AccountInfo(BaseModel): |
| | oldName: str |
| | newName: str |
| |
|
| |
|
| | """ |
| | Folder Path in drive would be: |
| | Fake/reports |
| | Fake/summerized |
| | |
| | """ |
| |
|
| | class IDRequest(BaseModel): |
| | ids: List[str] |
| |
|
| | global API_VERSION, CLIENT_FILE_NAME, API_DRIVE, SCOPES |
| | CLIENT_FILE_NAME = "./client_secret.json" |
| | API_DRIVE = "drive" |
| | API_VERSION = "v3" |
| | SCOPES = ["https://www.googleapis.com/auth/drive"] |
| |
|
| | app = FastAPI(docs_url="/api/docs", openapi_url="/api/openapi.json") |
| | app.add_middleware( |
| | CORSMiddleware, |
| | allow_origins=["*"], |
| | allow_credentials=True, |
| | allow_methods=["*"], |
| | allow_headers=["*"], |
| | ) |
| | class AccountCheck(BaseModel): |
| | name: str |
| |
|
| | @app.post("/api/isLogin") |
| | async def is_login(request: AccountCheck): |
| | try: |
| | global services |
| | services, name = Create_Token_Drive(request.name) |
| | if services: |
| | return {"message": "Successfully logged in", "data": name, "status":"success"} |
| | else: |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| | except Exception as e: |
| | print(f"An error occurred: {e}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| | |
| | @app.get("/api/check-working") |
| | def check_working(): |
| | return {"message": "Message working Successfully", "status":"success"} |
| |
|
| | async def process_file(file): |
| | try: |
| | summerized_id = str(uuid.uuid4()) |
| | file_contents = await file.read() |
| | directory = "./delete" |
| | os.makedirs(directory, exist_ok=True) |
| | path = os.path.join(directory, file.filename) |
| | path = f"./delete/{file.filename}" |
| | with open(path, "wb") as f: |
| | f.write(file_contents) |
| | text = extract_text_from_pdf(path) |
| | summary = Summerized_Text(text) |
| | report_id = AddReport(services, summerized_id, path) |
| | AddSummary( |
| | services, |
| | { |
| | "id": summerized_id, |
| | "project": "", |
| | "summary": summary, |
| | "drive": f"https://drive.google.com/file/d/{report_id}/view?usp=sharing", |
| | "year": "2023", |
| | "category": ["wanna check"], |
| | }, |
| | ) |
| | os.remove(path) |
| | return { |
| | "message": f"Successfully added Report and Summary for {file.filename}", |
| | "data": { |
| | "id": summerized_id, |
| | "compare": "", |
| | "title": "", |
| | "summary": summary, |
| | "drive": f"https://drive.google.com/file/d/{report_id}/view?usp=sharing", |
| | "year": "2023", |
| | "category": ["wanna check"], |
| | }, |
| | "success": True, |
| | } |
| | except Exception as e: |
| | return { |
| | "message": f"Error processing {file.filename}: {str(e)}", |
| | "status": "failed", |
| | } |
| |
|
| | @app.post("/api/upload") |
| | async def upload_files(files: List[UploadFile] = File(...)): |
| | try: |
| | loop = asyncio.get_event_loop() |
| | with ThreadPoolExecutor() as pool: |
| | responses = await asyncio.gather(*[loop.run_in_executor(pool, process_file, file) for file in files]) |
| | print("Uploaded Successfully") |
| | return {"data": [await response for response in responses], "status": "success"} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to Upload files", "data": False, "status": "failed"} |
| | |
| |
|
| | @app.post("/api/delete") |
| | async def delete_files(request: IDRequest): |
| | try: |
| | for report_name in request.ids: |
| | DeleteSummary(services, report_name) |
| | DeleteReport(services, report_name) |
| | try: |
| | directory = "." |
| | for filename in os.listdir(directory): |
| | if filename.startswith("data-"): |
| | file_path = "./" + filename |
| | os.remove(file_path) |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Successfully Deleted Summary and Report", "success": True} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| |
|
| |
|
| |
|
| | @app.post("/api/logout") |
| | async def delete_account(request: AccountInfo): |
| | try: |
| | Delete_Token_File(request.oldName) |
| | global services |
| | services, name = Create_Token_Drive(request.newName) |
| | return {"message": "Successfully Deleted Account", "data": name, "success": True} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| |
|
| |
|
| | @app.get("/api/getReports") |
| | async def get_reports(): |
| | try: |
| | data = Get_All_Reports(services) |
| | if len(data) == 0: |
| | return {"data": None, "status": "failed" } |
| | try: |
| | directory = "." |
| | for filename in os.listdir(directory): |
| | if filename.startswith("data-"): |
| | file_path = "./" + filename |
| | os.remove(file_path) |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"data": data, "success": True} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| |
|
| |
|
| |
|
| | @app.post("/api/compare") |
| | async def compare(file: UploadFile = File(...)): |
| | try: |
| | CheckFolders(services) |
| | summerized_id = str(uuid.uuid4()) |
| | file_contents = await file.read() |
| | path = f"./delete/{file.filename}" |
| | with open(path, "wb") as f: |
| | f.write(file_contents) |
| | text = extract_text_from_pdf(path) |
| | summary = Summerized_Text(text) |
| | path = f"./delete/{file.filename}" |
| | with open(path, "wb") as f: |
| | f.write(file_contents) |
| | data = compareText(services, summary) |
| | try: |
| | directory = "." |
| | for filename in os.listdir(directory): |
| | if filename.startswith("data-"): |
| | file_path = "./" + filename |
| | os.remove(file_path) |
| | if filename.startswith("delete"): |
| | file_path = path |
| | os.remove(file_path) |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"summary": summary, "data": data, "success": True} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| |
|
| | @app.get("/api/Check-Expired") |
| | async def checkExpired(): |
| | try: |
| | Expire_Token_File() |
| | return {"message": "Successfully Expired", "status": "success"} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to Check Expired Tokens", "data": False, "status":"failed"} |
| |
|
| |
|
| | @app.post("/api/New-Drive") |
| | async def NewDrive(): |
| | try: |
| | Delete_Drive_Token() |
| | Create_Drive_Token() |
| | return {"message": "Successfully Created a new drive", "status": "success"} |
| | except Exception as e: |
| | print(f"An error occurred: {str(e)}") |
| | return {"message": "Failed to login", "data": False, "status":"failed"} |
| |
|
| |
|
| | if __name__ == "__main__": |
| | global services |
| | Create_Drive_Token() |
| | uvicorn.run(app, host="0.0.0.0", port=8000) |
| |
|
| |
|