test2.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import pandas as pd
  2. from fastapi import FastAPI, File, Form, UploadFile, Response, Request, Depends, BackgroundTasks
  3. from fastapi.middleware.cors import CORSMiddleware
  4. from fastapi.responses import HTMLResponse, FileResponse
  5. import dataset
  6. from fastapi.templating import Jinja2Templates
  7. from fastapi.staticfiles import StaticFiles
  8. import uvicorn
  9. from typing import List
  10. from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
  11. import time
  12. import shutil
  13. import logging
  14. import traceback
  15. import aiofiles
  16. app = FastAPI()
  17. app.add_middleware(
  18. CORSMiddleware,
  19. allow_origins=['*'],
  20. allow_credentials=True,
  21. allow_methods=["*"],
  22. allow_headers=["*"],
  23. )
  24. resource_server = 'www.keyword.web:8000/'
  25. tmp_csv_sub_folder = 'tmp_csv/'
  26. img_upload_folder = '/var/www/html/'+tmp_csv_sub_folder
  27. app.mount("../static", StaticFiles(directory="static"), name="static")
  28. # templates = Jinja2Templates(directory="../html")
  29. templates = Jinja2Templates(directory="../templates/")
  30. oauth_scheme = OAuth2PasswordBearer(tokenUrl="token")
  31. @app.get("/user/{id}", response_class=HTMLResponse)
  32. def home(request: Request, id:str):
  33. name = "cat"
  34. return templates.TemplateResponse("home.html", {"request": request, "name": name, "id": id})
  35. @app.get("/index_eng", response_class=HTMLResponse)
  36. async def index2():
  37. return FileResponse('../html/index_eng.html')
  38. @app.post("/root0")
  39. async def root0(file: UploadFile = File(...)):
  40. with open(f'{file.filename}', "wb") as buffer:
  41. shutil.copyfileobj(file.file, buffer)
  42. return {"file_name": file.filename}
  43. @app.post("/csv")
  44. async def csv(files: List[UploadFile] = File(...)):
  45. lists = {}
  46. i = 0
  47. for csv in files:
  48. with open(f'{csv.filename}', "wb") as buffer:
  49. shutil.copyfileobj(csv.file, buffer)
  50. lists[i] = csv.filename
  51. i += 1
  52. return {"files uploaded": lists}
  53. @app.post('/upfile1')
  54. async def up_f1(request:Request,upload_list:List[UploadFile]= File(...)):
  55. return templates.TemplateResponse(
  56. 'f.html',
  57. {
  58. "request":request,
  59. "file_names":[dd.filename for dd in upload_list],
  60. "file_sizes":[len(ds.read())/1024 for ds in [dd.file for dd in upload_list]],
  61. "file_types":[dd.content_type for dd in upload_list]
  62. })
  63. def handle_email_background(email: str, data: str):
  64. print(email)
  65. print(data)
  66. for i in range(100):
  67. print(i)
  68. time.sleep(0.1)
  69. @app.get("/users/email")
  70. async def handle_email(email: str, background_task:BackgroundTasks):
  71. print(email)
  72. background_task.add_task(handle_email_background, email, "This is background task")
  73. return {"message": "mail sent"}
  74. @app.post("/token")
  75. async def token_generate(form_data: OAuth2PasswordRequestForm = Depends()):
  76. print(form_data)
  77. return {"access_token": form_data.username, "token_type": "bearer"}
  78. @app.get("/users/profile")
  79. async def profile(token: str = Depends(oauth_scheme)):
  80. print(token)
  81. return {
  82. "user": "test1",
  83. "profile": "myprofile"
  84. }
  85. @app.get("/report/{id}", response_class=HTMLResponse)
  86. async def report(request: Request, id: str):
  87. return templates.TemplateResponse("index.html", {"request":request, "id": id})
  88. @app.post("/submitform")
  89. async def handle_form(request:Request, assignment: str = Form(...), assignment_file: UploadFile = File(...)):
  90. print(assignment)
  91. print(assignment_file.filename)
  92. content_assignment = await assignment_file.read()
  93. print(content_assignment)
  94. return templates.TemplateResponse("submited.html", {"request": request, "file_name": assignment_file.filename})
  95. @app.get("/legacy/")
  96. def get_legacy_data():
  97. data = """<?xml version="1.0"?>
  98. <shampoo>
  99. <Header>
  100. Apply shampoo here.
  101. </Header>
  102. <Body>
  103. You'll have to use soap here.
  104. </Body>
  105. </shampoo>
  106. """
  107. return Response(content=data, media_type="application/xml")
  108. @app.post("/write/")
  109. async def writecsv(file: UploadFile = File(...)):
  110. # file in utf8
  111. data = file.file
  112. df = pd.read_csv(data, sep=",", skiprows=2, na_values='NULL')
  113. db = dataset.connect('mysql://root:pAssw0rd@localhost:3306/keyword?charset=utf8mb4')
  114. table = db['test3']
  115. rows = df.shape[0]
  116. for i in range(rows):
  117. row = df.iloc[i]
  118. table.insert(dict(row))
  119. db.close()
  120. if __name__ == '__main__':
  121. uvicorn.run(app)