server.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import fastapi
  2. import fastapi.staticfiles
  3. import fastapi.responses
  4. import pathlib
  5. import os
  6. from . import *
  7. from .requests import *
  8. class server(fastapi.FastAPI):
  9. def __init__(self, config_file: str) -> None:
  10. super().__init__()
  11. location = pathlib.Path(config_file)
  12. self.__resources = config_loader(app_config) \
  13. .load(location) \
  14. .resources
  15. self.__static()
  16. self.__route_product()
  17. self.__route_users()
  18. @property
  19. def resources(self) -> app_resources:
  20. return self.__resources
  21. @property
  22. def product_app(self) -> product_app:
  23. return self.__resources.product_app
  24. @property
  25. def users_app(self) -> users_app:
  26. return self.__resources.users_app
  27. def __static(self) -> None:
  28. @self.get("/")
  29. async def root() -> str:
  30. with pathlib.Path("static/core.html").open() as core:
  31. return fastapi.responses.HTMLResponse(
  32. content = core.read(),
  33. status_code = 200
  34. )
  35. directory = fastapi.staticfiles.StaticFiles(
  36. directory = pathlib.Path("static/")
  37. )
  38. self.mount(
  39. "/app",
  40. directory,
  41. name = "app_frontend"
  42. )
  43. def __route_product(self) -> None:
  44. @self.get("/products")
  45. async def products() -> dict:
  46. return self.product_app.all()
  47. @self.get("/product/get/barcode/{barcode}")
  48. async def product_get_barcode(barcode: int) -> dict:
  49. return self.product_app.get_barcode(str(barcode))
  50. @self.get("/product/get/name/{name}")
  51. async def product_get_name(name: str) -> dict:
  52. return self.product_app.get_name(name)
  53. @self.get("/product/search/name/{name}")
  54. async def product_search_name(name: str) -> dict:
  55. return self.product_app.search_name(name)
  56. @self.get("/product/search/author/{author}")
  57. async def product_search_author(author: str) -> dict:
  58. return self.product_app.search_author(author)
  59. @self.get("/product/check/barcode/{barcode}")
  60. async def product_check_barcode(barcode: int) -> dict:
  61. return self.product_app.check_barcode(str(barcode))
  62. @self.get("/product/check/name/{name}")
  63. async def product_check_name(name: str) -> dict:
  64. return self.product_app.check_name(name)
  65. @self.post("/product/update/barcode/{barcode}")
  66. async def product_barcode_update(
  67. barcode: str,
  68. product: product_request
  69. ) -> dict:
  70. body = product.dict()
  71. body["target_barcode"] = barcode
  72. return self.product_app.update(body)
  73. @self.post("/product/update/name/{name}")
  74. async def product_name_update(
  75. name: str,
  76. product: product_request
  77. ) -> dict:
  78. body = product.dict()
  79. body["target_name"] = name
  80. return self.product_app.update(body)
  81. @self.delete("/product/barcode/{barcode}")
  82. async def product_barcode_delete(
  83. barcode: str,
  84. request: apikey_request
  85. ) -> dict:
  86. body = request.dict()
  87. body["target_barcode"] = barcode
  88. return self.product_app.delete(body)
  89. @self.delete("/product/name/{name}")
  90. async def product_name_delete(
  91. name: str,
  92. request: apikey_request
  93. ) -> dict:
  94. body = request.dict()
  95. body["target_name"] = name
  96. return self.product_app.delete(body)
  97. @self.post("/product/create")
  98. async def product_create(product: product_request) -> dict:
  99. return self.product_app.create(product.dict())
  100. def __route_users(self) -> None:
  101. @self.post("/user/login")
  102. async def user_login(user: user_login_request) -> dict:
  103. return self.users_app.login(user.nick, user.password)
  104. @self.post("/user")
  105. async def user_get(body: user_get_request) -> dict:
  106. return self.users_app.get(body.apikey)
  107. instance = server(os.environ["config_file"])