Working on event_person and session proposals. Also general clean up of models and methods.

This commit is contained in:
Scott Idem
2021-05-27 23:10:53 -04:00
parent 65fd3ebe28
commit 486236f0a8
10 changed files with 281 additions and 14 deletions

View File

@@ -18,7 +18,7 @@ from .lib_general import *
from .log import *
# Import the routers here first:
from .routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_person, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from .routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_person, event_person_detail, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from .db_sql import db
@@ -134,6 +134,14 @@ app.include_router(
#dependencies=[Depends(get_account_header)],
#responses={404: {'description': 'Not found'}},
)
app.include_router(
event_person.router,
prefix='/event/person/detail',
tags=['Event Person Detail'],
#dependencies=[Depends(get_token_header)],
#dependencies=[Depends(get_account_header)],
#responses={404: {'description': 'Not found'}},
)
app.include_router(
event_registration.router,
prefix='/event/registration',

View File

@@ -36,7 +36,15 @@ def create_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool:
# ### BEGIN ### API Event Person Methods ### load_event_person_obj() ###
def load_event_person_obj(event_person_id:int|str, inc_person:bool=False, inc_user:bool=False, inc_event_person_detail:bool=False, inc_event_registration:bool=False, inc_event_badge:bool=False) -> Event_Person_Base|bool:
def load_event_person_obj(
event_person_id:int|str,
inc_event:bool=False,
inc_event_badge:bool=False,
inc_event_person_detail:bool=False,
inc_event_registration:bool=False,
inc_person:bool=False,
inc_user:bool=False
) -> Event_Person_Base|bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
@@ -46,6 +54,33 @@ def load_event_person_obj(event_person_id:int|str, inc_person:bool=False, inc_us
if event_person_rec := sql_select(table_name='v_event_person', record_id=event_person_id):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_rec)
event_person_obj = Event_Person_Base(**event_person_rec)
person_id = event_person_obj.person_id
user_id = event_person_obj.user_id
if inc_event: pass
if inc_event_badge: pass
if inc_event_person_detail: pass
if inc_event_registration: pass
if inc_person:
if person_rec := sql_select(table_name='v_person', field_name='person_id', field_value=person_id):
event_person_rec['person'] = person_rec
event_person_obj.person = person_rec
#log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(event_person_rec)
if inc_user:
user_obj = load_user_obj(user_id=user_id) # Not including roles, contact, or organization
log.debug(user_obj)
event_person_obj.user = user_obj
#if user_rec := sql_select(table_name='v_user', field_name='user_id', field_value=user_id):
# event_person_rec['user'] = user_rec
#log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
#log.debug(event_person_rec)
else:
return False

View File

@@ -35,6 +35,7 @@ base_fields['event_badge_id_random'] = xxx_id_random_field_schema
base_fields['event_device_id_random'] = xxx_id_random_field_schema
base_fields['event_location_id_random'] = xxx_id_random_field_schema
base_fields['event_person_id_random'] = xxx_id_random_field_schema
base_fields['event_person_detail_id_random'] = xxx_id_random_field_schema
base_fields['event_presentation_id_random'] = xxx_id_random_field_schema
base_fields['event_presenter_id_random'] = xxx_id_random_field_schema
base_fields['event_registration_id_random'] = xxx_id_random_field_schema

View File

@@ -0,0 +1,80 @@
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 ..db_sql import redis_lookup_id_random
from ..lib_general import *
from .common_field_schema import base_fields, default_num_bytes
#from .event_presentation_models import Event_Presentation_Base
#from .event_presenter_models import Event_Presenter_Base
from .event_session_models import Event_Session_Base
class Event_Person_Detail_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['event_person_detail_id_random'],
alias='event_person_detail_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='event_person_detail_id'
)
event_person_id_random: Optional[str]
event_person_id: Optional[int]
#event_abstract: Optional[Event_Abstract_Base]
#event_exhibit: Optional[Event_Exhibit_Base]
#event_file: Optional[Event_File_Base]
#event_location: Optional[Event_Location_Base]
#event_presentation: Optional[Event_Presentation_Base]
#event_presenter: Optional[Event_Presenter_Base]
event_session: Optional[Event_Session_Base]
#event_track: Optional[Event_Track_Base]
priority: Optional[bool]
sort: Optional[int]
group: Optional[str]
notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('event_person_detail_id_random', always=True)
def event_person_detail_id_random_copy(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
return values['id_random']
return None
@validator('id', always=True)
def event_person_detail_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='event_person_detail')
return None
@validator('event_person_id', always=True)
def event_person_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['event_person_id_random']:
return redis_lookup_id_random(record_id_random=values['event_person_id_random'], table_name='event_person')
return None
class Config:
underscore_attrs_are_private = True
fields = base_fields

