from typing import Annotated from fastapi import FastAPI from pydantic import BaseModel from api.scraping import scrapePage from api.analysis import analyseSite, parseImgLis from api.searchImages import performQueries, incrementPages from fastapi.encoders import jsonable_encoder from fastapi.responses import JSONResponse from starlette.middleware.cors import CORSMiddleware origins = [ "http://localhost", "http://localhost:3000/" ] class extract_request(BaseModel): url: str use_images: bool = False use_text:bool = True num_images:int=3 page: int = 0 result_images:int = 24 num_keywords_text:int = 10 num_keywords_images:int = 10 num_query_keywords:int=5 class increment_request(BaseModel): queries:dict num_images:int=3 page: int = 0 app = FastAPI() @app.options("/request/") async def returnMethods(): json_compatible_item_data = jsonable_encoder({"Methods":["Post"]}) return JSONResponse(content=json_compatible_item_data) @app.post("/request/") async def create_item(item: extract_request): req = item.model_dump() scrapedData = scrapePage(req) if("error" in scrapedData): json_compatible_item_data = jsonable_encoder(scrapedData) return JSONResponse(content=json_compatible_item_data) queries = analyseSite(scrapedData,req) if("error") in queries: json_compatible_item_data = jsonable_encoder(queries) return JSONResponse(content=json_compatible_item_data) res = performQueries(queries) resp = {"images":res,"queries":queries} json_compatible_item_data = jsonable_encoder(resp) return JSONResponse(content=json_compatible_item_data) @app.options("/increment/") async def returnMethods(): json_compatible_item_data = jsonable_encoder({"Methods":["Post"]}) return JSONResponse(content=json_compatible_item_data) @app.post("/increment/") async def increment_page(item: increment_request): req = item.model_dump() queries=incrementPages(req,req['page']) print("queries to execute",queries) res = performQueries(queries['queries']) resp = {"images":res,"queries":queries["queries"]} json_compatible_item_data = jsonable_encoder(resp) return JSONResponse(content=json_compatible_item_data) app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:3000", "http://0.0.0.0:3000"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )