diff --git a/app/methods/account_methods.py b/app/methods/account_methods.py index 005cfb0..36619c6 100644 --- a/app/methods/account_methods.py +++ b/app/methods/account_methods.py @@ -7,9 +7,181 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v from app.db_sql import redis_lookup_id_random, sql_select from app.lib_general import log, logging +from app.methods.event_methods import load_event_obj + +from app.models.account_models import Account_Base +from app.models.account_cfg_models import Account_Cfg_Base from app.models.membership_models import Membership_Cfg_Base +# ### BEGIN ### API Account Methods ### load_account_obj() ### +def load_account_obj( + account_id: int|str, + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 1000, + 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_order: bool = False, + inc_order_list: bool = False, + inc_order_cart: bool = False, + inc_order_cart_list: bool = False, + inc_organization: bool = False, + inc_person: bool = False, + inc_user: bool = False + ) -> Account_Base|bool: + 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 False + + if account_rec := sql_select(table_name='v_account', record_id=account_id): pass + else: return False + + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(account_rec) + + try: + account_obj = Account_Base(**account_rec) + log.debug(account_obj) + except ValidationError as e: + log.error(e.json()) + + # if inc_contact: + # contact_id = account_rec.get('contact_id', None) + # if contact_obj_result := load_contact_obj(contact_id=contact_id): + # contact_obj = contact_obj_result + # #account_obj.contact = contact_obj.dict(by_alias=True, exclude_unset=True) + # account_obj.contact = contact_obj + # else: account_obj.contact = None + + # if inc_address: + # address_id = contact_obj.address_id + # if address_obj_result := load_address_obj(address_id=address_id): + # address_obj = address_obj_result + # # account_rec['contact'].address = address_obj + # # log.debug(account_rec) + # #account_obj.contact.address = address_obj.dict(by_alias=True, exclude_unset=True) + # account_obj.contact.address = address_obj + # else: account_obj.contact.address = None + + # if inc_organization: + # organization_id = account_rec.get('organization_id', None) + # if organization_obj_result := load_organization_obj(organization_id=organization_id): + # organization_obj = organization_obj_result + # # account_rec['organization'] = organization_obj + # # log.debug(account_rec) + # #account_obj.organization = organization_obj.dict(by_alias=True, exclude_unset=True) + # account_obj.organization = organization_obj + # else: account_obj.organization = None + + if inc_event_list: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + data = {} + data['account_id'] = account_id + + if enabled in ['enabled', 'disabled', 'all']: + if enabled == 'enabled': + data['enable'] = True + sql_enabled = f'AND `event`.enable = :enable' + elif enabled == 'disabled': + data['enable'] = False + sql_enabled = f'AND `event`.enable = :enable' + elif enabled == 'all': + sql_enabled = '' + # else: event_obj['account'] = None + + if limit: + data['limit'] = limit + sql_limit = f'LIMIT :limit' + else: + sql_limit = '' + + sql = f""" + SELECT `event`.id AS 'event_id', `event`.id_random AS 'event_id_random' + FROM `event` AS `event` + WHERE `event`.account_id = :account_id + {sql_enabled} + ORDER BY `event`.created_on DESC, `event`.updated_on DESC + {sql_limit}; + """ + + #log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + if event_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + #log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_rec_li_result) + event_obj_li = [] + for event_rec in event_rec_li_result: + event_id = event_rec.get('event_id', None) + if event_obj := load_event_obj( + event_id=event_id, + enabled=enabled, + inc_address=inc_address, + inc_contact=inc_contact, + 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_exhibit_list=inc_event_exhibit_list, + inc_event_file_list=inc_event_file_list, + inc_event_location_list=inc_event_location_list, + 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_list=inc_event_presenter_list, + inc_event_registration_list=inc_event_registration_list, + inc_event_session_list=inc_event_session_list, + inc_event_track_list=inc_event_track_list, + inc_person=inc_person, + inc_user=inc_user + ): + data = event_obj.dict(by_alias=True, exclude_unset=True) + event_obj_li.append(data) + log.debug(event_obj_li) + account_obj.event_list = event_obj_li + else: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_rec_li_result) + account_obj.event_list = [] + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + return account_obj +# ### END ### API Account Methods ### load_account_obj() ### + + # ### BEGIN ### API Account Methods ### load_account_cfg_obj() ### def load_account_cfg_obj(account_id:int|str, inc_event_cfg:bool=False, inc_fundraising_cfg:bool=False, inc_membership_cfg:bool=False): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL diff --git a/app/models/account_cfg_models.py b/app/models/account_cfg_models.py index a7ad04c..d890de6 100644 --- a/app/models/account_cfg_models.py +++ b/app/models/account_cfg_models.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import * -from .common_field_schema import base_fields, default_num_bytes +from app.models.common_field_schema import base_fields, default_num_bytes class Account_Cfg_Base(BaseModel): diff --git a/app/models/account_models.py b/app/models/account_models.py index 71b4192..1997d63 100644 --- a/app/models/account_models.py +++ b/app/models/account_models.py @@ -7,7 +7,13 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import * -from .common_field_schema import base_fields, default_num_bytes +from app.models.common_field_schema import base_fields, default_num_bytes +from app.models.account_cfg_models import Account_Cfg_Base +# from app.models.address_models import Address_Base +# from app.models.contact_models import Contact_Base +# from app.models.event_models import Event_Base +# from app.models.person_models import Person_Base +# from app.models.user_models import User_Base class Account_Base(BaseModel): @@ -36,6 +42,22 @@ class Account_Base(BaseModel): created_on: Optional[datetime.datetime] = None updated_on: Optional[datetime.datetime] = None + # Including other related objects + account_cfg: Optional[Account_Cfg_Base] + address_list: Optional[list] # Address_Base() + archive_list: Optional[list] # Archive_Base() + contact_list: Optional[list] # Contact_Base() + event_list: Optional[list] # Event_Base() + journal_list: Optional[list] # Journal_Base() + order_list: Optional[list] # Order_Base() + organization_list: Optional[list] # Organization_Base() + page: Optional[list] # Page_Base() + person: Optional[list] # Person_Base() + post: Optional[list] # Post_Base() + product: Optional[list] # Product_Base() + site: Optional[list] # Site_Base() + user: Optional[list] # User_Base() + _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) #@validator('account_id_random', always=True) diff --git a/app/models/address_models.py b/app/models/address_models.py index 91db31f..c6ba5c1 100644 --- a/app/models/address_models.py +++ b/app/models/address_models.py @@ -7,8 +7,8 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes -#from .account_models import Account_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.account_models import Account_Base class Address_Base(BaseModel): diff --git a/app/models/contact_models.py b/app/models/contact_models.py index f7c80be..b20bfa3 100644 --- a/app/models/contact_models.py +++ b/app/models/contact_models.py @@ -7,9 +7,9 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes -#from .account_models import Account_Base -from .address_models import Address_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.account_models import Account_Base +from app.models.address_models import Address_Base class Contact_Base(BaseModel): diff --git a/app/models/event_models.py b/app/models/event_models.py index 6b25010..cce7f14 100644 --- a/app/models/event_models.py +++ b/app/models/event_models.py @@ -7,13 +7,12 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes - -from .address_models import Address_Base -from .contact_models import Contact_Base -from .event_person_models import Event_Person_Base -from .person_models import Person_Base -from .user_models import User_Base +from app.models.common_field_schema import base_fields, default_num_bytes +from app.models.address_models import Address_Base +from app.models.contact_models import Contact_Base +from app.models.event_person_models import Event_Person_Base +from app.models.person_models import Person_Base +from app.models.user_models import User_Base class Event_Base(BaseModel): diff --git a/app/models/event_person_models.py b/app/models/event_person_models.py index 9c7543a..91aacb0 100644 --- a/app/models/event_person_models.py +++ b/app/models/event_person_models.py @@ -7,14 +7,13 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -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 .event_person_detail_models import Event_Person_Detail_Base -from .event_registration_models import Event_Registration_Base -from .person_models import Person_Base -from .user_models import User_Base, User_Out_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.event_models import Event_Base +from app.models.event_badge_models import Event_Badge_Base +# from app.models.event_person_detail_models import Event_Person_Detail_Base +from app.models.event_registration_models import Event_Registration_Base +from app.models.person_models import Person_Base +from app.models.user_models import User_Base, User_Out_Base class Event_Person_Base(BaseModel): diff --git a/app/models/event_presentation_models.py b/app/models/event_presentation_models.py index f49c9e8..fea2467 100644 --- a/app/models/event_presentation_models.py +++ b/app/models/event_presentation_models.py @@ -7,13 +7,12 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes - -#from .event_models import Event_Base -#from .event_abstract_models import Event_Abstract_Base # This creates an import loop -from .event_person_models import Event_Person_Base -from .event_session_models import Event_Session_Base -from .person_models import Person_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.event_models import Event_Base +# from app.models.event_abstract_models import Event_Abstract_Base # This creates an import loop +from app.models.event_person_models import Event_Person_Base +from app.models.event_session_models import Event_Session_Base +from app.models.person_models import Person_Base class Event_Presentation_Base(BaseModel): diff --git a/app/models/event_presenter_models.py b/app/models/event_presenter_models.py index 2d7c250..aef250c 100644 --- a/app/models/event_presenter_models.py +++ b/app/models/event_presenter_models.py @@ -7,15 +7,14 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes - -# from .event_models import Event_Base -from .event_abstract_models import Event_Abstract_Base -from .event_person_models import Event_Person_Base -from .event_presentation_models import Event_Presentation_Base -from .event_session_models import Event_Session_Base -# from .person_models import Person_Base -# from .user_models import User_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.event_models import Event_Base +from app.models.event_abstract_models import Event_Abstract_Base +from app.models.event_person_models import Event_Person_Base +from app.models.event_presentation_models import Event_Presentation_Base +from app.models.event_session_models import Event_Session_Base +# from app.models.person_models import Person_Base +# from app.models.user_models import User_Base class Event_Presenter_Base(BaseModel): diff --git a/app/models/event_registration_models.py b/app/models/event_registration_models.py index 9259939..ea29a0c 100644 --- a/app/models/event_registration_models.py +++ b/app/models/event_registration_models.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import * -from .common_field_schema import base_fields, default_num_bytes +from app.models.common_field_schema import base_fields, default_num_bytes class Event_Registration_Base(BaseModel): diff --git a/app/models/event_session_models.py b/app/models/event_session_models.py index 89d7b92..48c2fc2 100644 --- a/app/models/event_session_models.py +++ b/app/models/event_session_models.py @@ -7,13 +7,12 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes - -#from .event_models import Event_Base -from .event_location_models import Event_Location_Base -from .event_person_models import Event_Person_Base # NOTE: Using thi will probably create an import loop -from .event_track_models import Event_Track_Base -from .person_models import Person_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.event_models import Event_Base +from app.models.event_location_models import Event_Location_Base +from app.models.event_person_models import Event_Person_Base # NOTE: Using this will probably create an import loop +from app.models.event_track_models import Event_Track_Base +from app.models.person_models import Person_Base class Event_Session_Base(BaseModel): diff --git a/app/models/event_track_models.py b/app/models/event_track_models.py index 0ca0593..796d6d8 100644 --- a/app/models/event_track_models.py +++ b/app/models/event_track_models.py @@ -7,9 +7,8 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes - -#from .event_models import Event_Base +from app.models.common_field_schema import base_fields, default_num_bytes +# from app.models.event_models import Event_Base class Event_Track_Base(BaseModel): diff --git a/app/models/organization_models.py b/app/models/organization_models.py index d4a0aee..c2a178b 100644 --- a/app/models/organization_models.py +++ b/app/models/organization_models.py @@ -7,22 +7,17 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes -#from .account_models import Account_Base -from .contact_models import Contact_Base -#from .person_models import Person_Base -#from .user_models import User_Base +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.person_models import Person_Base +# from app.models.user_models import User_Base class Organization_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - #from .account_models import Account_Base - #from .contact_models import Contact_Base - #from .person_models import Person_Base - #from .user_models import User_Base - id_random: Optional[str] = Field( **base_fields['organization_id_random'], alias='organization_id_random', diff --git a/app/models/person_models.py b/app/models/person_models.py index 78d89ce..7d42c37 100644 --- a/app/models/person_models.py +++ b/app/models/person_models.py @@ -7,11 +7,11 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging -from .common_field_schema import base_fields, default_num_bytes -# from .account_models import Account_Base -from .contact_models import Contact_Base -from .organization_models import Organization_Base -from .user_models import User_Base +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.organization_models import Organization_Base +from app.models.user_models import User_Base class Person_Base(BaseModel): diff --git a/app/models/user_models.py b/app/models/user_models.py index e2acf19..ff41bf7 100644 --- a/app/models/user_models.py +++ b/app/models/user_models.py @@ -7,13 +7,12 @@ from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationEr from app.db_sql import redis_lookup_id_random from app.lib_general import log, logging, secure_hash_string -from .common_field_schema import base_fields, default_num_bytes - -#from .account_models import Account_Base -from .contact_models import Contact_Base -from .organization_models import Organization_Base -#from .person_models import Person_Base # Causes circular import -from .user_role_models import User_Role_Base +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.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 # ### BEGIN ### API User Models ### User_New_Base() ###