View File

@@ -8,9 +8,11 @@ from ..db_sql import redis_lookup_id_random
from ..lib_general import *
from .common_field_schema import base_fields, default_num_bytes
from .event_models import Event_Base
from .event_badge_models import Event_Badge_Base
from .person_model import Person_Base
from .event_person_detail_models import Event_Person_Detail_Base
from .event_registration_models import Event_Registration_Base
from .person_model import Person_Base
from .user_model import User_Base
@@ -125,9 +127,6 @@ class Event_Person_Base(BaseModel):
user_id_random: Optional[str]
user_id: Optional[int]
event_badge: Optional[dict] # Should be Event_Badge_Base()
event_registration: Optional[dict] # Should be Event_Registration_Base()
event_abstract: Optional[list] # An event_person record can be linked to one or more abstracts
event_exhibit: Optional[list] # An event_person record can be linked to one or more exhibits
event_file: Optional[list] # An event_person record can be linked to one or more files
@@ -137,6 +136,10 @@ class Event_Person_Base(BaseModel):
event_session: Optional[list] # An event_person record can be linked to one or more sessions
event_track: Optional[list] # An event_person record can be linked to one or more tracks
event: Optional[Event_Base] = Event_Base()
event_badge: Optional[Event_Badge_Base] = Event_Badge_Base()
event_person_detail: Optional[Event_Person_Detail_Base] = Event_Person_Detail_Base()
event_registration: Optional[Event_Registration_Base] = Event_Registration_Base()
person: Optional[Person_Base] = Person_Base()
user: Optional[User_Base] = User_Base()

View File

@@ -7,12 +7,12 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from ..lib_general import *
from ..db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from .user_model import User_Base, User_Out_Base, User_New_Base
from .user_model import User_Base, User_New_Base, User_Out_Base
from .user_role_model import User_Role_Base
# ### BEGIN ### API User Methods ### create_user_obj() ###
def create_user_obj(user_obj_new:User_Base) -> int|bool:
def create_user_obj(user_obj_new:User_New_Base) -> int|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())

View File

@@ -27,9 +27,15 @@ router = APIRouter()
async def post_event_person_new(
event_person_new: Event_Person_New_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
return_obj: bool = True,
inc_event: bool = False,
inc_event_badge: bool = False,
inc_event_person_detail: bool = False,
inc_event_registration: bool = False,
inc_person: bool = False,
inc_user: bool = False,
by_alias: bool = True,
exclude_unset: bool = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
@@ -132,7 +138,15 @@ async def post_event_person_new(
return mk_resp(data=False)
elif isinstance(event_person_obj_result, int):
event_person_id = event_person_obj_result
event_person_obj = load_event_person_obj(event_person_id=event_person_id)
event_person_obj = load_event_person_obj(
event_person_id=event_person_id,
inc_event=inc_event,
inc_event_badge=inc_event_badge,
inc_event_person_detail=inc_event_person_detail,
inc_event_registration=inc_event_registration,
inc_person=inc_person,
inc_user=inc_user
)
log.debug(event_person_id)
log.debug(event_person_obj)
else:

View File

@@ -0,0 +1,126 @@
import datetime
#from datetime import datetime, time, timedelta
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 ..lib_general import *
from ..log import *
from app.config import settings
from app.db_sql import *
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from ..models.event_person_detail_models import Event_Person_Detail_Base
from ..models.response_model import *
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_event_person_detail_obj(
obj: Event_Person_Detail_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 = 'event_person_detail'
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_event_person_detail_obj(
obj: Event_Person_Detail_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 = 'event_person_detail'
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_event_person_detail_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 = 'event_person_detail'
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
@router.get('/{obj_id}', response_model=Resp_Body_Base)
async def get_event_person_detail_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 = 'event_person_detail'
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_event_person_detail_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 = 'event_person_detail'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result

View File

@@ -11,7 +11,7 @@ from app.db_sql import *
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from ..models.event_session_model import Event_Session_Base
from ..models.event_session_models import Event_Session_Base
from ..models.response_model import *
@@ -43,8 +43,8 @@ async def post_event_session_obj(
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_event_session_obj(
obj: Event_Session_Base,
obj_id: str = Query(..., min_length=1, max_length=22),
obj: Event_Session_Base = None,
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,