example.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # https://fastapi.tiangolo.com/tutorial/body-multiple-params/#singular-values-in-body
  2. from pathlib import Path
  3. from typing import Any
  4. import magic
  5. import arklog
  6. from fastapi import APIRouter, Query, Request, Response
  7. from fastapi.responses import JSONResponse
  8. import time
  9. class MockRouter(APIRouter):
  10. """"""
  11. def __init__(self, *args: Any, title: str, description: str, version: str, configuration, **kwargs: Any):
  12. self.title = title
  13. self.description = description
  14. self.version = version
  15. self.configuration = configuration
  16. super().__init__(*args, **kwargs)
  17. @self.get("/")
  18. async def root_mock(request: Request, query: str | None = Query(None)) -> Response:
  19. """Example request response for a simulated activity."""
  20. if query:
  21. match query.lower():
  22. case "error":
  23. return JSONResponse(status_code=400, content={"ctrl": "error"})
  24. case "get":
  25. return JSONResponse(status_code=200, content={"ctrl": "ok"})
  26. body = await request.json()
  27. control = body.get("ctrl")
  28. arklog.debug(control)
  29. content = body.get("input").get("din").get("content")
  30. file_path = Path(__file__).parent.parent / Path("data/mock_requirements.txt")
  31. requirements = file_path.read_text() + "\n\nChecked!"
  32. mime = magic.Magic(mime=True).from_file(file_path)
  33. #time.sleep(5)
  34. assert content + "\n\nChecked!" == requirements
  35. return JSONResponse(status_code=200, content={
  36. "ctrl": "ok",
  37. "output": {
  38. "dout": {
  39. "type": "inline",
  40. "content": requirements,
  41. "name": file_path.name,
  42. "encoding": mime
  43. }
  44. }
  45. })
  46. @self.put("/")
  47. async def root_put_mock(request: Request, query: str | None = Query(None)) -> Response:
  48. return await root_mock(request, query)
  49. @self.post("/")
  50. async def root_post_mock(request: Request, query: str | None = Query(None)) -> Response:
  51. return await root_mock(request, query)