Обновление API Utils для работы с медиа

This commit is contained in:
2023-03-14 15:15:36 +03:00
parent 35b1fae88b
commit d4158ae1c0
9 changed files with 113 additions and 25 deletions

View File

@@ -1,8 +1,5 @@
import asyncio
from .api_errors import *
from .api_params import ApiParam
# TODO запилить класс для параметров: телефон, пароль, почта
from django.http import HttpResponse
from .api_params import *
api_methods_dict = {}
@@ -32,7 +29,7 @@ def api_method(func_name, doc="", params: list or None = None, returns=""):
Декоратор для методов API, автоматически валидирует и передает параметры методам
"""
def actual_decorator(func):
async def wrapper(**kwargs):
async def wrapper(__raw_request, **kwargs):
print(f"> call method {func_name} with params {kwargs}. method params: {params}")
errors = []
@@ -43,12 +40,16 @@ def api_method(func_name, doc="", params: list or None = None, returns=""):
raise Exception(API_ERROR_INTERNAL_ERROR, f"param {p} is not instance of ApiParam class")
name = p.get_name()
value = kwargs[name] if name in kwargs else None
if asyncio.iscoroutinefunction(p.validate):
func_args[name] = await p.validate(value)
if isinstance(p, ApiRequestParam):
func_args[name] = __raw_request
else:
func_args[name] = p.validate(value)
value = kwargs[name] if name in kwargs else None
if asyncio.iscoroutinefunction(p.validate):
func_args[name] = await p.validate(value)
else:
func_args[name] = p.validate(value)
except Exception as ex:
errors.append(ex)
@@ -69,6 +70,10 @@ def api_method(func_name, doc="", params: list or None = None, returns=""):
if out is None:
return make_error_object(Exception(API_ERROR_INTERNAL_ERROR, "method returned null object"))
if not isinstance(out, dict) and not isinstance(out, HttpResponse):
return make_error_object(Exception(API_ERROR_INTERNAL_ERROR, "method returned invalid object type"))
return out
api_methods_dict[func_name] = {