sneakpic / api /main.py
efraimdahl
added env variables to docker
2923ef3
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=["*"],
)