From 9945e468ccbec82be1423d5ce1709f0c80f491ec Mon Sep 17 00:00:00 2001 From: iliak Date: Thu, 30 Nov 2023 16:50:32 +0300 Subject: [PATCH 1/7] check commit --- userdata_api/routes/category.py | 1 + 1 file changed, 1 insertion(+) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 9a53feb..f834f65 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -21,6 +21,7 @@ async def create_category( _: dict[str, str] = Depends(UnionAuth(scopes=["userdata.category.create"], allow_none=False, auto_error=True)), ) -> CategoryGet: """ + Hello_world! Создать категорию пользовательских данных. Получить категорию можно будет со скоупами, имена которых в category_inp.scopes Ручка обновит документацию :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ From 1a6c5c262eb3cf0e380db0209adae744fd617b40 Mon Sep 17 00:00:00 2001 From: iliak Date: Sat, 2 Dec 2023 15:53:43 +0300 Subject: [PATCH 2/7] check commit --- userdata_api/routes/category.py | 16 ++++++++++------ userdata_api/routes/param.py | 12 +++++++----- userdata_api/routes/source.py | 10 +++++----- userdata_api/routes/user.py | 25 ++++++++++++++++++++++--- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index f834f65..3c55b97 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -14,14 +14,17 @@ category = APIRouter(prefix="/category", tags=["Category"]) -@category.post("", response_model=CategoryGet) +@category.post("", response_model=CategoryGet, + description='Создать категорию пользовательских данных. Получить категорию можно будет со скоупами,' + ' имена которых в category_inp.scopes.\n\n' # Используем символ перевода строки + 'Ручка обновит документацию') + async def create_category( request: Request, category_inp: CategoryPost, _: dict[str, str] = Depends(UnionAuth(scopes=["userdata.category.create"], allow_none=False, auto_error=True)), ) -> CategoryGet: """ - Hello_world! Создать категорию пользовательских данных. Получить категорию можно будет со скоупами, имена которых в category_inp.scopes Ручка обновит документацию :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ @@ -35,7 +38,7 @@ async def create_category( return CategoryGet.model_validate(category) -@category.get("/{id}", response_model=CategoryGet) +@category.get("/{id}", response_model=CategoryGet, description='Получить категорию') async def get_category(id: int) -> CategoryGet: """ Получить категорию @@ -47,7 +50,8 @@ async def get_category(id: int) -> CategoryGet: return CategoryGet.model_validate(category) -@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True) +@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True, + description='Получить все категории') async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: result = [] for category in Category.query(session=db.session).all(): @@ -69,7 +73,7 @@ async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> l return type_adapter.validate_python(result) -@category.patch("/{id}", response_model=CategoryGet) +@category.patch("/{id}", response_model=CategoryGet, description='Обновить категорию') async def patch_category( request: Request, id: int, @@ -88,7 +92,7 @@ async def patch_category( return CategoryGet.model_validate(Category.update(id, session=db.session, **category_inp.dict(exclude_unset=True))) -@category.delete("/{id}", response_model=StatusResponseModel) +@category.delete("/{id}", response_model=StatusResponseModel, description='Удалить категорию') async def delete_category( request: Request, id: int, diff --git a/userdata_api/routes/param.py b/userdata_api/routes/param.py index 4a0b714..3485c25 100644 --- a/userdata_api/routes/param.py +++ b/userdata_api/routes/param.py @@ -14,7 +14,9 @@ param = APIRouter(prefix="/category/{category_id}/param", tags=["Param"]) -@param.post("", response_model=ParamGet) +@param.post("", response_model=ParamGet, + description='Создать поле внутри категории. ' + 'Ответ на пользовательские данные будет такой {..., category: {...,param: '', ...}}') async def create_param( request: Request, category_id: int, @@ -35,7 +37,7 @@ async def create_param( return ParamGet.model_validate(Param.create(session=db.session, **param_inp.dict(), category_id=category_id)) -@param.get("/{id}", response_model=ParamGet) +@param.get("/{id}", response_model=ParamGet, description='Получить параметр по айди') async def get_param(id: int, category_id: int) -> ParamGet: """ Получить параметр по айди @@ -49,7 +51,7 @@ async def get_param(id: int, category_id: int) -> ParamGet: return ParamGet.model_validate(res) -@param.get("", response_model=list[ParamGet]) +@param.get("", response_model=list[ParamGet], description='Получить все параметры категории') async def get_params(category_id: int) -> list[ParamGet]: """ Получить все параметры категории @@ -60,7 +62,7 @@ async def get_params(category_id: int) -> list[ParamGet]: return type_adapter.validate_python(Param.query(session=db.session).filter(Param.category_id == category_id).all()) -@param.patch("/{id}", response_model=ParamGet) +@param.patch("/{id}", response_model=ParamGet, description='Обновить параметр внутри категории') async def patch_param( request: Request, id: int, @@ -86,7 +88,7 @@ async def patch_param( return ParamGet.model_validate(Param.update(id, session=db.session, **param_inp.dict(exclude_unset=True))) -@param.delete("/{id}", response_model=StatusResponseModel) +@param.delete("/{id}", response_model=StatusResponseModel, description='Удалить параметр внутри категории') async def delete_param( request: Request, id: int, diff --git a/userdata_api/routes/source.py b/userdata_api/routes/source.py index 9de4ca9..2ebd0c2 100644 --- a/userdata_api/routes/source.py +++ b/userdata_api/routes/source.py @@ -14,7 +14,7 @@ source = APIRouter(prefix="/source", tags=["Source"]) -@source.post("", response_model=SourceGet) +@source.post("", response_model=SourceGet, description="Создать источник данных") async def create_source( request: Request, source_inp: SourcePost, @@ -33,7 +33,7 @@ async def create_source( return SourceGet.model_validate(Source.create(session=db.session, **source_inp.dict())) -@source.get("/{id}", response_model=SourceGet) +@source.get("/{id}", response_model=SourceGet, description="Получить источник данных") async def get_source(id: int) -> SourceGet: """ Получить источник данных @@ -43,7 +43,7 @@ async def get_source(id: int) -> SourceGet: return SourceGet.model_validate(Source.get(id, session=db.session)) -@source.get("", response_model=list[SourceGet]) +@source.get("", response_model=list[SourceGet], description='Получить все источники данных') async def get_sources() -> list[SourceGet]: """ Получить все источники данных @@ -53,7 +53,7 @@ async def get_sources() -> list[SourceGet]: return type_adapter.validate_python(Source.query(session=db.session).all()) -@source.patch("/{id}", response_model=SourceGet) +@source.patch("/{id}", response_model=SourceGet, description='Обновить источник данных') async def patch_source( request: Request, id: int, @@ -71,7 +71,7 @@ async def patch_source( return SourceGet.model_validate(Source.update(id, session=db.session, **source_inp.dict(exclude_unset=True))) -@source.delete("/{id}", response_model=StatusResponseModel) +@source.delete("/{id}", response_model=StatusResponseModel, description='Удалить источник данных') async def delete_source( request: Request, id: int, diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index 6ba0572..376b897 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -12,12 +12,12 @@ user = APIRouter(prefix="/user", tags=["User"]) -@user.get("/{id}", response_model=UserInfoGet) +@user.get("/{id}", response_model=UserInfoGet, description='Получить информацию о пользователе') async def get_user_info( id: int, user: dict[str, Any] = Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True)) ) -> UserInfoGet: """ - Получить информацию о польщователе + Получить информацию о пользователе :param id: Айди овнера информации(пользователя) :param user: Аутентфикация :return: Словарь, ключи - категории на которые хватило прав(овнеру не нужны права, он получает всё). @@ -32,7 +32,26 @@ async def get_user_info( return UserInfoGet.model_validate(await get(id, user)) -@user.post("/{id}", response_model=StatusResponseModel) +@user.post("/{id}", response_model=StatusResponseModel, + description= 'Обновить информацию о пользователе.\n\n' + 'Объект - пользователь, информацию которого обновляют\n\n' + 'Субъект - пользователь, который обновляет - источник\n\n' + '\n\n' + 'Если не указать параметр внутри категории, то ничего не обновится, если указать что-то,' + 'то либо создастся новая запись(в случае, если она отсутствовала у данного источника),' + ' либо отредактируется' + 'старая. Если в значении параметра указан None,' + ' то соответствующая информациия удаляется из данного источника' + '\n\n' + 'Обновлять через эту ручку можно только от имени источников admin и user.\n\n' + 'Чтобы обновить от имени админиа, надо иметь скоуп `userdata.info.admin`\n\n' + 'Чтобы обновить неизменяемую информацию надо обладать скоупом `userdata.info.update`\n\n' + 'Для обновления своей информации(источник `user`) не нужны скоупы на обновление ' + 'соответствующих категорий\n\n' + 'Для обновления чужой информации от имени админа(источник `admin`)' + 'нужны скоупы на обновление всех указанных в теле запроса категорий' + ' пользовательских данных данных' + ) async def update_user( new_info: UserInfoUpdate, id: int, From d48dfa472de684819185d9629bfd0d6fc941610e Mon Sep 17 00:00:00 2001 From: iliak Date: Sun, 3 Dec 2023 13:24:56 +0300 Subject: [PATCH 3/7] check commit --- userdata_api/routes/category.py | 17 +++++++------ userdata_api/routes/param.py | 10 +++++--- userdata_api/routes/user.py | 42 +++++++++++++++++---------------- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 3c55b97..8c63c01 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -14,11 +14,13 @@ category = APIRouter(prefix="/category", tags=["Category"]) -@category.post("", response_model=CategoryGet, - description='Создать категорию пользовательских данных. Получить категорию можно будет со скоупами,' - ' имена которых в category_inp.scopes.\n\n' # Используем символ перевода строки - 'Ручка обновит документацию') - +@category.post( + "", + response_model=CategoryGet, + description='Создать категорию пользовательских данных. Получить категорию можно будет со скоупами,' + ' имена которых в category_inp.scopes.\n\n' # Используем символ перевода строки + 'Ручка обновит документацию', +) async def create_category( request: Request, category_inp: CategoryPost, @@ -50,8 +52,9 @@ async def get_category(id: int) -> CategoryGet: return CategoryGet.model_validate(category) -@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True, - description='Получить все категории') +@category.get( + "", response_model=list[CategoryGet], response_model_exclude_none=True, description='Получить все категории' +) async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: result = [] for category in Category.query(session=db.session).all(): diff --git a/userdata_api/routes/param.py b/userdata_api/routes/param.py index 3485c25..b994ec6 100644 --- a/userdata_api/routes/param.py +++ b/userdata_api/routes/param.py @@ -14,9 +14,13 @@ param = APIRouter(prefix="/category/{category_id}/param", tags=["Param"]) -@param.post("", response_model=ParamGet, - description='Создать поле внутри категории. ' - 'Ответ на пользовательские данные будет такой {..., category: {...,param: '', ...}}') +@param.post( + "", + response_model=ParamGet, + description='Создать поле внутри категории. ' + 'Ответ на пользовательские данные будет такой {..., category: {...,param: ' + ', ...}}', +) async def create_param( request: Request, category_id: int, diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index 376b897..32e0ab7 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -32,26 +32,28 @@ async def get_user_info( return UserInfoGet.model_validate(await get(id, user)) -@user.post("/{id}", response_model=StatusResponseModel, - description= 'Обновить информацию о пользователе.\n\n' - 'Объект - пользователь, информацию которого обновляют\n\n' - 'Субъект - пользователь, который обновляет - источник\n\n' - '\n\n' - 'Если не указать параметр внутри категории, то ничего не обновится, если указать что-то,' - 'то либо создастся новая запись(в случае, если она отсутствовала у данного источника),' - ' либо отредактируется' - 'старая. Если в значении параметра указан None,' - ' то соответствующая информациия удаляется из данного источника' - '\n\n' - 'Обновлять через эту ручку можно только от имени источников admin и user.\n\n' - 'Чтобы обновить от имени админиа, надо иметь скоуп `userdata.info.admin`\n\n' - 'Чтобы обновить неизменяемую информацию надо обладать скоупом `userdata.info.update`\n\n' - 'Для обновления своей информации(источник `user`) не нужны скоупы на обновление ' - 'соответствующих категорий\n\n' - 'Для обновления чужой информации от имени админа(источник `admin`)' - 'нужны скоупы на обновление всех указанных в теле запроса категорий' - ' пользовательских данных данных' - ) +@user.post( + "/{id}", + response_model=StatusResponseModel, + description='Обновить информацию о пользователе.\n\n' + 'Объект - пользователь, информацию которого обновляют\n\n' + 'Субъект - пользователь, который обновляет - источник\n\n' + '\n\n' + 'Если не указать параметр внутри категории, то ничего не обновится, если указать что-то,' + 'то либо создастся новая запись(в случае, если она отсутствовала у данного источника),' + ' либо отредактируется' + 'старая. Если в значении параметра указан None,' + ' то соответствующая информациия удаляется из данного источника' + '\n\n' + 'Обновлять через эту ручку можно только от имени источников admin и user.\n\n' + 'Чтобы обновить от имени админиа, надо иметь скоуп `userdata.info.admin`\n\n' + 'Чтобы обновить неизменяемую информацию надо обладать скоупом `userdata.info.update`\n\n' + 'Для обновления своей информации(источник `user`) не нужны скоупы на обновление ' + 'соответствующих категорий\n\n' + 'Для обновления чужой информации от имени админа(источник `admin`)' + 'нужны скоупы на обновление всех указанных в теле запроса категорий' + ' пользовательских данных данных', +) async def update_user( new_info: UserInfoUpdate, id: int, From f9d38f33144d5a118a0864041e8d18a734f6168b Mon Sep 17 00:00:00 2001 From: gitfresnel Date: Sun, 3 Dec 2023 21:07:42 +0300 Subject: [PATCH 4/7] . --- userdata_api/routes/category.py | 32 ++++++++++++++++++++++++-------- userdata_api/routes/param.py | 15 +++++++++++++++ userdata_api/routes/source.py | 15 +++++++++++++++ userdata_api/routes/user.py | 29 +++++++---------------------- 4 files changed, 61 insertions(+), 30 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 8c63c01..3685b5b 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -29,6 +29,9 @@ async def create_category( """ Создать категорию пользовательских данных. Получить категорию можно будет со скоупами, имена которых в category_inp.scopes Ручка обновит документацию + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param category_inp: Принимаемая моделька :param _: Аутентификация @@ -44,6 +47,9 @@ async def create_category( async def get_category(id: int) -> CategoryGet: """ Получить категорию + """ + # + """ :param id: Айди категории :param _: Аутентфикация :return: Категорию со списком скоупов, которые нужны для получения пользовательских данных этой категории @@ -56,6 +62,17 @@ async def get_category(id: int) -> CategoryGet: "", response_model=list[CategoryGet], response_model_exclude_none=True, description='Получить все категории' ) async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: + """ + Получить все категории + """ + # + """ + :param query: Лист query параметров. + Если ничего не указано то вернет просто список категорий + Параметр 'param' - если указан, то в каждой категории будет список ее параметров + :param _: Аутентифиуация + :return: Список категорий. В каждой ноде списка - информация о скоупах, которые нужны для получения пользовательских данных этой категории + """ result = [] for category in Category.query(session=db.session).all(): to_append = category.dict() @@ -64,14 +81,7 @@ async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> l for param in category.params: to_append["params"].append(param.dict()) result.append(to_append) - """ - Получить все категории - :param query: Лист query параметров. - Если ничего не указано то вернет просто список категорий - Параметр 'param' - если указан, то в каждой категории будет список ее параметров - :param _: Аутентифиуация - :return: Список категорий. В каждой ноде списка - информация о скоупах, которые нужны для получения пользовательских данных этой категории - """ + type_adapter = TypeAdapter(list[CategoryGet]) return type_adapter.validate_python(result) @@ -85,6 +95,9 @@ async def patch_category( ) -> CategoryGet: """ Обновить категорию + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемой категории :param category_inp: Моделька обновления @@ -103,6 +116,9 @@ async def delete_category( ) -> StatusResponseModel: """ Удалить категорию + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемой категории :param _: Аутентификация diff --git a/userdata_api/routes/param.py b/userdata_api/routes/param.py index b994ec6..3c76a2d 100644 --- a/userdata_api/routes/param.py +++ b/userdata_api/routes/param.py @@ -29,6 +29,9 @@ async def create_param( ) -> ParamGet: """ Создать поле внутри категории. Ответ на пользовательские данные будет такой {..., category: {...,param: '', ...}} + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param category_id: Айди котегории в которой создавать параметр :param param_inp: Модель для создания @@ -45,6 +48,9 @@ async def create_param( async def get_param(id: int, category_id: int) -> ParamGet: """ Получить параметр по айди + """ + # + """ :param id: Айди параметра :param category_id: айди категории в которой этот параметр находиится :return: ParamGet - полученный параметр @@ -59,6 +65,9 @@ async def get_param(id: int, category_id: int) -> ParamGet: async def get_params(category_id: int) -> list[ParamGet]: """ Получить все параметры категории + """ + # + """ :param category_id: Айди категории :return: list[ParamGet] - список полученных параметров """ @@ -76,6 +85,9 @@ async def patch_param( ) -> ParamGet: """ Обновить параметр внутри категории + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемого параметра :param category_id: Адйи категории в которой находится параметр @@ -101,6 +113,9 @@ async def delete_param( ) -> StatusResponseModel: """ Удалить параметр внутри категории + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемого параметра :param category_id: Айди категории в которой находится удлаляемый параметр diff --git a/userdata_api/routes/source.py b/userdata_api/routes/source.py index 2ebd0c2..44ec31c 100644 --- a/userdata_api/routes/source.py +++ b/userdata_api/routes/source.py @@ -22,6 +22,9 @@ async def create_source( ) -> SourceGet: """ Создать источник данных + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param source_inp: Моделька для создания :param _: Аутентификация @@ -37,6 +40,9 @@ async def create_source( async def get_source(id: int) -> SourceGet: """ Получить источник данных + """ + # + """ :param id: Айди источника :return: SourceGet - полученный источник """ @@ -47,6 +53,9 @@ async def get_source(id: int) -> SourceGet: async def get_sources() -> list[SourceGet]: """ Получить все источники данных + """ + # + """ :return: list[SourceGet] - список источников данных """ type_adapter = TypeAdapter(list[SourceGet]) @@ -62,6 +71,9 @@ async def patch_source( ) -> SourceGet: """ Обновить источник данных + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемого источника :param source_inp: Моделька для обновления @@ -79,6 +91,9 @@ async def delete_source( ) -> StatusResponseModel: """ Удалить источник данных + """ + # + """ :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемого источника :param _: Аутентфиикация diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index 32e0ab7..b8f0bcc 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -18,6 +18,9 @@ async def get_user_info( ) -> UserInfoGet: """ Получить информацию о пользователе + """ + # + """ :param id: Айди овнера информации(пользователя) :param user: Аутентфикация :return: Словарь, ключи - категории на которые хватило прав(овнеру не нужны права, он получает всё). @@ -34,26 +37,7 @@ async def get_user_info( @user.post( "/{id}", - response_model=StatusResponseModel, - description='Обновить информацию о пользователе.\n\n' - 'Объект - пользователь, информацию которого обновляют\n\n' - 'Субъект - пользователь, который обновляет - источник\n\n' - '\n\n' - 'Если не указать параметр внутри категории, то ничего не обновится, если указать что-то,' - 'то либо создастся новая запись(в случае, если она отсутствовала у данного источника),' - ' либо отредактируется' - 'старая. Если в значении параметра указан None,' - ' то соответствующая информациия удаляется из данного источника' - '\n\n' - 'Обновлять через эту ручку можно только от имени источников admin и user.\n\n' - 'Чтобы обновить от имени админиа, надо иметь скоуп `userdata.info.admin`\n\n' - 'Чтобы обновить неизменяемую информацию надо обладать скоупом `userdata.info.update`\n\n' - 'Для обновления своей информации(источник `user`) не нужны скоупы на обновление ' - 'соответствующих категорий\n\n' - 'Для обновления чужой информации от имени админа(источник `admin`)' - 'нужны скоупы на обновление всех указанных в теле запроса категорий' - ' пользовательских данных данных', -) + response_model=StatusResponseModel) async def update_user( new_info: UserInfoUpdate, id: int, @@ -75,8 +59,9 @@ async def update_user( Для обновления своей информации(источник `user`) не нужны скоупы на обновление соответствующих категорий Для обновления чужой информации от имени админа(источник `admin`) нужны скоупы на обновление всех указанных в теле запроса категорий пользовательских данных данных - - + """ + # + """ :param request: Запрос из fastapi :param user_id: Айди объекта обновленя :param _: Модель запроса From 00952c599b189edfd4bf056c546dc524f41377cb Mon Sep 17 00:00:00 2001 From: gitfresnel Date: Sun, 3 Dec 2023 21:09:44 +0300 Subject: [PATCH 5/7] . --- userdata_api/routes/category.py | 4 ++-- userdata_api/routes/user.py | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 3685b5b..4d2284b 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -63,8 +63,8 @@ async def get_category(id: int) -> CategoryGet: ) async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: """ - Получить все категории - """ + Получить все категории + """ # """ :param query: Лист query параметров. diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index b8f0bcc..51bb781 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -35,9 +35,7 @@ async def get_user_info( return UserInfoGet.model_validate(await get(id, user)) -@user.post( - "/{id}", - response_model=StatusResponseModel) +@user.post("/{id}", response_model=StatusResponseModel) async def update_user( new_info: UserInfoUpdate, id: int, From 100369aa5f7d0acfa6c5447cbac0b1c13cb726b4 Mon Sep 17 00:00:00 2001 From: gitfresnel Date: Mon, 4 Dec 2023 20:55:26 +0300 Subject: [PATCH 6/7] . --- userdata_api/routes/category.py | 20 +++++--------------- userdata_api/routes/param.py | 20 +++++--------------- userdata_api/routes/source.py | 20 +++++--------------- userdata_api/routes/user.py | 8 ++------ 4 files changed, 17 insertions(+), 51 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 4d2284b..8faa0ee 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -29,9 +29,7 @@ async def create_category( """ Создать категорию пользовательских данных. Получить категорию можно будет со скоупами, имена которых в category_inp.scopes Ручка обновит документацию - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param category_inp: Принимаемая моделька :param _: Аутентификация @@ -47,9 +45,7 @@ async def create_category( async def get_category(id: int) -> CategoryGet: """ Получить категорию - """ - # - """ + \f :param id: Айди категории :param _: Аутентфикация :return: Категорию со списком скоупов, которые нужны для получения пользовательских данных этой категории @@ -64,9 +60,7 @@ async def get_category(id: int) -> CategoryGet: async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: """ Получить все категории - """ - # - """ + \f :param query: Лист query параметров. Если ничего не указано то вернет просто список категорий Параметр 'param' - если указан, то в каждой категории будет список ее параметров @@ -95,9 +89,7 @@ async def patch_category( ) -> CategoryGet: """ Обновить категорию - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемой категории :param category_inp: Моделька обновления @@ -116,9 +108,7 @@ async def delete_category( ) -> StatusResponseModel: """ Удалить категорию - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемой категории :param _: Аутентификация diff --git a/userdata_api/routes/param.py b/userdata_api/routes/param.py index 3c76a2d..830d240 100644 --- a/userdata_api/routes/param.py +++ b/userdata_api/routes/param.py @@ -29,9 +29,7 @@ async def create_param( ) -> ParamGet: """ Создать поле внутри категории. Ответ на пользовательские данные будет такой {..., category: {...,param: '', ...}} - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param category_id: Айди котегории в которой создавать параметр :param param_inp: Модель для создания @@ -48,9 +46,7 @@ async def create_param( async def get_param(id: int, category_id: int) -> ParamGet: """ Получить параметр по айди - """ - # - """ + \f :param id: Айди параметра :param category_id: айди категории в которой этот параметр находиится :return: ParamGet - полученный параметр @@ -65,9 +61,7 @@ async def get_param(id: int, category_id: int) -> ParamGet: async def get_params(category_id: int) -> list[ParamGet]: """ Получить все параметры категории - """ - # - """ + \f :param category_id: Айди категории :return: list[ParamGet] - список полученных параметров """ @@ -85,9 +79,7 @@ async def patch_param( ) -> ParamGet: """ Обновить параметр внутри категории - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемого параметра :param category_id: Адйи категории в которой находится параметр @@ -113,9 +105,7 @@ async def delete_param( ) -> StatusResponseModel: """ Удалить параметр внутри категории - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемого параметра :param category_id: Айди категории в которой находится удлаляемый параметр diff --git a/userdata_api/routes/source.py b/userdata_api/routes/source.py index 44ec31c..c59b925 100644 --- a/userdata_api/routes/source.py +++ b/userdata_api/routes/source.py @@ -22,9 +22,7 @@ async def create_source( ) -> SourceGet: """ Создать источник данных - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param source_inp: Моделька для создания :param _: Аутентификация @@ -40,9 +38,7 @@ async def create_source( async def get_source(id: int) -> SourceGet: """ Получить источник данных - """ - # - """ + \f :param id: Айди источника :return: SourceGet - полученный источник """ @@ -53,9 +49,7 @@ async def get_source(id: int) -> SourceGet: async def get_sources() -> list[SourceGet]: """ Получить все источники данных - """ - # - """ + \f :return: list[SourceGet] - список источников данных """ type_adapter = TypeAdapter(list[SourceGet]) @@ -71,9 +65,7 @@ async def patch_source( ) -> SourceGet: """ Обновить источник данных - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди обновляемого источника :param source_inp: Моделька для обновления @@ -91,9 +83,7 @@ async def delete_source( ) -> StatusResponseModel: """ Удалить источник данных - """ - # - """ + \f :param request: https://fastapi.tiangolo.com/advanced/using-request-directly/ :param id: Айди удаляемого источника :param _: Аутентфиикация diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index 51bb781..ebb8e56 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -18,9 +18,7 @@ async def get_user_info( ) -> UserInfoGet: """ Получить информацию о пользователе - """ - # - """ + \f :param id: Айди овнера информации(пользователя) :param user: Аутентфикация :return: Словарь, ключи - категории на которые хватило прав(овнеру не нужны права, он получает всё). @@ -57,9 +55,7 @@ async def update_user( Для обновления своей информации(источник `user`) не нужны скоупы на обновление соответствующих категорий Для обновления чужой информации от имени админа(источник `admin`) нужны скоупы на обновление всех указанных в теле запроса категорий пользовательских данных данных - """ - # - """ + \f :param request: Запрос из fastapi :param user_id: Айди объекта обновленя :param _: Модель запроса From 781f223cb1c64840d405bf1be3ae707d49ca906e Mon Sep 17 00:00:00 2001 From: gitfresnel Date: Thu, 7 Dec 2023 18:22:26 +0300 Subject: [PATCH 7/7] . --- userdata_api/routes/category.py | 13 ++++--------- userdata_api/routes/param.py | 16 +++++----------- userdata_api/routes/source.py | 10 +++++----- userdata_api/routes/user.py | 2 +- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/userdata_api/routes/category.py b/userdata_api/routes/category.py index 8faa0ee..9505bfd 100644 --- a/userdata_api/routes/category.py +++ b/userdata_api/routes/category.py @@ -17,9 +17,6 @@ @category.post( "", response_model=CategoryGet, - description='Создать категорию пользовательских данных. Получить категорию можно будет со скоупами,' - ' имена которых в category_inp.scopes.\n\n' # Используем символ перевода строки - 'Ручка обновит документацию', ) async def create_category( request: Request, @@ -41,7 +38,7 @@ async def create_category( return CategoryGet.model_validate(category) -@category.get("/{id}", response_model=CategoryGet, description='Получить категорию') +@category.get("/{id}", response_model=CategoryGet) async def get_category(id: int) -> CategoryGet: """ Получить категорию @@ -54,9 +51,7 @@ async def get_category(id: int) -> CategoryGet: return CategoryGet.model_validate(category) -@category.get( - "", response_model=list[CategoryGet], response_model_exclude_none=True, description='Получить все категории' -) +@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True) async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]: """ Получить все категории @@ -80,7 +75,7 @@ async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> l return type_adapter.validate_python(result) -@category.patch("/{id}", response_model=CategoryGet, description='Обновить категорию') +@category.patch("/{id}", response_model=CategoryGet) async def patch_category( request: Request, id: int, @@ -100,7 +95,7 @@ async def patch_category( return CategoryGet.model_validate(Category.update(id, session=db.session, **category_inp.dict(exclude_unset=True))) -@category.delete("/{id}", response_model=StatusResponseModel, description='Удалить категорию') +@category.delete("/{id}", response_model=StatusResponseModel) async def delete_category( request: Request, id: int, diff --git a/userdata_api/routes/param.py b/userdata_api/routes/param.py index 830d240..e851344 100644 --- a/userdata_api/routes/param.py +++ b/userdata_api/routes/param.py @@ -14,13 +14,7 @@ param = APIRouter(prefix="/category/{category_id}/param", tags=["Param"]) -@param.post( - "", - response_model=ParamGet, - description='Создать поле внутри категории. ' - 'Ответ на пользовательские данные будет такой {..., category: {...,param: ' - ', ...}}', -) +@param.post("", response_model=ParamGet) async def create_param( request: Request, category_id: int, @@ -42,7 +36,7 @@ async def create_param( return ParamGet.model_validate(Param.create(session=db.session, **param_inp.dict(), category_id=category_id)) -@param.get("/{id}", response_model=ParamGet, description='Получить параметр по айди') +@param.get("/{id}", response_model=ParamGet) async def get_param(id: int, category_id: int) -> ParamGet: """ Получить параметр по айди @@ -57,7 +51,7 @@ async def get_param(id: int, category_id: int) -> ParamGet: return ParamGet.model_validate(res) -@param.get("", response_model=list[ParamGet], description='Получить все параметры категории') +@param.get("", response_model=list[ParamGet]) async def get_params(category_id: int) -> list[ParamGet]: """ Получить все параметры категории @@ -69,7 +63,7 @@ async def get_params(category_id: int) -> list[ParamGet]: return type_adapter.validate_python(Param.query(session=db.session).filter(Param.category_id == category_id).all()) -@param.patch("/{id}", response_model=ParamGet, description='Обновить параметр внутри категории') +@param.patch("/{id}", response_model=ParamGet) async def patch_param( request: Request, id: int, @@ -96,7 +90,7 @@ async def patch_param( return ParamGet.model_validate(Param.update(id, session=db.session, **param_inp.dict(exclude_unset=True))) -@param.delete("/{id}", response_model=StatusResponseModel, description='Удалить параметр внутри категории') +@param.delete("/{id}", response_model=StatusResponseModel) async def delete_param( request: Request, id: int, diff --git a/userdata_api/routes/source.py b/userdata_api/routes/source.py index c59b925..52f3d67 100644 --- a/userdata_api/routes/source.py +++ b/userdata_api/routes/source.py @@ -14,7 +14,7 @@ source = APIRouter(prefix="/source", tags=["Source"]) -@source.post("", response_model=SourceGet, description="Создать источник данных") +@source.post("", response_model=SourceGet) async def create_source( request: Request, source_inp: SourcePost, @@ -34,7 +34,7 @@ async def create_source( return SourceGet.model_validate(Source.create(session=db.session, **source_inp.dict())) -@source.get("/{id}", response_model=SourceGet, description="Получить источник данных") +@source.get("/{id}", response_model=SourceGet) async def get_source(id: int) -> SourceGet: """ Получить источник данных @@ -45,7 +45,7 @@ async def get_source(id: int) -> SourceGet: return SourceGet.model_validate(Source.get(id, session=db.session)) -@source.get("", response_model=list[SourceGet], description='Получить все источники данных') +@source.get("", response_model=list[SourceGet]) async def get_sources() -> list[SourceGet]: """ Получить все источники данных @@ -56,7 +56,7 @@ async def get_sources() -> list[SourceGet]: return type_adapter.validate_python(Source.query(session=db.session).all()) -@source.patch("/{id}", response_model=SourceGet, description='Обновить источник данных') +@source.patch("/{id}", response_model=SourceGet) async def patch_source( request: Request, id: int, @@ -75,7 +75,7 @@ async def patch_source( return SourceGet.model_validate(Source.update(id, session=db.session, **source_inp.dict(exclude_unset=True))) -@source.delete("/{id}", response_model=StatusResponseModel, description='Удалить источник данных') +@source.delete("/{id}", response_model=StatusResponseModel) async def delete_source( request: Request, id: int, diff --git a/userdata_api/routes/user.py b/userdata_api/routes/user.py index ebb8e56..093f839 100644 --- a/userdata_api/routes/user.py +++ b/userdata_api/routes/user.py @@ -12,7 +12,7 @@ user = APIRouter(prefix="/user", tags=["User"]) -@user.get("/{id}", response_model=UserInfoGet, description='Получить информацию о пользователе') +@user.get("/{id}", response_model=UserInfoGet) async def get_user_info( id: int, user: dict[str, Any] = Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True)) ) -> UserInfoGet: