From ed6ae8c93e96931c235648d890c68a1d43bcb5b7 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 15 Jul 2022 13:09:07 -0400 Subject: [PATCH] Unknown --- app/main.py | 4 +- app/methods/site_domain_methods.py | 59 +++++++---------- app/methods/site_methods.py | 58 +++++++---------- app/routers/site.py | 101 +++++++++++++++-------------- app/routers/site_domain.py | 12 ++-- app/routers/user.py | 2 +- 6 files changed, 108 insertions(+), 128 deletions(-) diff --git a/app/main.py b/app/main.py index 7b99465..0cf1a40 100644 --- a/app/main.py +++ b/app/main.py @@ -361,12 +361,12 @@ app.include_router( ) app.include_router( site.router, - prefix='/site', + # prefix='/site', tags=['Site'], ) app.include_router( site_domain.router, - prefix='/site/domain', + # prefix='/site/domain', tags=['Site Domain'], ) app.include_router( diff --git a/app/methods/site_domain_methods.py b/app/methods/site_domain_methods.py index 31966de..c5a2dad 100644 --- a/app/methods/site_domain_methods.py +++ b/app/methods/site_domain_methods.py @@ -1,11 +1,10 @@ -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.db_sql import redis_lookup_id_random, sql_enable_part, sql_insert, sql_limit_offset_part, sql_select, sql_update +from app.lib_general import log, logging, logger_reset from app.models.site_domain_models import Site_Domain_Base @@ -40,12 +39,13 @@ def create_site_domain_obj(site_domain_obj_new:Site_Domain_Base): # ### BEGIN ### API Site Domain Methods ### load_site_domain_obj() ### def load_site_domain_obj( site_domain_id: int|str, - limit: int = 1000, + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 100, + offset: int = 0, by_alias: bool = True, exclude_unset: bool = True, model_as_dict: bool = False, - enabled: str = 'enabled', # enabled, disabled, all - inc_site_domain_list: bool = False, + # inc_site_domain_list: bool = False, ) -> Site_Domain_Base|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) @@ -53,7 +53,11 @@ def load_site_domain_obj( if site_domain_id := redis_lookup_id_random(record_id_random=site_domain_id, table_name='site_domain'): pass else: return False - if site_domain_rec := sql_select(table_name='v_site_domain', record_id=site_domain_id): + # if site_domain_rec := sql_select(table_name='v_site_domain', record_id=site_domain_id): + # log.debug(site_domain_rec) + # else: return False + + if site_domain_rec := sql_select(table_name='site_domain', record_id=site_domain_id): log.debug(site_domain_rec) else: return False @@ -104,45 +108,30 @@ def update_site_domain_obj( # ### BEGIN ### API Site Domain Methods ### get_site_domain_rec_list() ### def get_site_domain_rec_list( - for_obj_type: str, - for_obj_id: str, - limit: int = 1000, + site_id: int, enabled: str = 'enabled', # enabled, disabled, all + limit: int = 100, + offset: int = 0, ) -> 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 + if site_id := redis_lookup_id_random(record_id_random=site_id, table_name='site'): 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' + data['site_id'] = site_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_enabled, data['enable'] = sql_enable_part(table_name='site_domain', enabled=enabled) # Reasonably safe return str and bool + sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str sql = f""" - SELECT `tbl`.id AS 'site_domain_id', `tbl`.id_random AS 'site_domain_id_random' - FROM `site_domain` AS `tbl` + SELECT `site_domain`.id AS 'site_domain_id', `site_domain`.id_random AS 'site_domain_id_random' + FROM `site_domain` AS `site_domain` WHERE - {sql_obj_type_id} + `site_domain`.site_id = :site_id {sql_enabled} - ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC + ORDER BY `site_domain`.fqdn ASC, `site_domain`.access_key ASC, `site_domain`.required_referrer ASC, `site_domain`.created_on DESC, `site_domain`.updated_on DESC {sql_limit}; """ @@ -150,8 +139,6 @@ def get_site_domain_rec_list( site_domain_rec_li = site_domain_rec_li_result else: site_domain_rec_li = [] - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(site_domain_rec_li_result) return site_domain_rec_li # ### END ### API Site Domain Methods ### get_site_domain_rec_list() ### diff --git a/app/methods/site_methods.py b/app/methods/site_methods.py index b860b54..f220e62 100644 --- a/app/methods/site_methods.py +++ b/app/methods/site_methods.py @@ -1,11 +1,10 @@ -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.db_sql import redis_lookup_id_random, sql_enable_part, sql_insert, sql_limit_offset_part, sql_select, sql_update +from app.lib_general import log, logging, logger_reset from app.methods.site_domain_methods import get_site_domain_rec_list, load_site_domain_obj @@ -42,11 +41,12 @@ def create_site_obj(site_obj_new:Site_Base): # ### BEGIN ### API Site Methods ### load_site_obj() ### def load_site_obj( site_id: int|str, - limit: int = 1000, + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 100, + offset: int = 0, by_alias: bool = True, exclude_unset: bool = True, model_as_dict: bool = False, - enabled: str = 'enabled', # enabled, disabled, all inc_site_domain_list: bool = False, ) -> Site_Base|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -69,10 +69,10 @@ def load_site_obj( # Updated 2021-06-18 if inc_site_domain_list: if site_domain_rec_list_result := get_site_domain_rec_list( - for_obj_type = 'site', - for_obj_id = site_id, - limit = limit, + site_id = site_id, enabled = enabled, + limit = limit, + offset = offset, ): site_domain_result_list = [] for site_domain_rec in site_domain_rec_list_result: @@ -125,45 +125,33 @@ def update_site_obj( # ### BEGIN ### API Site Methods ### get_site_rec_list() ### +# Updated 2022-06-14 +@logger_reset def get_site_rec_list( - for_obj_type: str, - for_obj_id: str, - limit: int = 1000, + account_id: int, enabled: str = 'enabled', # enabled, disabled, all + limit: int = 100, + offset: int = 0, ) -> 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 + if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): 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' + data['account_id'] = account_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 = '' - - if limit: - data['limit'] = limit - sql_limit = f'LIMIT :limit' - else: - sql_limit = '' + sql_enabled, data['enable'] = sql_enable_part(table_name='site', enabled=enabled) # Reasonably safe return str and bool + sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str sql = f""" - SELECT `tbl`.id AS 'site_id', `tbl`.id_random AS 'site_id_random' - FROM `site` AS `tbl` + SELECT `site`.id AS 'site_id', `site`.id_random AS 'site_id_random' + FROM `site` AS `site` WHERE - {sql_obj_type_id} + `site`.account_id = :account_id {sql_enabled} - ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC + ORDER BY `site`.created_on DESC, `site`.updated_on DESC {sql_limit}; """ @@ -171,8 +159,6 @@ def get_site_rec_list( site_rec_li = site_rec_li_result else: site_rec_li = [] - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL - log.debug(site_rec_li_result) return site_rec_li # ### END ### API Site Methods ### get_site_rec_list() ### diff --git a/app/routers/site.py b/app/routers/site.py index dd0cbb0..0c8289b 100644 --- a/app/routers/site.py +++ b/app/routers/site.py @@ -1,16 +1,18 @@ -import datetime -#from datetime import datetime, time, timedelta +import datetime, pytz, secrets, time from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union -from app.lib_general import log, logging +from app.lib_general import log, logging, common_route_params, Common_Route_Params from app.config import settings from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template -from app.models.response_models import * +from app.methods.site_methods import get_site_rec_list, load_site_obj + +from app.models.common_field_schema import default_num_bytes +from app.models.response_models import Resp_Body_Base, mk_resp from app.models.site_models import Site_Base from app.models.site_domain_models import Site_Domain_Base @@ -18,7 +20,7 @@ from app.models.site_domain_models import Site_Domain_Base router = APIRouter() -@router.post('', response_model=Resp_Body_Base) +@router.post('/site', response_model=Resp_Body_Base) async def post_site_obj( obj: Site_Base, x_account_id: str = Header(...), @@ -42,7 +44,7 @@ async def post_site_obj( return result -@router.patch('/{obj_id}', response_model=Resp_Body_Base) +@router.patch('/site/{obj_id}', response_model=Resp_Body_Base) async def patch_site_obj( obj_id: str = Query(..., min_length=1, max_length=22), obj: Site_Base = None, @@ -70,7 +72,7 @@ async def patch_site_obj( return result -@router.get('/list', response_model=Resp_Body_Base) +@router.get('/site/list', response_model=Resp_Body_Base) async def get_site_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), @@ -93,7 +95,7 @@ async def get_site_obj_li( return result -@router.get('/{obj_id}', response_model=Resp_Body_Base) +@router.get('/site/{obj_id}', response_model=Resp_Body_Base) async def get_site_obj( obj_id: str = Query(..., min_length=1, max_length=22), x_account_id: str = Header(...), @@ -114,7 +116,7 @@ async def get_site_obj( return result -@router.delete('/{obj_id}', response_model=Resp_Body_Base) +@router.delete('/site/{obj_id}', response_model=Resp_Body_Base) async def delete_site_obj( obj_id: str = Query(..., min_length=1, max_length=22), x_account_id: str = Header(...), @@ -131,45 +133,50 @@ async def delete_site_obj( return result -# @router.get('/domain/lookup_fqdn', response_model=Resp_Body_Base) -# async def get_site_obj( -# fqdn: str, -# access_key: Optional[str] = None, -# referrer: Optional[str] = None, -# x_account_id: str = Header(...), -# by_alias: Optional[bool] = True, -# exclude_unset: Optional[bool] = True, -# response: Response = Response, -# ): -# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL -# log.debug(locals()) +# ### BEGIN ### API Site ### get_account_site_obj_li() ### +# Updated 2021-12-13 +@router.get('/account/{account_id}/site/list', response_model=Resp_Body_Base) +async def get_account_site_obj_li( + account_id: str = Query(..., min_length=11, max_length=22), -# data = {} -# data['fqdn'] = fqdn -# data['domain_access_key'] = access_key -# data['required_referrer'] = referrer + inc_site_domain_list: bool = False, -# if access_key: -# sql_domain_access_key = 'AND site_domain.domain_access_key = :domain_access_key' -# if referrer: -# sql_referrer = 'AND site_domain.required_referrer = :required_referrer' + commons: Common_Route_Params = Depends(common_route_params), + ): + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) -# sql = """ -# SELECT * -# FROM `v_site_domain` AS site_domain -# WHERE site_domain.fqdn = :fqdn -# {sql_domain_access_key} -# {sql_referrer} -# ; -# """ + if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass + else: return mk_resp(data=None, status_code=404, response=commons.response) -# if site_domain_obj_result := sql_select(data=data, sql=sql): -# try: -# site_domain_obj = Site_Domain_Base(**site_domain_obj_result) -# log.debug(order_obj) -# except ValidationError as e: -# log.error(e.json()) -# return mk_resp(data=order_obj_li) -# else: -# log.debug(order_obj_li_result) -# return mk_resp(data=False, status_code=404, response=response) + # Updated 2021-12-13 + if site_rec_list_result := get_site_rec_list( + account_id = account_id, + # hidden = 'all', # hidden, not_hidden, all + enabled = commons.enabled, + limit = commons.limit, + offset = commons.offset, + ): + site_result_list = [] + for site_rec in site_rec_list_result: + if load_site_result := load_site_obj( + site_id = site_rec.get('site_id', None), + enabled = commons.enabled, + # hidden = hidden, + limit = commons.limit, + offset = commons.offset, + inc_site_domain_list = inc_site_domain_list, + ): + site_result_list.append(load_site_result) + else: + site_result_list.append(None) + response_data = site_result_list + elif isinstance(site_rec_list_result, list) or site_rec_list_result is None: # Empty list or None + log.info('No results') + return mk_resp(data=False, status_code=404, response=commons.response) # Not Found + else: + log.warning('Likely bad request') + return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request + + return mk_resp(data=response_data, response=commons.response) +# ### END ### API Site ### get_account_site_obj_li() ### \ No newline at end of file diff --git a/app/routers/site_domain.py b/app/routers/site_domain.py index 9bfc36b..7afb408 100644 --- a/app/routers/site_domain.py +++ b/app/routers/site_domain.py @@ -19,7 +19,7 @@ from app.models.site_domain_models import Site_Domain_Base router = APIRouter() -@router.post('', response_model=Resp_Body_Base) +@router.post('/site/domain', response_model=Resp_Body_Base) async def post_site_domain_obj( obj: Site_Domain_Base, x_account_id: str = Header(...), @@ -44,7 +44,7 @@ async def post_site_domain_obj( return result -@router.patch('/{obj_id}', response_model=Resp_Body_Base) +@router.patch('/site/domain/{obj_id}', response_model=Resp_Body_Base) async def patch_site_domain_obj( obj: Site_Domain_Base, obj_id: str = Query(..., min_length=1, max_length=22), @@ -73,7 +73,7 @@ async def patch_site_domain_obj( return result -@router.get('/lookup_fqdn', response_model=Resp_Body_Base) +@router.get('/site/domain/lookup_fqdn', response_model=Resp_Body_Base) async def lookup_site_domain_obj( fqdn: str, access_key: Optional[str] = Query(None, min_length=4, max_length=50), @@ -162,7 +162,7 @@ async def lookup_site_domain_obj( return mk_resp(data=False, status_code=404, response=response) -@router.get('/list', response_model=Resp_Body_Base) +@router.get('/site/domain/list', response_model=Resp_Body_Base) async def get_site_domain_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), @@ -185,7 +185,7 @@ async def get_site_domain_obj_li( return result -@router.get('/{site_domain_id}', response_model=Resp_Body_Base) +@router.get('/site/domain/{site_domain_id}', response_model=Resp_Body_Base) async def get_site_domain_obj( site_domain_id: str = Query(..., min_length=11, max_length=22), x_account_id: str = Header(...), @@ -232,7 +232,7 @@ async def get_site_domain_obj( return mk_resp(data=False, status_code=404, response=response) -@router.delete('/{obj_id}', response_model=Resp_Body_Base) +@router.delete('/site/domain/{obj_id}', response_model=Resp_Body_Base) async def delete_site_domain_obj( obj_id: str = Query(..., min_length=1, max_length=22), x_account_id: str = Header(...), diff --git a/app/routers/user.py b/app/routers/user.py index 74efd78..ed28b40 100644 --- a/app/routers/user.py +++ b/app/routers/user.py @@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging, secure_hash_string, verify_secure_hash_string, common_route_params, Common_Route_Params from app.config import settings -from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random,redis_lookup_id_random +from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random, redis_lookup_id_random from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template