Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI, Request | |
| from fastapi.responses import HTMLResponse,StreamingResponse,Response | |
| from fastapi.templating import Jinja2Templates | |
| from fastapi.staticfiles import StaticFiles | |
| from csv_to_db import ImportCSV | |
| import uvicorn | |
| import asyncio | |
| import hashlib | |
| from pydantic import BaseModel | |
| import cv2 | |
| import numpy as np | |
| import base64 | |
| import io | |
| import re | |
| from PIL import Image | |
| from typing import Generic, TypeVar,Dict,List,AnyStr,Any,Union | |
| from fastapi.middleware.cors import CORSMiddleware | |
| def readb64(uri): | |
| encoded_data = uri.split(',')[1] | |
| nparr = np.fromstring(base64.b64decode(encoded_data), np.uint8) | |
| img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) | |
| return img | |
| def find_revision_card(username,hashedvalue): | |
| found_revision_card = [] | |
| revisioncards = list(importcsv.db.accountrevisioncards.find({"email": username}))[0] | |
| for revisioncard in revisioncards["revisioncards"]: | |
| checkhash = revisioncards["email"] + revisioncard["subject"] + revisioncard["revisioncardtitle"] | |
| checkhash = hashlib.sha256(checkhash.encode()).hexdigest()[:31] # 15 | |
| if checkhash == hashedvalue: | |
| found_revision_card.append(revisioncard) | |
| return found_revision_card | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| def get_first_frame(imagebyteio): | |
| image = Image.open(imagebyteio) | |
| rgb_im = image.convert('RGB') | |
| img_byte_arr = io.BytesIO() | |
| rgb_im.save(img_byte_arr, format='PNG') | |
| img_byte_arr = img_byte_arr.getvalue() | |
| return img_byte_arr | |
| importcsv = ImportCSV("RevisionBankDB") | |
| templates = Jinja2Templates(directory="templates") | |
| JSONObject = Dict[Any, Any] | |
| JSONArray = List[Any] | |
| JSONStructure = Union[JSONArray, JSONObject] | |
| app.mount("/static", StaticFiles(directory="static"), name="static") | |
| async def hashnotecard(data : JSONStructure = None): | |
| try: | |
| data = dict(data) | |
| plainvalue = data["email"] + data["subject"] + data["revisioncardtitle"] | |
| hashvalue = hashlib.sha256(plainvalue.encode()).hexdigest()[:31] # 15 | |
| return {"message":hashvalue} | |
| except Exception as ex: | |
| return {"error":f"{type(ex)},{ex}"} | |
| async def getcard(request: Request, h:str,u:str): | |
| hashedvalue = h | |
| username = u | |
| #name = "test1.jpg" | |
| found_revision_card = find_revision_card(username,hashedvalue) | |
| try: | |
| revisioncarddetected = found_revision_card[0] | |
| #print(revisioncarddetected) | |
| #<!-- {{ url_for('static', path=name) }}--> | |
| return revisioncarddetected | |
| except IndexError as iex: | |
| print({"message":"revision card was not found."}) | |
| async def notecard(request: Request, h:str,u:str): | |
| # TODO Add share=1|0 paraneter for security implementations later | |
| hashedvalue = h | |
| username = u | |
| #name = "test1.jpg" | |
| found_revision_card = find_revision_card(username,hashedvalue) | |
| try: | |
| revisioncarddetected = found_revision_card[0] | |
| #print(revisioncarddetected) | |
| #<!-- {{ url_for('static', path=name) }}--> | |
| return templates.TemplateResponse("hello.html", {"request": request,"hashvalue":hashedvalue,"username":username,"subject":revisioncarddetected["subject"],"revisioncardtitle":revisioncarddetected["revisioncardtitle"],"revisioncard":revisioncarddetected["revisioncard"],"revisioncardimgname":revisioncarddetected["revisioncardimgname"],"revisioncardimage":revisioncarddetected["revisioncardimage"]}) # "name":name | |
| except IndexError as iex: | |
| print({"message":"revision card was not found."}) | |
| async def getnotecard(request: Request, h:str,u:str): | |
| # TODO Add share=1|0 paraneter for security implementations later | |
| hashedvalue = h | |
| username = u | |
| #name = "test1.jpg" | |
| found_revision_card = find_revision_card(username,hashedvalue) | |
| try: | |
| revisioncarddetected = found_revision_card[0] | |
| #print(revisioncarddetected) | |
| #<!-- {{ url_for('static', path=name) }}--> | |
| return revisioncarddetected | |
| except IndexError as iex: | |
| print({"message":"revision card was not found."}) | |
| async def notecardimage(request: Request, h:str,u:str): | |
| try: | |
| # TODO Add share=1|0 paraneter for security implementations later | |
| # TODO Add Header to link to RevisionBank | |
| # TODO Make a share button on revisionbank that will generate the link. | |
| # TODO Add Favicon | |
| # TODO Maybe show videos | |
| hashedvalue = h | |
| username = u | |
| #name = "test1.jpg" | |
| found_revision_card = find_revision_card(username,hashedvalue) | |
| try: | |
| revisioncarddetected = found_revision_card[0] | |
| if "data:image/gif;base64" in revisioncarddetected["revisioncardimage"][0]: | |
| imagebyteio = io.BytesIO(base64.b64decode(re.sub("data:image/gif;base64", '', revisioncarddetected["revisioncardimage"][0]))) | |
| img_byte_arr= get_first_frame(imagebyteio) | |
| return Response(content = img_byte_arr, media_type="image/gif") | |
| #return Response(content = imagebyteio.read(), media_type="image/gif") | |
| elif "data:image/gif;base64" not in revisioncarddetected["revisioncardimage"][0]: | |
| imagecv2 = readb64(revisioncarddetected["revisioncardimage"][0]) | |
| res, im_png = cv2.imencode(".png", imagecv2) | |
| return Response(content = im_png.tobytes(), media_type="image/png") | |
| #return StreamingResponse(io.BytesIO(im_png.tobytes()), media_type="image/png") | |
| except IndexError as iex: | |
| return {"message":"revision card was not found or no image"} | |
| except Exception as ex: | |
| return {"meesage":f"{type(ex)},{ex}"} | |
| async def main(): | |
| config = uvicorn.Config("main:app", port=7860, log_level="info",host="0.0.0.0",reload=True) | |
| server = uvicorn.Server(config) | |
| await server.serve() | |
| if __name__ == "__main__": | |
| uvicorn.run("main:app", port=7860, log_level="info",host="0.0.0.0",reload=True) | |
| #asyncio.run(main()) |