General code clean up. Work on event tracking related
This commit is contained in:
@@ -11,6 +11,106 @@ from app.models.common_field_schema import default_num_bytes
|
|||||||
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
|
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
|
||||||
|
|
||||||
|
|
||||||
|
# ### BEGIN ### API Event Exhibit Tracking Methods ### create_event_exhibit_tracking_obj() ###
|
||||||
|
# Updated 2022-02-15
|
||||||
|
@logger_reset
|
||||||
|
def create_event_exhibit_tracking_obj(
|
||||||
|
exhibit_id: int|str,
|
||||||
|
event_exhibit_tracking_dict_obj: Event_Exhibit_Tracking_Base,
|
||||||
|
event_badge_id: int = None,
|
||||||
|
event_person_id: int = None,
|
||||||
|
create_sub_obj: bool = False,
|
||||||
|
fail_any: bool = False, # Fail if any thing goes wrong for sub objects
|
||||||
|
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
|
) -> int|bool:
|
||||||
|
log.setLevel(log_lvl)
|
||||||
|
|
||||||
|
# ### SECTION ### Secondary data validation
|
||||||
|
log.info('Create dictionary or Pydantic object')
|
||||||
|
log.debug(type(event_exhibit_tracking_dict_obj))
|
||||||
|
if isinstance(event_exhibit_tracking_dict_obj, dict):
|
||||||
|
event_exhibit_tracking_dict = event_exhibit_tracking_dict_obj
|
||||||
|
event_exhibit_tracking_dict['event_id'] = event_id
|
||||||
|
event_exhibit_tracking_dict['event_badge_id'] = event_badge_id
|
||||||
|
event_exhibit_tracking_dict['event_person_id'] = event_person_id
|
||||||
|
try:
|
||||||
|
event_exhibit_tracking_obj = Event_Exhibit_Tracking_Base(**event_exhibit_tracking_dict)
|
||||||
|
except ValidationError as e:
|
||||||
|
log.error(e.json())
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
event_exhibit_tracking_obj = event_exhibit_tracking_dict_obj
|
||||||
|
event_exhibit_tracking_obj.event_id = event_id
|
||||||
|
event_exhibit_tracking_obj.event_badge_id = event_badge_id
|
||||||
|
event_exhibit_tracking_obj.event_person_id = event_person_id
|
||||||
|
log.debug(event_exhibit_tracking_obj)
|
||||||
|
|
||||||
|
event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_badge_id_random', 'event_person', 'event_person_id_random', 'created_on', 'updated_on'})
|
||||||
|
|
||||||
|
# ### SECTION ### Process data
|
||||||
|
if event_exhibit_tracking_dict_in_result := sql_insert(
|
||||||
|
data = event_exhibit_tracking_dict,
|
||||||
|
table_name = 'event_exhibit_tracking',
|
||||||
|
rm_id_random = True,
|
||||||
|
id_random_length = default_num_bytes
|
||||||
|
): pass
|
||||||
|
else:
|
||||||
|
log.warning(f'Event Exhibit Tracking not created.')
|
||||||
|
return False
|
||||||
|
|
||||||
|
log.debug(event_exhibit_tracking_dict_in_result)
|
||||||
|
event_exhibit_tracking_id = event_exhibit_tracking_dict_in_result
|
||||||
|
|
||||||
|
log.info(f'Returning the new Event Exhibit Tracking ID: {event_exhibit_tracking_id}')
|
||||||
|
|
||||||
|
return event_exhibit_tracking_id
|
||||||
|
# ### END ### API Event Exhibit Tracking Methods ### create_event_exhibit_tracking_obj() ###
|
||||||
|
|
||||||
|
|
||||||
|
# ### BEGIN ### API Event Exhibit Tracking Methods ### update_event_exhibit_tracking_obj() ###
|
||||||
|
# Updated 2022-02-15
|
||||||
|
@logger_reset
|
||||||
|
def update_event_exhibit_tracking_obj(
|
||||||
|
event_exhibit_tracking_id: int,
|
||||||
|
event_exhibit_tracking_dict_obj: Event_Exhibit_Tracking_Base,
|
||||||
|
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
|
) -> bool:
|
||||||
|
log.setLevel(log_lvl)
|
||||||
|
|
||||||
|
# ### SECTION ### Secondary data validation
|
||||||
|
log.info('Create dictionary or Pydantic object')
|
||||||
|
log.debug(type(event_exhibit_tracking_dict_obj))
|
||||||
|
if isinstance(event_exhibit_tracking_dict_obj, dict):
|
||||||
|
event_exhibit_tracking_dict = event_exhibit_tracking_dict_obj
|
||||||
|
event_exhibit_tracking_dict['id'] = event_exhibit_tracking_id
|
||||||
|
try:
|
||||||
|
event_exhibit_tracking_obj = Person_Base(**event_exhibit_tracking_dict)
|
||||||
|
except ValidationError as e:
|
||||||
|
log.error(e.json())
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
event_exhibit_tracking_obj = event_exhibit_tracking_dict_obj
|
||||||
|
event_exhibit_tracking_obj.id = event_exhibit_tracking_id
|
||||||
|
log.debug(event_exhibit_tracking_obj)
|
||||||
|
|
||||||
|
event_exhibit_tracking_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_badge_id_random', 'event_person', 'event_person_id_random', 'created_on', 'updated_on'})
|
||||||
|
|
||||||
|
# ### SECTION ### Process data
|
||||||
|
if event_exhibit_tracking_dict_up_result := sql_update(
|
||||||
|
data = event_exhibit_tracking_dict,
|
||||||
|
table_name = 'event_exhibit_tracking',
|
||||||
|
rm_id_random = True,
|
||||||
|
): pass
|
||||||
|
else:
|
||||||
|
log.warning(f'Event Exhibit Tracking not updated.')
|
||||||
|
return False
|
||||||
|
|
||||||
|
log.debug(event_exhibit_tracking_dict_up_result)
|
||||||
|
|
||||||
|
return True
|
||||||
|
# ### END ### API Event Exhibit Tracking Methods ### update_event_exhibit_tracking_obj() ###
|
||||||
|
|
||||||
|
|
||||||
# ### BEGIN ### API Event Exhibit Tracking Methods ### load_event_exhibit_tracking_obj() ###
|
# ### BEGIN ### API Event Exhibit Tracking Methods ### load_event_exhibit_tracking_obj() ###
|
||||||
# Updated 2022-02-14
|
# Updated 2022-02-14
|
||||||
@logger_reset
|
@logger_reset
|
||||||
@@ -59,7 +159,7 @@ def load_event_exhibit_tracking_obj(
|
|||||||
else: event_exhibit_tracking_obj.event_exhibit = None
|
else: event_exhibit_tracking_obj.event_exhibit = None
|
||||||
|
|
||||||
if inc_event_person:
|
if inc_event_person:
|
||||||
log.info('Need to include Event Person data...')
|
log.info('Need to include Event Exhibit data...')
|
||||||
event_person_id = event_exhibit_tracking_rec.get('event_person_id', None)
|
event_person_id = event_exhibit_tracking_rec.get('event_person_id', None)
|
||||||
log.debug(event_person_id)
|
log.debug(event_person_id)
|
||||||
from app.methods.event_person_methods import load_event_person_obj
|
from app.methods.event_person_methods import load_event_person_obj
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Set, Union
|
|||||||
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
|
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
|
||||||
|
|
||||||
from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update
|
from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update
|
||||||
from app.lib_general import log, logging
|
from app.lib_general import log, logging, logger_reset
|
||||||
|
|
||||||
from app.models.common_field_schema import default_num_bytes
|
from app.models.common_field_schema import default_num_bytes
|
||||||
from app.models.event_person_tracking_models import Event_Person_Tracking_Base
|
from app.models.event_person_tracking_models import Event_Person_Tracking_Base
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ def create_person_kiss(
|
|||||||
contact_id: int|None = None,
|
contact_id: int|None = None,
|
||||||
organization_id: int|None = None,
|
organization_id: int|None = None,
|
||||||
user_id: int|None = None,
|
user_id: int|None = None,
|
||||||
|
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
) -> int|bool:
|
) -> int|bool:
|
||||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(log_lvl)
|
||||||
log.debug(locals())
|
|
||||||
|
|
||||||
# ### SECTION ### Secondary data validation
|
# ### SECTION ### Secondary data validation
|
||||||
log.info('Create dictionary or Pydantic object')
|
log.info('Create dictionary or Pydantic object')
|
||||||
@@ -47,7 +47,6 @@ def create_person_kiss(
|
|||||||
else:
|
else:
|
||||||
person_obj = person_dict_obj
|
person_obj = person_dict_obj
|
||||||
person_obj.account_id = account_id
|
person_obj.account_id = account_id
|
||||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
|
||||||
log.debug(person_obj)
|
log.debug(person_obj)
|
||||||
|
|
||||||
person_dict = person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'contact_id', 'contact_id_random', 'email', 'cc_email', 'membership_person_id', 'membership_person_id_random', 'organization', 'user', 'created_on', 'updated_on'})
|
person_dict = person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'contact', 'contact_id', 'contact_id_random', 'email', 'cc_email', 'membership_person_id', 'membership_person_id_random', 'organization', 'user', 'created_on', 'updated_on'})
|
||||||
@@ -59,7 +58,6 @@ def create_person_kiss(
|
|||||||
|
|
||||||
# person_obj.account_id = account_id # Is this needed?
|
# person_obj.account_id = account_id # Is this needed?
|
||||||
|
|
||||||
|
|
||||||
# Look for a contact_id in the contact_obj
|
# Look for a contact_id in the contact_obj
|
||||||
if contact_id: pass
|
if contact_id: pass
|
||||||
elif contact_id := person_obj.contact.id: pass
|
elif contact_id := person_obj.contact.id: pass
|
||||||
@@ -133,7 +131,7 @@ def create_person_kiss(
|
|||||||
else: return False
|
else: return False
|
||||||
else: pass
|
else: pass
|
||||||
|
|
||||||
log.info(f'Returning the Person ID: {person_id}')
|
log.info(f'Returning the new Person ID: {person_id}')
|
||||||
|
|
||||||
return person_id
|
return person_id
|
||||||
# ### END ### API Person Methods ### create_person_kiss() ###
|
# ### END ### API Person Methods ### create_person_kiss() ###
|
||||||
@@ -149,9 +147,9 @@ def update_person_kiss(
|
|||||||
contact_id: int|None = None,
|
contact_id: int|None = None,
|
||||||
organization_id: int|None = None,
|
organization_id: int|None = None,
|
||||||
user_id: int|None = None,
|
user_id: int|None = None,
|
||||||
):
|
log_lvl: int = logging.WARNING, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
) -> bool:
|
||||||
log.debug(locals())
|
log.setLevel(log_lvl)
|
||||||
|
|
||||||
# ### SECTION ### Secondary data validation
|
# ### SECTION ### Secondary data validation
|
||||||
log.info('Create dictionary or Pydantic object')
|
log.info('Create dictionary or Pydantic object')
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from app.db_sql import redis_lookup_id_random
|
|||||||
from app.lib_general import log, logging
|
from app.lib_general import log, logging
|
||||||
|
|
||||||
from .common_field_schema import base_fields, default_num_bytes
|
from .common_field_schema import base_fields, default_num_bytes
|
||||||
|
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
|
||||||
|
|
||||||
class Event_Exhibit_Base(BaseModel):
|
class Event_Exhibit_Base(BaseModel):
|
||||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
@@ -72,6 +72,9 @@ class Event_Exhibit_Base(BaseModel):
|
|||||||
created_on: Optional[datetime.datetime] = None
|
created_on: Optional[datetime.datetime] = None
|
||||||
updated_on: Optional[datetime.datetime] = None
|
updated_on: Optional[datetime.datetime] = None
|
||||||
|
|
||||||
|
# Including other related objects
|
||||||
|
event_exhibit_tracking_list: Optional[list[Event_Exhibit_Tracking_Base]]
|
||||||
|
|
||||||
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
||||||
|
|
||||||
#@validator('event_exhibit_id_random', always=True)
|
#@validator('event_exhibit_id_random', always=True)
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ from app.lib_general import log, logging
|
|||||||
|
|
||||||
from app.models.common_field_schema import base_fields, default_num_bytes
|
from app.models.common_field_schema import base_fields, default_num_bytes
|
||||||
|
|
||||||
|
from app.models.event_badge_models import Event_Badge_Base
|
||||||
|
from app.models.event_person_models import Event_Person_Base
|
||||||
|
|
||||||
|
|
||||||
class Event_Exhibit_Tracking_Base(BaseModel):
|
class Event_Exhibit_Tracking_Base(BaseModel):
|
||||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
@@ -65,6 +68,10 @@ class Event_Exhibit_Tracking_Base(BaseModel):
|
|||||||
|
|
||||||
event_exhibit_name: Optional[str]
|
event_exhibit_name: Optional[str]
|
||||||
|
|
||||||
|
# Including other related objects
|
||||||
|
event_badge: Optional[Union[Event_Badge_Base, None]]
|
||||||
|
event_person: Optional[Union[Event_Person_Base, None]]
|
||||||
|
|
||||||
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
||||||
|
|
||||||
#@validator('event_exhibit_tracking_id_random', always=True)
|
#@validator('event_exhibit_tracking_id_random', always=True)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from app.lib_general import log, logging
|
|||||||
from app.models.common_field_schema import base_fields, default_num_bytes
|
from app.models.common_field_schema import base_fields, default_num_bytes
|
||||||
# from app.models.event_models import Event_Base # Causes an import loop
|
# from app.models.event_models import Event_Base # Causes an import loop
|
||||||
from app.models.event_badge_models import Event_Badge_Base
|
from app.models.event_badge_models import Event_Badge_Base
|
||||||
|
# from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base # Causes an import loop
|
||||||
from app.models.event_person_profile_models import Event_Person_Profile_Base
|
from app.models.event_person_profile_models import Event_Person_Profile_Base
|
||||||
from app.models.event_registration_models import Event_Registration_Base
|
from app.models.event_registration_models import Event_Registration_Base
|
||||||
from app.models.person_models import Person_Base
|
from app.models.person_models import Person_Base
|
||||||
@@ -103,6 +104,7 @@ class Event_Person_Base(BaseModel):
|
|||||||
event_badge_vendor: Optional[Event_Badge_Base] # Additional vendor badge
|
event_badge_vendor: Optional[Event_Badge_Base] # Additional vendor badge
|
||||||
event_badge_vip: Optional[Event_Badge_Base] # Additional VIP badge
|
event_badge_vip: Optional[Event_Badge_Base] # Additional VIP badge
|
||||||
event_exhibit_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits
|
event_exhibit_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more exhibits
|
||||||
|
# event_exhibit_tracking_list: Optional[list[Event_Exhibit_Tracking_Base]]
|
||||||
event_file_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files
|
event_file_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more files
|
||||||
event_location_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?)
|
event_location_list: Optional[list] # Use event_person_detail table. An event_person record can be linked to one or more locations (but unlikely?)
|
||||||
#event_person_detail_list: Optional[list] # list of Event_Person_Detail
|
#event_person_detail_list: Optional[list] # list of Event_Person_Detail
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
import datetime
|
import datetime
|
||||||
#from datetime import datetime, time, timedelta
|
|
||||||
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
|
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
|
||||||
from pydantic import BaseModel, EmailStr, Field
|
from pydantic import BaseModel, EmailStr, Field
|
||||||
from typing import Dict, List, Optional, Set, Union
|
from typing import Dict, List, Optional, Set, Union
|
||||||
|
|
||||||
from app.lib_general import *
|
from app.lib_general import log, logging, common_route_params, Common_Route_Params
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.db_sql import *
|
from app.db_sql import sql_enable_part, sql_insert, sql_update, sql_insert_or_update, sql_limit_offset_part, sql_select, sql_delete, 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 .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
|
||||||
|
|
||||||
from app.models.event_exhibit_models import Event_Exhibit_Base
|
from app.models.event_exhibit_models import Event_Exhibit_Base
|
||||||
from app.models.response_models import *
|
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select,
|
|||||||
|
|
||||||
from app.routers.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.methods.event_exhibit_tracking_methods import get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj
|
from app.methods.event_exhibit_tracking_methods import create_event_exhibit_tracking_obj, get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj, update_event_exhibit_tracking_obj
|
||||||
|
|
||||||
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
|
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
|
||||||
from app.models.response_models import *
|
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
@@ -22,15 +22,38 @@ router = APIRouter()
|
|||||||
@router.post('/event/exhibit/tracking', response_model=Resp_Body_Base)
|
@router.post('/event/exhibit/tracking', response_model=Resp_Body_Base)
|
||||||
async def post_event_exhibit_tracking_obj(
|
async def post_event_exhibit_tracking_obj(
|
||||||
event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base,
|
event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base,
|
||||||
x_account_id: str = Header(...),
|
event_exhibit_id: str = Query(..., min_length=11, max_length=22),
|
||||||
return_obj: Optional[bool] = True,
|
event_badge_id: str = Query(None, min_length=11, max_length=22),
|
||||||
by_alias: Optional[bool] = True,
|
event_person_id: str = Query(None, min_length=11, max_length=22),
|
||||||
exclude_unset: Optional[bool] = True,
|
|
||||||
response: Response = Response,
|
return_obj: bool = True,
|
||||||
|
|
||||||
|
commons: Common_Route_Params = Depends(common_route_params),
|
||||||
):
|
):
|
||||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
log.debug(locals())
|
log.debug(locals())
|
||||||
|
|
||||||
|
# ### SECTION ### Secondary data validation
|
||||||
|
if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass
|
||||||
|
# elif event_exhibit_id is None: pass
|
||||||
|
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Exhibit ID was invalid or not found.')
|
||||||
|
|
||||||
|
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
|
||||||
|
# elif event_badge_id is None: pass
|
||||||
|
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Badge ID was invalid or not found.')
|
||||||
|
|
||||||
|
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
|
||||||
|
# elif event_person_id is None: pass
|
||||||
|
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Person ID was invalid or not found.')
|
||||||
|
|
||||||
|
# ### SECTION ### Process data
|
||||||
|
if membership_person_id := create_membership_person_obj(
|
||||||
|
account_id = commons.x_account_id,
|
||||||
|
person_id = person_id,
|
||||||
|
membership_person_dict_obj = membership_person_obj,
|
||||||
|
): pass
|
||||||
|
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The membership person was not created. Check the field names and data types.') # Bad Request
|
||||||
|
|
||||||
obj_type = 'event_exhibit_tracking'
|
obj_type = 'event_exhibit_tracking'
|
||||||
event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True)
|
event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True)
|
||||||
result = post_obj_template(
|
result = post_obj_template(
|
||||||
|
|||||||
Reference in New Issue
Block a user