File size: 2,263 Bytes
347eef9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
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)
|