Working on all module routes, methods, and models

This commit is contained in:
Scott Idem
2021-06-22 18:00:34 -04:00
parent b6ca0eb3f2
commit c1d23d15f4
20 changed files with 653 additions and 281 deletions

View File

@@ -117,7 +117,7 @@ def load_account_obj(
inc_user_list: bool = False, # Priority l2
inc_user_role_list: bool = False,
) -> Account_Base|dict|bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.WARNING) # 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
@@ -291,7 +291,7 @@ def load_account_obj(
inc_journal_entry_list = inc_journal_entry_list,
)
)
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(journal_dict_list)
@@ -366,6 +366,7 @@ def load_account_obj(
load_membership_type_obj(
membership_type_id = membership_type_rec.get('membership_type_id', None),
limit = limit,
enabled = enabled,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,

View File

@@ -14,8 +14,6 @@ from app.lib_general import log, logging
# from app.methods.event_presenter_methods import load_event_presenter_obj
# from app.methods.event_session_methods import load_event_session_obj
# from app.methods.event_track_methods import load_event_track_obj
# from app.methods.person_methods import load_person_obj
# from app.methods.user_methods import load_user_obj
from app.models.event_location_models import Event_Location_Base

View File

@@ -281,8 +281,8 @@ def load_membership_member_obj(
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
inc_address = inc_address,
inc_contact = inc_contact,
# inc_address = inc_address,
# inc_contact = inc_contact,
# inc_organization = inc_organization,
# inc_person = inc_person,
):
@@ -304,7 +304,7 @@ def get_membership_member_rec_list(
limit: int = 1000,
enabled: str = 'enabled', # enabled, disabled, all
) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.DEBUG) # 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

View File

@@ -0,0 +1,44 @@
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.order_cfg_models import Order_Cfg_Base
# ### BEGIN ### API Order Cfg Methods ### load_order_cfg_obj() ###
def load_order_cfg_obj(
account_id: int|str,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
) -> Order_Cfg_Base|dict|bool:
log.setLevel(logging.WARNING) # 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 False
if order_cfg_rec := sql_select(
table_name = 'v_account_cfg_detail',
field_name = 'account_id',
field_value = account_id,
): pass
else: return False
log.debug(order_cfg_rec)
try:
order_cfg_obj = Order_Cfg_Base(**order_cfg_rec)
log.debug(order_cfg_obj)
except ValidationError as e:
log.error(e.json())
if model_as_dict:
return order_cfg_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return order_cfg_obj
# ### END ### API Order Cfg Methods ### load_order_cfg_obj() ###

View File

@@ -0,0 +1,185 @@
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_insert, sql_select, sql_update
from app.lib_general import log, logging
from app.models.order_line_models import Order_Line_Base
# ### BEGIN ### API Order Line Methods ### create_order_line_obj() ###
def create_order_line_obj(order_line_obj_new:Order_Line_Base):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if not order_line_obj_new:
return False
order_line_obj_data = order_line_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'user', 'created_on', 'updated_on'})
if order_line_obj_in_result := sql_insert(data=order_line_obj_data, table_name='order_line', rm_id_random=True, id_random_length=8): pass
else:
return False
log.debug(order_line_obj_in_result)
order_line_id = order_line_obj_in_result
log.debug(f'Returning the new order_line_id: {order_line_id}')
return order_line_id
# ### END ### API Order Line Methods ### create_order_line_obj() ###
# ### BEGIN ### API Order Line Methods ### load_order_line_obj() ###
def load_order_line_obj(
order_line_id: int|str,
limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
) -> Order_Line_Base|dict|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if order_line_id := redis_lookup_id_random(record_id_random=order_line_id, table_name='order_line'): pass
else: return False
if order_line_rec := sql_select(table_name='v_order_line', record_id=order_line_id): pass
else: return False
#log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(order_line_rec)
try:
order_line_obj = Order_Line_Base(**order_line_rec)
log.debug(order_line_obj)
except ValidationError as e:
log.error(e.json())
return False
if model_as_dict:
return order_line_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return order_line_obj
# ### END ### API Order Line Methods ### load_order_line_obj() ###
# ### BEGIN ### API Order Line Methods ### update_order_line_obj() ###
def update_order_line_obj(
order_line_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value.
order_line_obj_up: Order_Line_Base,
create_missing_obj: bool = False,
) -> bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if order_line_id := redis_lookup_id_random(record_id_random=order_line_id, table_name='order_line'): pass
else: return False
order_line_obj_up.id = order_line_id
log.debug(order_line_obj_up)
# log.debug(order_line_obj_up.dict(by_alias=True, exclude_unset=True))
log.debug(order_line_obj_up.dict(by_alias=False, exclude_unset=True))
# log.debug(order_line_obj_up.dict(by_alias=False, exclude_unset=False))
#order_line_dict_up = order_line_obj_up.dict(by_alias=False, exclude_unset=True)
# if order_line_obj_up.person_id and order_line_obj_up.person:
# person_id = order_line_obj_up.person_id
# person_obj_up = order_line_obj_up.person
# log.debug(person_id)
# log.debug(person_obj_up)
# if person_obj_up_result := update_person_obj(
# person_id=person_id,
# person_obj_up=person_obj_up,
# create_missing_obj=create_missing_obj,
# ):
# log.debug(person_obj_up_result)
# else:
# log.debug(person_obj_up_result)
# return False
# if order_line_obj_up.user_id and order_line_obj_up.user:
# user_id = order_line_obj_up.user_id
# user_obj_up = order_line_obj_up.user
# log.debug(user_id)
# log.debug(user_obj_up)
# if user_obj_up_result := update_user_obj(
# user_id=user_id,
# user_obj_up=user_obj_up,
# create_missing_obj=create_missing_obj,
# ):
# log.debug(user_obj_up_result)
# else:
# log.debug(user_obj_up_result)
# return False
order_line_dict_up = order_line_obj_up.dict(by_alias=False, exclude_unset=True, exclude={'user'})
log.debug(order_line_dict_up)
if order_line_obj_up_result := sql_update(data=order_line_dict_up, table_name='order_line', rm_id_random=True):
log.debug(order_line_obj_up_result)
return True
else:
log.debug(order_line_obj_up_result)
return False
# ### END ### API Order Line Methods ### update_order_line_obj() ###
# ### BEGIN ### API Order Line Methods ### get_order_line_rec_list() ###
def get_order_line_rec_list(
for_obj_type: str,
for_obj_id: str,
limit: int = 1000,
) -> 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'
# 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 = ''
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT `tbl`.id AS 'order_line_id', `tbl`.id_random AS 'order_line_id_random'
FROM `order_line` AS `tbl`
WHERE
{sql_obj_type_id}
{sql_enabled}
ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC
{sql_limit};
"""
if order_line_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
order_line_rec_li = order_line_rec_li_result
else:
order_line_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(order_line_rec_li_result)
return order_line_rec_li
# ### END ### API Order Line Methods ### get_order_line_rec_list() ###

View File

@@ -7,10 +7,15 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_delete, sql_insert_or_update, sql_select
from app.lib_general import log, logging
from app.methods.order_cfg_methods import load_order_cfg_obj
from app.methods.order_line_methods import get_order_line_rec_list, load_order_line_obj
# from app.methods.person_methods import load_person_obj
# from app.methods.user_methods import load_user_obj
from app.models.order_models import Order_Base
from app.models.order_line_models import Order_Line_Base # This should go away later.
#from app.models.person_models import Person_Base
#from app.models.user_models import User_Base
# from app.models.person_models import Person_Base
# from app.models.user_models import User_Base
# ### BEGIN ### API Order Methods ### save_order_obj() ###
@@ -165,46 +170,22 @@ def load_order_obj(
exclude_unset: bool = True,
model_as_dict: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_order_line_list: bool = False,
inc_order_cfg: bool = False,
inc_person_obj: bool = False,
inc_user_obj: bool = False,
inc_order_line_list: bool = False,
inc_person: bool = False,
inc_user: bool = False,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
else:
return False
else: return False
if order_rec := sql_select(table_name='v_order', record_id=order_id):
#log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(order_rec)
if order_rec := sql_select(table_name='v_order', record_id=order_id): pass
else: return False
if inc_order_line_list:
order_line_data = {}
order_line_data['order_id'] = order_id
if order_line_rec_li := sql_select(table_name='v_order_line', data=order_line_data, as_list=True):#, field_name='order_id', field_value=order_id):
log.debug(order_line_rec_li)
order_rec['order_line_li'] = order_line_rec_li
if inc_order_cfg:
if order_cfg_rec := sql_select(table_name='v_account_cfg_detail', field_name='account_id', field_value=order_rec.get('account_id', None)):
#log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(order_cfg_rec)
order_rec['cfg'] = order_cfg_rec
if inc_person_obj:
if person_rec := sql_select(table_name='v_person', field_name='person_id', field_value=order_rec.get('person_id', None)):
#log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(person_rec)
order_rec['person'] = person_rec
log.debug(order_rec)
else:
return False
#log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(order_rec)
try:
order_obj = Order_Base(**order_rec)
@@ -212,6 +193,76 @@ def load_order_obj(
except ValidationError as e:
log.error(e.json())
# Updated 2021-06-18
if inc_order_line_list:
if order_line_rec_list_result := get_order_line_rec_list(
for_obj_type = 'order',
for_obj_id = order_id,
limit = limit,
):
order_line_result_list = []
for order_line_rec in order_line_rec_list_result:
order_line_result_list.append(
load_order_line_obj(
order_line_id = order_line_rec.get('order_line_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
)
)
order_obj.order_line_list = order_line_result_list
else: order_obj.order_line_list = []
if inc_order_line_list:
order_line_data = {}
order_line_data['order_id'] = order_id
if order_line_rec_li := sql_select(table_name='v_order_line', data=order_line_data, as_list=True):#, field_name='order_id', field_value=order_id):
log.debug(order_line_rec_li)
order_rec['order_line_li'] = order_line_rec_li
if inc_order_cfg:
if order_cfg_result := load_order_cfg_obj(
order_cfg_id = order_rec.get('order_cfg_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
order_obj.order_cfg = order_cfg_result
else: order_obj.order_cfg = None
# Updated 2021-06-22
if inc_person:
from app.methods.person_methods import load_person_obj
if person_result := load_person_obj(
person_id = order_rec.get('person_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
order_obj.person = person_result
else: order_obj.person = None
pass
# Updated 2021-06-22
if inc_user:
from app.methods.user_methods import load_user_obj
if user_result := load_user_obj(
user_id = order_rec.get('user_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
order_obj.user = user_result
else: order_obj.user = None
pass
if model_as_dict:
return order_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:

View File

@@ -9,8 +9,9 @@ from app.lib_general import log, logging
from app.methods.address_methods import load_address_obj
from app.methods.contact_methods import create_contact_obj, load_contact_obj, update_contact_obj
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.user_methods import create_user_obj, load_user_obj, update_user_obj
# from app.methods.user_methods import create_user_obj, load_user_obj, update_user_obj
from app.models.person_models import Person_Base
@@ -69,7 +70,17 @@ def load_person_obj(
enabled: str = 'enabled', # enabled, disabled, all
inc_address: bool = False, # Under contact
inc_contact: bool = False,
inc_event_list: bool = False,
inc_journal_list: bool = False,
inc_journal_entry_list: bool = False,
inc_membership_member: bool = False,
inc_order_cfg: bool = False,
inc_order_line_list: bool = False,
inc_order_list: bool = False,
inc_order_cart_list: bool = False,
inc_organization: bool = False,
inc_post_list: bool = False,
inc_post_comment_list: bool = False,
inc_user: bool = False,
) -> Person_Base|bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -103,6 +114,32 @@ def load_person_obj(
person_obj.contact = contact_result
else: person_obj.contact = None
# Updated 2021-06-18
if inc_order_list:
if order_rec_list_result := get_order_rec_list(
for_obj_type = 'person',
for_obj_id = person_id,
limit = limit,
enabled = enabled,
):
order_result_list = []
for order_rec in order_rec_list_result:
order_result_list.append(
load_order_obj(
order_id = order_rec.get('order_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
inc_order_cfg = inc_order_cfg,
inc_order_line_list = inc_order_line_list,
inc_user = inc_user,
)
)
person_obj.order_list = order_result_list
else: person_obj.order_list = []
# Updated 2021-06-18
if inc_organization:
organization_id = person_rec.get('organization_id', None)
@@ -122,18 +159,19 @@ def load_person_obj(
# Updated 2021-06-18
if inc_user:
user_id = person_rec.get('user_id', None)
log.debug(user_id)
if user_result := load_user_obj(
user_id = user_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
person_obj.user = user_result
else: person_obj.user = None
# user_id = person_rec.get('user_id', None)
# log.debug(user_id)
# if user_result := load_user_obj(
# user_id = user_id,
# limit = limit,
# by_alias = by_alias,
# exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
# enabled = enabled,
# ):
# person_obj.user = user_result
# else: person_obj.user = None
pass
if model_as_dict:
return person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
@@ -167,9 +205,9 @@ def update_person_obj(
log.debug(contact_id)
log.debug(contact_obj_up)
if contact_obj_up_result := update_contact_obj(
contact_id=contact_id,
contact_obj_up=contact_obj_up,
create_missing_obj=create_missing_obj,
contact_id = contact_id,
contact_obj_up = contact_obj_up,
create_missing_obj = create_missing_obj,
):
log.debug(contact_obj_up_result)
else:
@@ -194,9 +232,9 @@ def update_person_obj(
log.debug(organization_id)
log.debug(organization_obj_up)
if organization_obj_up_result := update_organization_obj(
organization_id=organization_id,
organization_obj_up=organization_obj_up,
create_missing_obj=create_missing_obj,
organization_id = organization_id,
organization_obj_up = organization_obj_up,
create_missing_obj = create_missing_obj,
):
log.debug(organization_obj_up_result)
else:

View File

@@ -7,7 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging
# from app.methods.person_methods import load_person_obj
from app.methods.person_methods import load_person_obj
# from app.methods.user_methods import load_user_obj
from app.models.post_comment_models import Post_Comment_Base
@@ -66,33 +66,35 @@ def load_post_comment_obj(
log.error(e.json())
return False
# Updated 2021-06-18
# Updated 2021-06-22
if inc_person:
from app.methods.person_methods import load_person_obj
person_result = load_person_obj(
person_id = post_comment_rec.get('person_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
)
post_comment_obj.person = person_result
else: post_comment_obj.person = None
# from app.methods.person_methods import load_person_obj
if person_result := load_person_obj(
person_id = post_comment_rec.get('person_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
post_comment_obj.person = person_result
else: post_comment_obj.person = None
# Updated 2021-06-18
if inc_user:
from app.methods.user_methods import load_user_obj
user_result = load_user_obj(
user_id = post_comment_rec.get('user_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
)
post_comment_obj.user = user_result
else: post_comment_obj.user = None
# from app.methods.user_methods import load_user_obj
# user_result = load_user_obj(
# user_id = post_comment_rec.get('user_id', None),
# limit = limit,
# by_alias = by_alias,
# exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
# enabled = enabled,
# )
# post_comment_obj.user = user_result
pass
if model_as_dict:
return post_comment_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member

View File

@@ -7,7 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging
# from app.methods.person_methods import load_person_obj
from app.methods.person_methods import load_person_obj
# from app.methods.post_comment_methods import create_post_comment_obj, update_post_comment_obj
from app.methods.post_comment_methods import get_post_comment_rec_list, load_post_comment_obj
# from app.methods.user_methods import load_user_obj
@@ -70,19 +70,19 @@ def load_post_obj(
except ValidationError as e:
log.error(e.json())
# Updated 2021-06-18
# Updated 2021-06-22
if inc_person:
from app.methods.person_methods import load_person_obj
person_result = load_person_obj(
person_id = post_rec.get('person_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
)
post_obj.person = person_result
else: post_obj.person = None
# from app.methods.person_methods import load_person_obj
if person_result := load_person_obj(
person_id = post_rec.get('person_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
):
post_obj.person = person_result
else: post_obj.person = None
# Updated 2021-06-17
if inc_post_comment_list:
@@ -111,17 +111,17 @@ def load_post_obj(
# Updated 2021-06-18
if inc_user:
from app.methods.user_methods import load_user_obj
user_result = load_user_obj(
user_id = post_rec.get('user_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
)
post_obj.user = user_result
else: post_obj.user = None
# from app.methods.user_methods import load_user_obj
# user_result = load_user_obj(
# user_id = post_rec.get('user_id', None),
# limit = limit,
# by_alias = by_alias,
# exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
# enabled = enabled,
# )
# post_obj.user = user_result
pass
if model_as_dict:
return post_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
@@ -130,90 +130,6 @@ def load_post_obj(
# ### END ### API Post Methods ### load_post_obj() ###
# ### BEGIN ### API Post Methods ### load_post_obj_list() ###
def load_post_obj_list(
account_id: int|str|None = None,
user_id: int|str|None = None,
limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_post_comment_list: bool = False,
inc_person: bool = False,
inc_user: bool = False,
) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
data = {}
if account_id:
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: return False
data['account_id'] = account_id
sql_obj_type_id = f'`tbl`.account_id = :account_id'
elif user_id:
if user_id := redis_lookup_id_random(record_id_random=user_id, table_name='user'): pass
else: return False
data['user_id'] = user_id
sql_obj_type_id = f'`tbl`.user_id = :user_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 = ''
# else: tbl_obj['account'] = None
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT `tbl`.id AS 'post_id', `tbl`.id_random AS 'post_id_random'
FROM `post` AS `tbl`
WHERE
{sql_obj_type_id}
{sql_enabled}
ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC
{sql_limit};
"""
if post_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(post_rec_li_result)
post_result_li = []
for post_rec in post_rec_li_result:
post_id = post_rec.get('post_id', None)
if post_result := load_post_obj(
post_id = post_id,
model_as_dict = model_as_dict,
enabled = enabled,
inc_post_comment_list = inc_post_comment_list,
inc_person = inc_person,
inc_user = inc_user,
):
log.debug(post_result)
post_result_li.append(post_result)
else:
log.debug(post_result)
post_result_li.append(None)
log.debug(post_result_li)
else:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(post_rec_li_result)
post_result_li = []
return post_result_li
# ### END ### API Post Methods ### load_post_obj_list() ###
# ### BEGIN ### API Post Methods ### update_post_obj() ###
def update_post_obj(
post_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value.

View File

@@ -7,9 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging
# from app.methods.person_methods import load_person_obj
from app.methods.site_domain_methods import get_site_domain_rec_list, load_site_domain_obj
# from app.methods.user_methods import load_user_obj
from app.models.site_models import Site_Base
@@ -57,8 +55,7 @@ def load_site_obj(
if site_id := redis_lookup_id_random(record_id_random=site_id, table_name='site'): pass
else: return False
if site_rec := sql_select(table_name='v_site', record_id=site_id):
log.debug(site_rec)
if site_rec := sql_select(table_name='v_site', record_id=site_id): pass
else: return False
log.debug(site_rec)

View File

@@ -9,8 +9,9 @@ from app.lib_general import log, logging
from app.methods.contact_methods import load_contact_obj, update_contact_obj
# from app.methods.event_methods import get_event_rec_list
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.person_methods import load_person_obj, update_person_obj
from app.methods.post_methods import get_post_rec_list, load_post_obj
from app.models.user_models import User_Base, User_New_Base, User_Out_Base
@@ -80,14 +81,20 @@ def load_user_obj(
model_as_dict: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_address: bool = False,
# inc_archive_list: bool = False,
inc_contact: bool = False,
inc_event_list: bool = False,
# inc_hosted_file_list: bool = False,
inc_journal_list: bool = False,
inc_membership: bool = False,
inc_journal_entry_list: bool = False,
inc_membership_member: bool = False,
inc_order_cfg: bool = False,
inc_order_line_list: bool = False,
inc_order_list: bool = False,
inc_order_cart_list: bool = False,
inc_organization: bool = False,
inc_person: bool = False,
# inc_person_list: bool = False,
inc_post_list: bool = False,
inc_post_comment_list: bool = False,
inc_user_role_list: bool = False,
@@ -112,20 +119,20 @@ def load_user_obj(
return False
# Updated 2021-06-18
if inc_contact:
contact_id = user_rec.get('contact_id', None)
log.debug(contact_id)
if contact_result := load_contact_obj(
contact_id = contact_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
inc_address = inc_address,
):
user_obj.contact = contact_result
else: user_obj.contact = None
# if inc_contact:
# contact_id = user_rec.get('contact_id', None)
# log.debug(contact_id)
# if contact_result := load_contact_obj(
# contact_id = contact_id,
# limit = limit,
# by_alias = by_alias,
# exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
# enabled = enabled,
# inc_address = inc_address,
# ):
# user_obj.contact = contact_result
# else: user_obj.contact = None
if inc_event_list:
from app.methods.event_methods import load_event_obj_list
@@ -138,6 +145,33 @@ def load_user_obj(
user_obj.event_list = event_dict_list
else: user_obj.event_list = []
# Updated 2021-06-18
if inc_order_list:
if order_rec_list_result := get_order_rec_list(
for_obj_type = 'user',
for_obj_id = user_id,
limit = limit,
enabled = enabled,
):
order_result_list = []
for order_rec in order_rec_list_result:
order_result_list.append(
load_order_obj(
order_id = order_rec.get('order_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
inc_order_cfg = inc_order_cfg,
inc_order_line_list = inc_order_line_list,
inc_person = inc_person,
# inc_user = inc_user,
)
)
user_obj.order_list = order_result_list
else: user_obj.order_list = []
# Updated 2021-06-18
if inc_organization:
organization_id = user_rec.get('organization_id', None)
@@ -166,8 +200,7 @@ def load_user_obj(
model_as_dict = model_as_dict,
inc_address = inc_address,
inc_contact = inc_contact,
# inc_organization = inc_organization,
# inc_user = inc_user,
inc_organization = inc_organization,
):
user_obj.person = person_result
else: user_obj.person = None

View File

@@ -26,6 +26,7 @@ class Contact_Base(BaseModel):
)
account_id_random: Optional[str]
account_id: Optional[int]
address_id_random: Optional[str]
address_id: Optional[int]

View File

@@ -30,12 +30,16 @@ class Membership_Member_Base(BaseModel):
account_id_random: Optional[str]
account_id: Optional[int]
membership_type_id_random: Optional[str]
membership_type_id: Optional[int] # NOTE: This is not optional
person_id_random: Optional[str]
person_id: Optional[int]
product_id_random: Optional[str]
product_id: Optional[int] # The product they purchased to get this membership
user_id_random: Optional[str]
user_id: Optional[int]

View File

@@ -0,0 +1,31 @@
from __future__ import annotations
import datetime, hashlib, logging, os, pytz, redis, secrets
from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
class Order_Cfg_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
account_id_random: Optional[str]
account_id: Optional[int]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
@validator('account_id', always=True)
def account_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['account_id_random']:
return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
return None
Order_Cfg_Base.update_forward_refs()

View File

@@ -10,8 +10,9 @@ from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
# from app.models.account_models import Account_Base
from app.models.contact_models import Contact_Base
# from app.models.membership_member_models import Membership_Member_Base
from app.models.organization_models import Organization_Base
from app.models.user_models import User_Base
# from app.models.user_models import User_Base
class Person_Base(BaseModel):
@@ -33,13 +34,16 @@ class Person_Base(BaseModel):
)
account_id_random: Optional[str]
account_id: Optional[int]
user_id_random: Optional[str]
user_id: Optional[int]
organization_id_random: Optional[str]
organization_id: Optional[int]
contact_id_random: Optional[str]
contact_id: Optional[int]
organization_id_random: Optional[str]
organization_id: Optional[int]
user_id_random: Optional[str]
user_id: Optional[int]
given_name: Optional[str]
family_name: Optional[str]
middle_name: Optional[str]
@@ -59,9 +63,18 @@ class Person_Base(BaseModel):
updated_on: Optional[datetime.datetime] = None
# Including other related objects
# archive_list: Optional[list] # Archive_Base()
event_list: Optional[list] # Event_Base() # Priority l1
hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l2
journal_list: Optional[list] # Journal_Base() # Priority l3
contact: Optional[Union[Contact_Base, None]]
# membership_member: Optional[Membership_Member_Base] # Priority l2
# membership_member_list: Optional[list] # Membership_Base() ????
order_list: Optional[list] # Order_Base() # Priority l2
order_cart_list: Optional[list] # Order_Base() # Priority l2
organization: Optional[Union[Organization_Base, None]]
user: Optional[Union[User_Base, None]]
post_list: Optional[list] # Post_Base() # Priority l1
# user: Optional[Union[User_Base, None]]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
@@ -93,13 +106,14 @@ class Person_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
return None
@validator('user_id', always=True)
def user_id_lookup(cls, v, values, **kwargs):
@validator('contact_id', always=True)
def contact_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['user_id_random']:
return redis_lookup_id_random(record_id_random=values['user_id_random'], table_name='user')
if values['contact_id_random']:
return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact')
return None
@validator('organization_id', always=True)
@@ -111,13 +125,13 @@ class Person_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['organization_id_random'], table_name='organization')
return None
@validator('contact_id', always=True)
def contact_id_lookup(cls, v, values, **kwargs):
@validator('user_id', always=True)
def user_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['contact_id_random']:
return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact')
if values['user_id_random']:
return redis_lookup_id_random(record_id_random=values['user_id_random'], table_name='user')
return None
class Config:

View File

@@ -41,7 +41,7 @@ def mk_resp(
exclude_unset: bool = True,
response = None
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if data is None: data_out = { 'result': data }

View File

@@ -8,11 +8,11 @@ from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging, secure_hash_string
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.contact_models import Contact_Base
# from app.models.membership_models import Membership_Base
# from app.models.contact_models import Contact_Base
# from app.models.membership_member_models import Membership_Member_Base
from app.models.organization_models import Organization_Base
# from app.models.person_models import Person_Base # Causes circular import
from app.models.user_role_models import User_Role_Base
from app.models.person_models import Person_Base # Causes circular import
# from app.models.user_role_models import User_Role_Base
# ### BEGIN ### API User Models ### User_New_Base() ###
@@ -142,10 +142,13 @@ class User_Out_Base(BaseModel):
)
account_id_random: Optional[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]
@@ -182,20 +185,20 @@ class User_Out_Base(BaseModel):
# Including other related objects
# from app.models.person_models import Person_Base # Causes circular import
archive_list: Optional[list] # Archive_Base()
contact: Optional[Contact_Base]
event_list: Optional[list] # Event_Base() # Priority l1
hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l2
# archive_list: Optional[list] # Archive_Base()
# contact: Optional[Contact_Base]
event_list: Optional[list] # Event_Base() # Priority complete
hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l3
journal_list: Optional[list] # Journal_Base() # Priority l3
# membership: Optional[Membership_Base] # Priority l2
# membership_member: Optional[Membership_Member_Base] # Priority l2
# membership_member_list: Optional[list] # Membership_Base() ???
order_list: Optional[list] # Order_Base() # Priority l2
order_cart_list: Optional[list] # Order_Base() # Priority l2
organization: Optional[Organization_Base] # Organization_Base() # Priority l3
person: Optional[dict] # Person_Base() # Priority l2
organization: Optional[Union[Organization_Base, None]] # Organization_Base() # Priority l3
# 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()
role_list: Optional[list] = [] # User_Role_Base() # NOTE <- This is a duplicate of above!
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
@@ -223,10 +226,13 @@ class User_Base(BaseModel):
)
account_id_random: Optional[str]
account_id: Optional[int]
contact_id_random: Optional[str]
contact_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]
@@ -263,19 +269,22 @@ class User_Base(BaseModel):
updated_on: Optional[datetime.datetime] = None
# Including other related objects
archive_list: Optional[list] # Archive_Base()
contact: Optional[Contact_Base]
# from app.models.person_models import Person_Base # Causes circular import
# archive_list: Optional[list] # Archive_Base()
# contact: Optional[Contact_Base]
event_list: Optional[list] # Event_Base() # Priority l1
hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l2
journal_list: Optional[list] # Journal_Base() # Priority l3
# membership: Optional[Membership_Base] # Priority l2
# membership_member: Optional[Membership_Member_Base] # Priority l2
# membership_member_list: Optional[list] # Membership_Base() ???
order_list: Optional[list] # Order_Base() # Priority l2
order_cart_list: Optional[list] # Order_Base() # Priority l2
organization: Optional[Organization_Base] # Organization_Base() # Priority l3
person: Optional[dict] # Person_Base() # Priority l2
organization: Optional[Union[Organization_Base, None]] # Organization_Base() # Priority l3
# 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()
role_list: Optional[list] = [] # User_Role_Base() # NOTE <- This is a duplicate of above!
# role_list: Optional[list] = [] # User_Role_Base() # NOTE <- This is a duplicate of above!
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
@@ -307,14 +316,14 @@ class User_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
return None
@validator('contact_id', always=True)
def contact_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
# @validator('contact_id', always=True)
# def contact_id_lookup(cls, v, values, **kwargs):
# log.setLevel(logging.WARNING)
# log.debug(locals())
if values['contact_id_random']:
return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact')
return None
# if values['contact_id_random']:
# return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact')
# return None
@validator('organization_id', always=True)
def organization_id_lookup(cls, v, values, **kwargs):

View File

@@ -181,8 +181,8 @@ async def lookup_membership_type_obj(
# ### 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}', response_model=Resp_Body_Base)
async def get_membership_type_obj(
@router.get('/{membership_type_id}/v5', response_model=Resp_Body_Base)
async def get_membership_type_obj_v5(
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

View File

@@ -129,27 +129,74 @@ async def get_person_obj_li(
return result
@router.get('/{person_id}', response_model=Resp_Body_Base)
async def get_person_obj(
# ### BEGIN ### API Person ### get_person_obj_v5() ###
# Working well as of 2021-06-11. Using as a template for other routes.
@router.get('/{person_id}/v5', response_model=Resp_Body_Base)
async def get_person_obj_v5(
person_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
inc_address: bool = False, # Priority l1
# inc_archive_list: bool = False, # Priority l3
inc_contact: bool = False, # Priority l1
inc_event_list: bool = False, # Priority l1
# inc_hosted_file_list: bool = False, # Priority l3
inc_journal_list: bool = False, # Priority l2
# inc_journal_entry_list: bool = False, # Priority l3
inc_membership_member: bool = False, # Priority l2
# inc_membership_list: bool = False, # ???
inc_order_line_list: bool = False, # Priority l1
inc_order_list: bool = False, # Priority l1
inc_order_cart_list: bool = False, # Priority l1
inc_organization: bool = False, # Priority l1
# inc_organization_list: bool = False,
inc_post_list: bool = False, # Priority l2
inc_post_comment_list: bool = False, # Priority l3
inc_user: bool = False, # Priority l1
x_account_id: str = Header(...),
inc_address: bool = False,
inc_contact: bool = False,
inc_organization: bool = False,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
person_obj = load_person_obj(
person_id=person_id,
inc_contact=inc_contact,
inc_address=inc_address,
inc_organization=inc_organization,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
data = person_obj
return mk_resp(data=person_obj)
if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass
else:
return mk_resp(data=None, status_code=404)
if person_dict := load_person_obj(
person_id = person_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_post_list = inc_post_list,
inc_post_comment_list = inc_post_comment_list,
inc_user = inc_user,
):
if isinstance(person_dict, dict):
response_data = person_dict
else:
response_data = person_dict
else:
return mk_resp(data=False, status_code=400) # Bad Request
return mk_resp(data=response_data)
# ### END ### API Person ### get_person_obj_v5() ###
@router.delete('/{obj_id}', response_model=Resp_Body_Base)

View File

@@ -559,10 +559,10 @@ async def lookup_username(
# ### BEGIN ### API User ### get_user_obj_new() ###
# ### BEGIN ### API User ### get_user_obj_v5() ###
# Working well as of 2021-06-11. Using as a template for other routes.
@router.get('/{user_id}/json', response_model=Resp_Body_Base)
async def get_user_obj_new(
@router.get('/{user_id}/v5', response_model=Resp_Body_Base)
async def get_user_obj_v5(
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
@@ -573,8 +573,9 @@ async def get_user_obj_new(
# inc_hosted_file_list: bool = False, # Priority l3
inc_journal_list: bool = False, # Priority l2
# inc_journal_entry_list: bool = False, # Priority l3
inc_membership: bool = False, # Priority l2
inc_membership_member: bool = False, # Priority l2
# inc_membership_list: bool = False, # ???
inc_order_line_list: bool = False, # Priority l1
inc_order_list: bool = False, # Priority l1
inc_order_cart_list: bool = False, # Priority l1
inc_organization: bool = False, # Priority l1
@@ -582,7 +583,7 @@ async def get_user_obj_new(
inc_person: bool = False, # Priority l1
# inc_person_list: bool = False,
inc_post_list: bool = False, # Priority l2
# inc_post_comment_list: bool = False, # Priority l3
inc_post_comment_list: bool = False, # Priority l3
inc_user_role_list: bool = False, # Priority l1
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
@@ -607,8 +608,9 @@ async def get_user_obj_new(
# inc_hosted_file_list = inc_hosted_file_list,
inc_journal_list = inc_journal_list,
# inc_journal_entry_list = inc_journal_entry_list,
inc_membership = inc_membership,
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,
@@ -627,8 +629,7 @@ async def get_user_obj_new(
return mk_resp(data=False, status_code=400) # Bad Request
return mk_resp(data=response_data)
# ### END ### API User ### get_user_obj_new() ###
# ### END ### API User ### get_user_obj_v5() ###
@router.get('/{user_id}', response_model=Resp_Body_Base)