rakib72642's picture
init project
347eef9
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import asyncio
from typing import List, Union
import uvicorn
import logging
from datetime import datetime
import pytz
from main import main
# Logging setup
logging.basicConfig(filename="dataExtractOCR.log", filemode='w')
logger = logging.getLogger("NID")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler("dataExtractOCR.log")
logger.addHandler(file_handler)
total_done = 0
total_error = 0
app = FastAPI()
class Item(BaseModel):
url: str
def get_bd_time():
bd_timezone = pytz.timezone("Asia/Dhaka")
time_now = datetime.now(bd_timezone)
current_time = time_now.strftime("%I:%M:%S %p")
return current_time
async def process_item(item: Item):
try:
result = await main(item.url)
return result
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error in process_item: {str(e)}")
async def process_items(items: Union[Item, List[Item]]):
try:
if isinstance(items, list):
coroutines = [process_item(item) for item in items]
results = await asyncio.gather(*coroutines)
else:
results = await process_item(items)
return results
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error in process_items: {str(e)}")
@app.get("/status")
async def status():
try:
return "Server is running"
except Exception as e:
raise HTTPException(status_code=500, detail=f"Status Error: {str(e)}")
@app.post("/ocr")
async def create_items(items: Union[Item, List[Item]]):
global total_done, total_error
try:
total_done += 1
results = await process_items(items)
if results:
logger.info(f"Time: {get_bd_time()}, Successful Execution: {total_done}, BODY: {items}, Result: {results}")
return {"extractedData": results}
except Exception as e:
total_error += 1
logger.info(f"Time: {get_bd_time()}, Failed Execution: {total_error}, BODY: {items}")
logger.error(str(e))
raise HTTPException(status_code=500, detail=f"create_items Error: {str(e)}")
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8080)