diff --git a/app/models/archive_content_model.py b/app/models/archive_content_model.py new file mode 100644 index 0000000..be7b0d6 --- /dev/null +++ b/app/models/archive_content_model.py @@ -0,0 +1,115 @@ +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 ..lib_general import * +from ..log import * + +from .common_field_schema import base_fields, default_num_bytes + + +class Archive_Content_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['archive_id_random'], + alias='archive_id_random', + default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + #alias='archive_id' + ) + account_id_random: Optional[str] # Is this field really needed? + account_id: Optional[int] # Is this field really needed? + archive_id_random: Optional[str] + archive_id: Optional[int] + archive_content_type_id: Optional[int] + archive_content_type: Optional[str] + lu_media_type_id: Optional[int] + lu_media_type: Optional[str] + + name: Optional[str] + description: Optional[str] + + html_content: Optional[str] + json_content: Optional[str] + url: Optional[str] + url_text: Optional[str] + + hosted_file_id_random: Optional[str] + hosted_file_id: Optional[int] + + path_file: Optional[str] + filename: Optional[str] + file_extension: Optional[str] + + original_datetime: Optional[datetime.datetime] = None + original_datetime_timezone: Optional[datetime.datetime] = None + original_location: Optional[str] = None + original_address_id: Optional[int] = None + + original_url: Optional[str] + original_url_text: Optional[str] + + meta_data: Optional[str] + access_key: Optional[str] + + enable: Optional[bool] + enable_from: Optional[datetime.datetime] = None + enable_to: Optional[datetime.datetime] = None + + 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('archive_content_id_random', always=True) + def archive_content_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 archive_content_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='archive_content') + return None + + @validator('archive_id', always=True) + def archive_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['archive_id_random']: + return redis_lookup_id_random(record_id_random=values['archive_id_random'], table_name='archive') + return None + + @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 + + class Config: + underscore_attrs_are_private = True + fields = base_fields + +Archive_Content_Base.update_forward_refs() diff --git a/app/models/archive_model.py b/app/models/archive_model.py index 8d1c8b6..2ccaa98 100644 --- a/app/models/archive_model.py +++ b/app/models/archive_model.py @@ -1 +1,95 @@ - +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 ..lib_general import * +from ..log import * + +from .common_field_schema import base_fields, default_num_bytes + + +class Archive_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['archive_id_random'], + alias='archive_id_random', + default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + #alias='archive_id' + ) + account_id_random: Optional[str] + account_id: Optional[int] + archive_type_id: Optional[int] + archive_type: Optional[str] + + name: Optional[str] + description: Optional[str] + + html_content: Optional[str] + json_content: Optional[str] + url_content: Optional[str] + url_content_text: Optional[str] + + original_datetime: Optional[datetime.datetime] = None + original_datetime_timezone: Optional[datetime.datetime] = None + original_location: Optional[str] = None + original_address_id: Optional[int] = None + + original_url: Optional[str] + original_url_text: Optional[str] + + meta_data: Optional[str] + access_key: Optional[str] + + enable: Optional[bool] + enable_from: Optional[datetime.datetime] = None + enable_to: Optional[datetime.datetime] = None + + 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('archive_id_random', always=True) + def archive_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 archive_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='archive') + return None + + @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 + + class Config: + underscore_attrs_are_private = True + fields = base_fields + +Archive_Base.update_forward_refs() diff --git a/app/models/event_exhibit_model.py b/app/models/event_exhibit_model.py new file mode 100644 index 0000000..be98248 --- /dev/null +++ b/app/models/event_exhibit_model.py @@ -0,0 +1,144 @@ +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 ..lib_general import * +from ..log import * + +from .common_field_schema import base_fields, default_num_bytes + + +class Event_Exhibit_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['event_exhibit_id_random'], + alias='event_exhibit_id_random', + default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + #alias='event_exhibit_id' + ) + account_id_random: Optional[str] + account_id: Optional[int] + event_id_random: Optional[str] + event_id: Optional[int] + organization_id_random: Optional[str] + organization_id: Optional[int] + contact_id_random: Optional[str] + contact_id: Optional[int] + person_id_random: Optional[str] + person_id: Optional[int] + status_id_random: Optional[str] + status_id: Optional[int] + + name: Optional[str] + tagline: Optional[str] + description: Optional[str] + path_logo: Optional[str] + path_thumbnail: Optional[str] + path_banner_image: Optional[str] + banner_bg_color: Optional[str] + path_background_image: Optional[str] + background_bg_color: Optional[str] + + embed_html: Optional[str] + + staff_limit: Optional[int] + hosted_file_limit: Optional[int] + + enable_organization_name_change: Optional[bool] + enable_name_change: Optional[bool] + enable_banner_image: Optional[bool] + enable_background_image: Optional[bool] + enable_embedded_content: Optional[bool] + enable_staff_photo: Optional[bool] + + # access_key: Optional[str] # Maybe use in the future? + + # enable: Optional[bool] # Maybe use in the future? + # enable_from: Optional[datetime.datetime] = None # Maybe use in the future? + # enable_to: Optional[datetime.datetime] = None # Maybe use in the future? + + 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_exhibit_id_random', always=True) + def event_exhibit_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_exhibit_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_exhibit') + return None + + @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 + + @validator('event_id', always=True) + def event_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['event_id_random']: + return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + return None + + @validator('organization_id', always=True) + def organization_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['organization_id_random']: + 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): + 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 + + @validator('person_id', always=True) + def person_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['person_id_random']: + return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') + return None + + class Config: + underscore_attrs_are_private = True + fields = base_fields + +Event_Exhibit_Base.update_forward_refs() diff --git a/app/models/event_model.py b/app/models/event_model.py index 8d1c8b6..34672b7 100644 --- a/app/models/event_model.py +++ b/app/models/event_model.py @@ -1 +1,136 @@ - +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 ..lib_general import * +from ..log import * + +from .common_field_schema import base_fields, default_num_bytes + + +class Event_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['event_id_random'], + alias='event_id_random', + default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + #alias='event_id' + ) + account_id_random: Optional[str] + account_id: Optional[int] + user_id_random: Optional[str] + user_id: Optional[int] + lu_event_type_id: Optional[int] + #lu_event_type: Optional[str] # Needs to be reviewed + + type_name: Optional[str] = Field( + alias='type' + ) + + name: Optional[str] + summary: Optional[str] + description: Optional[str] + format: Optional[str] + + lu_time_zone_id: Optional[int] + timezone: Optional[str] + start_datetime: Optional[datetime.datetime] = None + end_datetime: Optional[datetime.datetime] = None + + recurring: Optional[bool] + recurring_pattern: Optional[str] + recurring_start_time: Optional[datetime.time] + recurring_end_time: Optional[datetime.time] + recurring_text: Optional[str] + + weekday_sunday: Optional[bool] + weekday_monday: Optional[bool] + weekday_tuesday: Optional[bool] + weekday_wednesday: Optional[bool] + weekday_thursday: Optional[bool] + weekday_friday: Optional[bool] + weekday_saturday: Optional[bool] + + address_location_id: Optional[int] + location_text: Optional[str] + + online_start: Optional[datetime.datetime] = None + online_end: Optional[datetime.datetime] = None + + reg_deadline_1: Optional[datetime.datetime] = None + reg_deadline_2: Optional[datetime.datetime] = None + reg_deadline_3: Optional[datetime.datetime] = None + reg_deadline_4: Optional[datetime.datetime] = None + + max_registrants: Optional[int] + + private: Optional[bool] # invite only + physical: Optional[bool] # physical in person event + virtual: Optional[bool] # virtual remote access event + + # NOT FINISHED YET + + # access_key: Optional[str] # Maybe use in the future? + + enable: Optional[bool] + enable_from: Optional[datetime.datetime] = None + enable_to: Optional[datetime.datetime] = None + + 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_id_random', always=True) + def event_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_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') + return None + + @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 + + @validator('user_id', always=True) + def user_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') + return None + + class Config: + underscore_attrs_are_private = True + fields = base_fields + +Event_Base.update_forward_refs() diff --git a/app/models/event_registration_model.py b/app/models/event_registration_model.py index 8d1c8b6..9a6cbb1 100644 --- a/app/models/event_registration_model.py +++ b/app/models/event_registration_model.py @@ -1 +1,114 @@ - +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 ..lib_general import * +from ..log import * + +from .common_field_schema import base_fields, default_num_bytes + + +class Event_Registration_Base(BaseModel): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + id_random: Optional[str] = Field( + **base_fields['event_registration_id_random'], + alias='event_registration_id_random', + default_factory=lambda:secrets.token_urlsafe(default_num_bytes), + ) + id: Optional[int] = Field( + #alias='event_registration_id' + ) + account_id_random: Optional[str] + account_id: Optional[int] + event_id_random: Optional[str] + event_id: Optional[int] + organization_id_random: Optional[str] + organization_id: Optional[int] + contact_id_random: Optional[str] + contact_id: Optional[int] + person_id_random: Optional[str] + person_id: Optional[int] + + 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_registration_id_random', always=True) + def event_registration_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_registration_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_registration') + return None + + @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 + + @validator('event_id', always=True) + def event_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['event_id_random']: + return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') + return None + + @validator('organization_id', always=True) + def organization_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['organization_id_random']: + 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): + 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 + + @validator('person_id', always=True) + def person_id_lookup(cls, v, values, **kwargs): + log.setLevel(logging.WARNING) + log.debug(locals()) + + if values['person_id_random']: + return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') + return None + + class Config: + underscore_attrs_are_private = True + fields = base_fields + +Event_Registration_Base.update_forward_refs() diff --git a/app/routers/api_crud.py b/app/routers/api_crud.py index 763af32..bf305b0 100644 --- a/app/routers/api_crud.py +++ b/app/routers/api_crud.py @@ -12,7 +12,12 @@ from app.db_sql import * from ..models.account_model import * from ..models.account_cfg_model import * from ..models.address_model import * +from ..models.archive_model import * +from ..models.archive_content_model import * from ..models.contact_model import * +from ..models.event_model import * +from ..models.event_exhibit_model import * +from ..models.event_registration_model import * from ..models.order_model import * from ..models.site_model import * from ..models.site_domain_model import * @@ -33,22 +38,22 @@ obj_type_li['account_cfg'] = {'table_name': 'v_account_cfg_detail', 'base_name': obj_type_li['address'] = {'table_name': 'v_address', 'base_name': Address_Base} obj_type_li['archive'] = {'table_name': 'v_archive', 'base_name': Archive_Base} obj_type_li['archive_content'] = {'table_name': 'v_archive_content', 'base_name': Archive_Content_Base} -obj_type_li['change_log'] = {'table_name': 'change_log', 'base_name': Change_Log_Base} +#obj_type_li['change_log'] = {'table_name': 'change_log', 'base_name': Change_Log_Base} obj_type_li['contact'] = {'table_name': 'v_contact', 'base_name': Contact_Base} -obj_type_li['cont_edu_cert'] = {'table_name': 'cont_edu_cert', 'base_name': Cont_Edu_Cert_Base} +#obj_type_li['cont_edu_cert'] = {'table_name': 'cont_edu_cert', 'base_name': Cont_Edu_Cert_Base} obj_type_li['event'] = {'table_name': 'v_event', 'base_name': Event_Base} -obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base} -obj_type_li['event_badge_log'] = {'table_name': 'event_badge_log', 'base_name': Event_Badge_Log_Base} -obj_type_li['event_badge_template'] = {'table_name': 'event_badge_template', 'base_name': Event_Badge_Template_Base} -obj_type_li['event_device'] = {'table_name': 'event_device', 'base_name': Event_Device_Base} +#obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Badge_Base} +#obj_type_li['event_badge_log'] = {'table_name': 'event_badge_log', 'base_name': Event_Badge_Log_Base} +#obj_type_li['event_badge_template'] = {'table_name': 'event_badge_template', 'base_name': Event_Badge_Template_Base} +#obj_type_li['event_device'] = {'table_name': 'event_device', 'base_name': Event_Device_Base} obj_type_li['event_exhibit'] = {'table_name': 'v_event_exhibit', 'base_name': Event_Exhibit_Base} # NOTE check view name: *_detail? -obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file -obj_type_li['event_location'] = {'table_name': 'v_event_location', 'base_name': Event_Location_Base} -obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base} -obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base} +#obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file +#obj_type_li['event_location'] = {'table_name': 'v_event_location', 'base_name': Event_Location_Base} +#obj_type_li['event_presentation'] = {'table_name': 'v_event_presentation', 'base_name': Event_Presentation_Base} +#obj_type_li['event_presenter'] = {'table_name': 'v_event_presenter', 'base_name': Event_Presenter_Base} obj_type_li['event_registration'] = {'table_name': 'v_event_registration', 'base_name': Event_Registration_Base} -obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base} -obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base} +#obj_type_li['event_session'] = {'table_name': 'v_event_session', 'base_name': Event_Session_Base} +#obj_type_li['event_track'] = {'table_name': 'v_event_track', 'base_name': Event_Track_Base} obj_type_li['hosted_file'] = {'table_name': 'hosted_file', 'base_name': Hosted_File_Base} obj_type_li['hosted_file_link'] = {'table_name': 'hosted_file_link', 'base_name': Hosted_File_Link_Base} obj_type_li['journal'] = {'table_name': 'v_journal', 'base_name': Journal_Base}