import datetime from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging from app.config import settings from app.db_sql import * from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template from app.methods.account_methods import load_account_obj, load_account_cfg_obj from app.models.account_models import Account_Base from app.models.response_models import * router = APIRouter() @router.post('', response_model=Resp_Body_Base) async def post_account_obj( obj: Account_Base, x_account_id: str = Header(...), return_obj: Optional[bool] = True, 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 = 'account' obj_data_dict = obj.dict(by_alias=False, exclude_unset=True) result = post_obj_template( obj_type=obj_type, data=obj_data_dict, return_obj=True, by_alias=True, exclude_unset=True, ) return result @router.patch('/{obj_id}', response_model=Resp_Body_Base) async def patch_account_obj( obj: Account_Base, obj_id: str = Query(..., min_length=1, max_length=22), x_account_id: Optional[str] = Header(..., ), return_obj: Optional[bool] = True, 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 = 'account' obj_data_dict = obj.dict(by_alias=False, exclude_unset=True) obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type) obj_data_dict['id_random'] = obj_id result = patch_obj_template( obj_type=obj_type, data=obj_data_dict, obj_id=obj_id, return_obj=True, by_alias=True, exclude_unset=True, ) return result @router.get('/list', response_model=Resp_Body_Base) async def get_account_obj_li( for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50), for_obj_id: Optional[str] = Query(None, 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 = 'account' result = get_obj_li_template( obj_type=obj_type, for_obj_type=for_obj_type, for_obj_id=for_obj_id, by_alias=True, exclude_unset=True, ) return result # ### BEGIN ### API Account ### get_account_obj() ### # Working well as of 2021-06-04. Using as a template for other routes. @router.get('/{account_id}', response_model=Resp_Body_Base) async def get_account_obj_new( account_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 inc_account_cfg: bool = False, inc_address: bool = False, # Under contact inc_address_list: bool = False, inc_archive: bool = False, inc_archive_list: bool = False, inc_contact: bool = False, inc_contact_list: bool = False, inc_event: bool = False, inc_event_list: bool = False, inc_event_abstract: bool = False, inc_event_abstract_list: bool = False, inc_event_badge: bool = False, inc_event_badge_list: bool = False, inc_event_cfg: bool = False, inc_event_device: bool = False, inc_event_device_list: bool = False, inc_event_exhibit: bool = False, inc_event_exhibit_list: bool = False, inc_event_file: bool = False, inc_event_file_list: bool = False, inc_event_location: bool = False, # For event_session child object inc_event_location_list: bool = False, inc_event_person: bool = False, inc_event_person_list: bool = False, inc_event_presentation: bool = False, inc_event_presentation_list: bool = False, inc_event_presenter_cat: bool = False, # For event_session child object inc_event_presenter: bool = False, inc_event_presenter_list: bool = False, inc_event_registration: bool = False, inc_event_registration_cfg: bool = False, inc_event_registration_list: bool = False, inc_event_session: bool = False, inc_event_session_list: bool = False, inc_event_track: bool = False, # For event_session child object inc_event_track_list: bool = False, inc_fundraising_cfg: bool = False, inc_hosted_file_list: bool = False, inc_journal_list: bool = False, inc_membership: bool = False, inc_membership_list: bool = False, inc_order: bool = False, inc_order_list: bool = False, inc_order_cart: bool = False, inc_order_cart_list: bool = False, inc_organization: bool = False, inc_organization_list: bool = False, inc_person: bool = False, inc_person_list: bool = False, inc_post: bool = False, inc_post_list: bool = False, inc_product: bool = False, inc_product_list: bool = False, inc_site: bool = False, inc_site_list: bool = False, inc_user: bool = False, inc_user_list: bool = False, x_account_id: str = Header(...), by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, ): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass else: return mk_resp(data=None, status_code=404) if account_obj := load_account_obj( account_id=account_id, enabled=enabled, limit=limit, inc_address=inc_address, inc_address_list=inc_address_list, inc_archive=inc_archive, inc_archive_list=inc_archive_list, inc_contact=inc_contact, inc_contact_list=inc_contact_list, inc_event=inc_event, inc_event_list=inc_event_list, inc_event_abstract_list=inc_event_abstract_list, inc_event_badge_list=inc_event_badge_list, inc_event_device_list=inc_event_device_list, inc_event_file_list=inc_event_file_list, inc_event_location=inc_event_location, inc_event_person=inc_event_person, inc_event_person_list=inc_event_person_list, inc_event_presentation_list=inc_event_presentation_list, inc_event_presenter_cat=inc_event_presenter_cat, inc_event_presenter_list=inc_event_presenter_list, inc_event_registration_list=inc_event_registration_list, inc_event_track=inc_event_track, inc_event_track_list=inc_event_track_list, inc_fundraising_cfg=inc_fundraising_cfg, inc_hosted_file_list=inc_hosted_file_list, inc_journal_list=inc_journal_list, inc_membership=inc_membership, inc_membership_list=inc_membership_list, inc_order=inc_order, inc_order_list=inc_order_list, inc_order_cart=inc_order_cart, 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=inc_post, inc_post_list=inc_post_list, inc_product=inc_product, inc_product_list=inc_product_list, inc_site=inc_site, inc_site_list=inc_site_list, inc_user=inc_user, inc_user_list=inc_user_list, ): account_dict = account_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) pass else: return mk_resp(data=False, status_code=400) # Bad Request return mk_resp(data=account_dict) #return mk_resp(data=account_obj) # ### END ### API Account ### get_account_obj() ### @router.get('/{obj_id}', response_model=Resp_Body_Base) async def get_account_obj( 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 = 'account' 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) async def delete_account_obj( obj_id: str = Query(..., min_length=1, max_length=22), x_account_id: str = Header(...), ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) obj_type = 'account' result = delete_obj_template( obj_type=obj_type, obj_id=obj_id, ) return result @router.get('/{account_id}/cfg', response_model=Resp_Body_Base) async def get_account_cfg_obj( account_id: str = Query(..., min_length=1, max_length=22), sys_module: Optional[str] = None, # event, fundraising, membership 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()) if sys_module: if sys_module == 'membership': membership_cfg_obj = load_account_cfg_obj(account_id=account_id, inc_membership_cfg=True).dict(by_alias=by_alias, exclude_unset=exclude_unset) data = membership_cfg_obj return mk_resp(data=data) else: obj_type = 'account_cfg' result = get_obj_template( obj_type=obj_type, obj_id=account_id, by_alias=True, exclude_unset=True, ) #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(result) return result