From ca43cc4dce01825149d874dc6610ce9b6d282098 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 25 Jun 2021 11:15:58 -0400 Subject: [PATCH] Working on membership and users --- app/main.py | 1 + app/methods/user_methods.py | 59 +++++++++----- app/methods/user_role_methods.py | 104 ++++++++++++++++++++++++ app/models/user_models.py | 20 ++--- app/models/user_role_models.py | 46 ++++++----- app/routers/lookup.py | 10 +-- app/routers/membership_group.py | 1 - app/routers/membership_type.py | 39 +++++---- app/routers/user.py | 132 +++++++++++++++---------------- 9 files changed, 270 insertions(+), 142 deletions(-) create mode 100644 app/methods/user_role_methods.py diff --git a/app/main.py b/app/main.py index c70956a..970289b 100644 --- a/app/main.py +++ b/app/main.py @@ -259,6 +259,7 @@ origins = [ 'https://oneskyit.com', 'http://dev-idaa.localhost:5000', 'http://connect.home:5000', + 'http://connect.localhost:5000', ] app.add_middleware( diff --git a/app/methods/user_methods.py b/app/methods/user_methods.py index eeb018f..9568723 100644 --- a/app/methods/user_methods.py +++ b/app/methods/user_methods.py @@ -13,9 +13,9 @@ from app.methods.order_methods import load_order_obj, get_order_rec_list from app.methods.organization_methods import load_organization_obj, update_organization_obj from app.methods.person_methods import load_person_obj, update_person_obj from app.methods.post_methods import get_post_rec_list, load_post_obj +from app.methods.user_role_methods import get_user_role_rec_list, load_user_role_obj from app.models.user_models import User_Base, User_New_Base, User_Out_Base -from app.models.user_role_models import User_Role_Base # ### BEGIN ### API User Methods ### create_user_obj() ### @@ -99,7 +99,7 @@ def load_user_obj( inc_post_comment_list: bool = False, inc_user_role_list: bool = False, ) -> User_Out_Base|bool: - #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + # log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if user_id := redis_lookup_id_random(record_id_random=user_id, table_name='user'): pass @@ -108,7 +108,7 @@ def load_user_obj( if user_rec := sql_select(table_name='v_user', record_id=user_id): pass else: return False - #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + # log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(user_rec) try: @@ -155,8 +155,7 @@ def load_user_obj( ): order_result_list = [] for order_rec in order_rec_list_result: - order_result_list.append( - load_order_obj( + if load_order_result := load_order_obj( order_id = order_rec.get('order_id', None), limit = limit, by_alias = by_alias, @@ -167,8 +166,9 @@ def load_user_obj( inc_order_line_list = inc_order_line_list, inc_person = inc_person, # inc_user = inc_user, - ) - ) + ): + order_result_list.append(load_order_result) + else: order_result_list.append(None) user_obj.order_list = order_result_list else: user_obj.order_list = [] @@ -216,8 +216,7 @@ def load_user_obj( ): post_result_list = [] for post_rec in post_rec_list_result: - post_result_list.append( - load_post_obj( + if load_post_result := load_post_obj( post_id = post_rec.get('post_id', None), limit = limit, by_alias = by_alias, @@ -227,20 +226,42 @@ def load_user_obj( inc_post_comment_list = inc_post_comment_list, inc_person = inc_person, # inc_user = inc_user, - ) - ) + ): + post_result_list.append(load_post_result) + else: post_result_list.append(None) user_obj.post_list = post_result_list else: user_obj.post_list = [] - # NOTE: Including user roles should probably be reviewed + # Updated 2021-06-25 if inc_user_role_list: - if role_rec_li := sql_select(table_name='v_user_role_detail', field_name='user_id', field_value=user_id, as_list=True): - # user_rec['role_list'] = role_rec_li - user_obj.role_list = role_rec_li - else: - # user_rec['role_list'] = None - user_obj.role_list = None - log.debug(user_rec) + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + if user_role_rec_list_result := get_user_role_rec_list( + for_obj_type = 'user', + for_obj_id = user_id, + limit = limit, + enabled = enabled, + ): + user_role_result_list = [] + log.debug(user_role_rec_list_result) + for user_role_rec in user_role_rec_list_result: + if load_user_role_result := load_user_role_obj( + user_role_id = user_role_rec.get('user_role_id', None), + by_alias = by_alias, + exclude_unset = exclude_unset, + model_as_dict = model_as_dict, + ): + user_role_result_list.append(load_user_role_result) + else: user_role_result_list.append(None) + user_obj.user_role_list = user_role_result_list + else: user_obj.user_role_list = [] + + # if role_rec_li := sql_select(table_name='v_user_role_detail', field_name='user_id', field_value=user_id, as_list=True): + # # user_rec['user_role_list'] = role_rec_li + # user_obj.user_role_list = role_rec_li + # else: + # # user_rec['user_role_list'] = None + # user_obj.user_role_list = None + # log.debug(user_rec) log.debug(user_obj) if model_as_dict: diff --git a/app/methods/user_role_methods.py b/app/methods/user_role_methods.py new file mode 100644 index 0000000..65b21ba --- /dev/null +++ b/app/methods/user_role_methods.py @@ -0,0 +1,104 @@ +from __future__ import annotations +import datetime + +from typing import Dict, List, Optional, Set, Union +from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator + +from app.db_sql import redis_lookup_id_random, sql_select +from app.lib_general import log, logging + +from app.models.user_role_models import User_Role_Base + + +# ### BEGIN ### API User Role Methods ### load_user_role_obj() ### +# Updated 2021-06-25 +def load_user_role_obj( + user_role_id: int|str, # NOTE: This is currently just an auto ID number, not a random string. + by_alias: bool = True, + exclude_unset: bool = True, + model_as_dict: bool = False, + ) -> User_Role_Base|dict|bool: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + # if user_role_id := redis_lookup_id_random(record_id_random=user_role_id, table_name='user_role'): pass + # else: return False + + if user_role_rec := sql_select(table_name='v_user_role', record_id=user_role_id): pass + else: return False + + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(user_role_rec) + + try: + user_role_obj = User_Role_Base(**user_role_rec) + log.debug(user_role_obj) + except ValidationError as e: + log.error(e.json()) + return False + + if model_as_dict: + return user_role_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member + else: + return user_role_obj +# ### END ### API User Role Methods ### load_user_role_obj() ### + + +# ### BEGIN ### API User Role Methods ### get_user_role_rec_list() ### +# Updated 2021-06-25 +def get_user_role_rec_list( + for_obj_type: str, + for_obj_id: str, + limit: int = 1000, + enabled: str = 'enabled', # enabled, disabled, all + ) -> list|bool: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name='for_obj_type'): pass + else: return False + data = {} + data[f'{for_obj_type}_id'] = for_obj_id + # data['for_obj_type'] = for_obj_type + sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id' + + allowed_forign_key_li = ['user'] + if for_obj_type in allowed_forign_key_li: + log.info(f'Query using forign key: {for_obj_type} {for_obj_id}') + sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id' + + if enabled in ['enabled', 'disabled', 'all']: + if enabled == 'enabled': + data['enable'] = True + sql_enabled = f'AND `tbl`.enable = :enable' + elif enabled == 'disabled': + data['enable'] = False + sql_enabled = f'AND `tbl`.enable = :enable' + elif enabled == 'all': + sql_enabled = '' + + if limit: + data['limit'] = limit + sql_limit = f'LIMIT :limit' + else: + sql_limit = '' + + sql = f""" + SELECT `tbl`.id AS 'user_role_id'/*, `tbl`.id_random AS 'user_role_id_random'*/ + FROM `user_role` AS `tbl` + WHERE + {sql_obj_type_id} + {sql_enabled} + ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC + {sql_limit}; + """ + else: return False + if user_role_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + user_role_rec_li = user_role_rec_li_result + else: + user_role_rec_li = [] + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(user_role_rec_li_result) + + return user_role_rec_li +# ### END ### API User Role Methods ### get_user_role_rec_list() ### diff --git a/app/models/user_models.py b/app/models/user_models.py index df35a0b..13a75ea 100644 --- a/app/models/user_models.py +++ b/app/models/user_models.py @@ -30,10 +30,13 @@ class User_New_Base(BaseModel): ) account_id_random: str account_id: Optional[int] + contact_id_random: Optional[str] contact_id: Optional[int] + organization_id_random: Optional[str] organization_id: Optional[int] + person_id_random: Optional[str] person_id: Optional[int] @@ -140,6 +143,7 @@ class User_Out_Base(BaseModel): **base_fields['user_id_random'], alias = 'user_id_random', ) + account_id_random: Optional[str] #account_id: Optional[int] @@ -198,7 +202,9 @@ class User_Out_Base(BaseModel): # person: Optional[dict] # Person_Base() # Priority l2 person: Optional[Union[Person_Base, None]] post_list: Optional[list] # Post_Base() # Priority l1 - user_role_list: Optional[list] # User_Role_Base() + user_role_list: Optional[list] = Field( + alias = 'role_list' + ) # User_Role_Base() _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) @@ -213,16 +219,13 @@ class User_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - #if TYPE_CHECKING: - #from .person_models import Person_Base - id_random: Optional[str] = Field( **base_fields['user_id_random'], alias = 'user_id_random', default_factory = lambda:secrets.token_urlsafe(default_num_bytes), ) id: Optional[int] = Field( - #alias = 'user_id' + alias = 'user_id' ) account_id_random: Optional[str] account_id: Optional[int] @@ -283,7 +286,9 @@ class User_Base(BaseModel): # person: Optional[dict] # Person_Base() # Priority l2 person: Optional[Union[Person_Base, None]] post_list: Optional[list] # Post_Base() # Priority l1 - user_role_list: Optional[list] # User_Role_Base() + user_role_list: Optional[list] = Field( + alias = 'role_list' + ) # User_Role_Base() # role_list: Optional[list] = [] # User_Role_Base() # NOTE <- This is a duplicate of above! _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) @@ -347,6 +352,3 @@ class User_Base(BaseModel): underscore_attrs_are_private = True fields = base_fields # ### END ### API User Models ### User_Base() ### - -# User_Base.update_forward_refs() -# User_Out_Base.update_forward_refs() diff --git a/app/models/user_role_models.py b/app/models/user_role_models.py index 7756599..2430274 100644 --- a/app/models/user_role_models.py +++ b/app/models/user_role_models.py @@ -15,26 +15,34 @@ class User_Role_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - id_random: Optional[str] = Field( - **base_fields['user_role_id_random'], - alias = 'user_role_id_random', - default_factory = lambda:secrets.token_urlsafe(default_num_bytes), - ) + # id_random: Optional[str] = Field( + # **base_fields['user_role_id_random'], + # alias = 'user_role_id_random', + # default_factory = lambda:secrets.token_urlsafe(default_num_bytes), + # ) id: Optional[int] = Field( - #alias = 'user_role_id' + alias = 'user_role_id' ) - user_id_random: Optional[str] # NOTE: This needs to be reviewed. Current a user_role record does not have an id_random + + user_id_random: Optional[str] user_id: Optional[int] - #role_id_random: Optional[str] - role_id: Optional[int] + + # user_role_id_random: Optional[str] + # user_role_id: Optional[int] = Field( + # alias = 'role_id' + # ) for_type: Optional[str] for_id_random: Optional[str] for_id: Optional[int] + code: Optional[str] + name: Optional[str] + description: Optional[str] + enable: Optional[bool] - enable_from: Optional[datetime.datetime] = None - enable_to: Optional[datetime.datetime] = None + enable_from: Optional[datetime.datetime] + enable_to: Optional[datetime.datetime] notes: Optional[str] created_on: Optional[datetime.datetime] = None @@ -51,15 +59,15 @@ class User_Role_Base(BaseModel): return values['id_random'] return None - @validator('id', always=True) - def user_role_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) + # @validator('id', always=True) + # def user_role_id_lookup(cls, v, values, **kwargs): + # log.setLevel(logging.WARNING) + # log.debug(locals()) - if values['id_random']: - log.debug(values['id_random']) - return redis_lookup_id_random(record_id_random=values['id_random'], table_name='user_role') - return None + # if values['id_random']: + # log.debug(values['id_random']) + # return redis_lookup_id_random(record_id_random=values['id_random'], table_name='user_role') + # return None @validator('user_id', always=True) def user_id_lookup(cls, v, values, **kwargs): diff --git a/app/routers/lookup.py b/app/routers/lookup.py index 15510c6..95cb019 100644 --- a/app/routers/lookup.py +++ b/app/routers/lookup.py @@ -4,11 +4,11 @@ from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, stat from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union -from app.lib_general import * +from app.lib_general import log, logging from app.config import settings -from app.db_sql import * +from app.db_sql import sql_select, redis_lookup_id_random -from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template +from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template from app.models.response_models import * #from app.models.lookup_models import Lookup_Base @@ -31,9 +31,7 @@ async def get_lookup_li( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - print('HERE') - - allowed_lookup_tables = ['country', 'country_subdivision', 'event_session_type', 'file_purpose', 'membership_status', 'order_status', 'user_status'] + allowed_lookup_tables = ['country', 'country_subdivision', 'event_session_type', 'file_purpose', 'membership_member_status', 'order_status', 'user_status'] if for_lookup_name in allowed_lookup_tables: table_name = f'lu_{for_lookup_name}' diff --git a/app/routers/membership_group.py b/app/routers/membership_group.py index e731ebc..2e44a5c 100644 --- a/app/routers/membership_group.py +++ b/app/routers/membership_group.py @@ -178,7 +178,6 @@ async def lookup_membership_group_obj( return mk_resp(data=data) - # ### BEGIN ### API Membership Group ### get_membership_group_obj() ### # Working well as of 2021-06-21. Using as a template for other routes. @router.get('/{membership_group_id}', response_model=Resp_Body_Base) diff --git a/app/routers/membership_type.py b/app/routers/membership_type.py index 86c3975..52a95c2 100644 --- a/app/routers/membership_type.py +++ b/app/routers/membership_type.py @@ -178,11 +178,10 @@ async def lookup_membership_type_obj( return mk_resp(data=data) - # ### BEGIN ### API Membership Type ### get_membership_type_obj() ### # Working well as of 2021-06-21. Using as a template for other routes. -@router.get('/{membership_type_id}/v5', response_model=Resp_Body_Base) -async def get_membership_type_obj_v5( +@router.get('/{membership_type_id}', response_model=Resp_Body_Base) +async def get_membership_type_obj( membership_type_id: str = Query(..., min_length=1, max_length=22), enabled: str = 'enabled', # For now this covers any included objects or object lists limit: int = 500, # For now this covers any included objects or object lists @@ -235,24 +234,24 @@ async def get_membership_type_obj_v5( # ### END ### API Membership ### get_membership_type_obj() ### -@router.get('/{obj_id}', response_model=Resp_Body_Base) -async def get_membership_type_obj_old( - obj_id: str = Query(..., min_length=1, max_length=22), - x_account_id: str = Header(...), - by_alias: Optional[bool] = True, - exclude_unset: Optional[bool] = True, - ): - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(locals()) +# @router.get('/{obj_id}', response_model=Resp_Body_Base) +# async def get_membership_type_obj_old( +# obj_id: str = Query(..., min_length=1, max_length=22), +# x_account_id: str = Header(...), +# by_alias: Optional[bool] = True, +# exclude_unset: Optional[bool] = True, +# ): +# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL +# log.debug(locals()) - obj_type = 'membership_type' - result = get_obj_template( - obj_type=obj_type, - obj_id=obj_id, - by_alias=True, - exclude_unset=True, - ) - return result +# obj_type = 'membership_type' +# result = get_obj_template( +# obj_type=obj_type, +# obj_id=obj_id, +# by_alias=True, +# exclude_unset=True, +# ) +# return result @router.delete('/{obj_id}', response_model=Resp_Body_Base) diff --git a/app/routers/user.py b/app/routers/user.py index 93e2df2..1442ea1 100644 --- a/app/routers/user.py +++ b/app/routers/user.py @@ -489,7 +489,7 @@ async def lookup_username( account_id: Union[int,str], username: str = Query(..., min_length=2, max_length=50), x_account_id: str = Header(...), - inc_roles: bool = False, + inc_user_role_list: bool = False, inc_contact: bool = False, inc_organization: bool = False, inc_person: bool = False, @@ -531,12 +531,12 @@ async def lookup_username( if isinstance(user_obj_result, dict): user_id = user_obj_result.get('user_id', None) user_obj = load_user_obj( - user_id=user_id, - inc_roles=inc_roles, - inc_contact=inc_contact, - inc_organization=inc_organization, - inc_person=inc_person - ).dict(by_alias=by_alias, exclude_unset=exclude_unset) + user_id = user_id, + inc_contact = inc_contact, + inc_organization = inc_organization, + inc_person = inc_person, + inc_user_role_list = inc_user_role_list, + ).dict(by_alias = by_alias, exclude_unset=exclude_unset) data = user_obj elif isinstance(user_obj_result, list): user_obj_li = [] @@ -544,11 +544,11 @@ async def lookup_username( user_id = user_obj.get('user_id', None) user_obj_li.append( load_user_obj( - user_id=user_id, - inc_roles=inc_roles, - inc_contact=inc_contact, - inc_organization=inc_organization, - inc_person=inc_person, + user_id = user_id, + inc_contact = inc_contact, + inc_organization = inc_organization, + inc_person = inc_person, + inc_user_role_list = inc_user_role_list, ).dict(by_alias=by_alias, exclude_unset=exclude_unset) ) data = user_obj_li @@ -558,11 +558,10 @@ async def lookup_username( return mk_resp(data=data) - -# ### BEGIN ### API User ### get_user_obj_v5() ### +# ### BEGIN ### API User ### get_user_obj() ### # Working well as of 2021-06-11. Using as a template for other routes. -@router.get('/{user_id}/v5', response_model=Resp_Body_Base) -async def get_user_obj_v5( +@router.get('/{user_id}', response_model=Resp_Body_Base) +async def get_user_obj( user_id: str = Query(..., min_length=1, max_length=22), limit: int = 500, # For now this covers any included objects or object lists enabled: str = 'enabled', # For now this covers any included objects or object lists @@ -596,65 +595,62 @@ async def get_user_obj_v5( else: return mk_resp(data=None, status_code=404) - if user_dict := load_user_obj( - user_id = user_id, - limit = limit, - model_as_dict = True, # NOTE: returning model as a dict - enabled = enabled, - inc_address = inc_address, - # inc_archive_list = inc_archive_list, - inc_contact = inc_contact, - inc_event_list = inc_event_list, - # inc_hosted_file_list = inc_hosted_file_list, - inc_journal_list = inc_journal_list, - # inc_journal_entry_list = inc_journal_entry_list, - inc_membership_member = inc_membership_member, - # inc_membership_list = inc_membership_list, # ??? - inc_order_line_list = inc_order_line_list, - inc_order_list = inc_order_list, - inc_order_cart_list = inc_order_cart_list, - inc_organization = inc_organization, - # inc_organization_list = inc_organization_list, - inc_person = inc_person, - # inc_person_list = inc_person_list, - inc_post_list = inc_post_list, - # inc_post_comment_list = inc_post_comment_list, - inc_user_role_list = inc_user_role_list, - ): - if isinstance(user_dict, dict): - response_data = user_dict - else: - response_data = user_dict + if user_result := load_user_obj( + user_id = user_id, + limit = limit, + model_as_dict = True, # NOTE: returning model as a dict + enabled = enabled, + inc_address = inc_address, + # inc_archive_list = inc_archive_list, + inc_contact = inc_contact, + inc_event_list = inc_event_list, + # inc_hosted_file_list = inc_hosted_file_list, + inc_journal_list = inc_journal_list, + # inc_journal_entry_list = inc_journal_entry_list, + inc_membership_member = inc_membership_member, + # inc_membership_list = inc_membership_list, # ??? + inc_order_line_list = inc_order_line_list, + inc_order_list = inc_order_list, + inc_order_cart_list = inc_order_cart_list, + inc_organization = inc_organization, + # inc_organization_list = inc_organization_list, + inc_person = inc_person, + # inc_person_list = inc_person_list, + inc_post_list = inc_post_list, + # inc_post_comment_list = inc_post_comment_list, + inc_user_role_list = inc_user_role_list, + ): + response_data = user_result else: return mk_resp(data=False, status_code=400) # Bad Request return mk_resp(data=response_data) -# ### END ### API User ### get_user_obj_v5() ### +# ### END ### API User ### get_user_obj() ### -@router.get('/{user_id}', response_model=Resp_Body_Base) -async def get_user_obj( - user_id: str = Query(..., min_length=1, max_length=22), - x_account_id: str = Header(...), - inc_roles: bool = False, - inc_contact: bool = False, - inc_organization: bool = False, - inc_person: bool = False, - by_alias: bool = True, - exclude_unset: bool = True, - ): - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(locals()) +# @router.get('/{user_id}', response_model=Resp_Body_Base) +# async def get_user_obj( +# user_id: str = Query(..., min_length=1, max_length=22), +# x_account_id: str = Header(...), +# inc_roles: bool = False, +# inc_contact: bool = False, +# inc_organization: bool = False, +# inc_person: bool = False, +# by_alias: bool = True, +# exclude_unset: bool = True, +# ): +# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL +# log.debug(locals()) - user_obj = load_user_obj( - user_id=user_id, - inc_roles=inc_roles, - inc_contact=inc_contact, - inc_organization=inc_organization, - inc_person=inc_person - ).dict(by_alias=by_alias, exclude_unset=exclude_unset) - data = user_obj - return mk_resp(data=data) +# user_obj = load_user_obj( +# user_id=user_id, +# inc_roles=inc_roles, +# inc_contact=inc_contact, +# inc_organization=inc_organization, +# inc_person=inc_person +# ).dict(by_alias=by_alias, exclude_unset=exclude_unset) +# data = user_obj +# return mk_resp(data=data) @router.delete('/{obj_id}', response_model=Resp_Body_Base)