This commit is contained in:
Scott Idem
2022-07-15 13:09:07 -04:00
parent 8fa438336f
commit ed6ae8c93e
6 changed files with 108 additions and 128 deletions

View File

@@ -361,12 +361,12 @@ app.include_router(
) )
app.include_router( app.include_router(
site.router, site.router,
prefix='/site', # prefix='/site',
tags=['Site'], tags=['Site'],
) )
app.include_router( app.include_router(
site_domain.router, site_domain.router,
prefix='/site/domain', # prefix='/site/domain',
tags=['Site Domain'], tags=['Site Domain'],
) )
app.include_router( app.include_router(

View File

@@ -1,11 +1,10 @@
from __future__ import annotations
import datetime import datetime
from typing import Dict, List, Optional, Set, Union 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 redis_lookup_id_random, sql_insert, sql_select, sql_update 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 from app.lib_general import log, logging, logger_reset
from app.models.site_domain_models import Site_Domain_Base 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() ### # ### BEGIN ### API Site Domain Methods ### load_site_domain_obj() ###
def load_site_domain_obj( def load_site_domain_obj(
site_domain_id: int|str, site_domain_id: int|str,
limit: int = 1000, enabled: str = 'enabled', # enabled, disabled, all
limit: int = 100,
offset: int = 0,
by_alias: bool = True, by_alias: bool = True,
exclude_unset: bool = True, exclude_unset: bool = True,
model_as_dict: bool = False, 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: ) -> Site_Domain_Base|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) 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 if site_domain_id := redis_lookup_id_random(record_id_random=site_domain_id, table_name='site_domain'): pass
else: return False 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) log.debug(site_domain_rec)
else: return False else: return False
@@ -104,45 +108,30 @@ def update_site_domain_obj(
# ### BEGIN ### API Site Domain Methods ### get_site_domain_rec_list() ### # ### BEGIN ### API Site Domain Methods ### get_site_domain_rec_list() ###
def get_site_domain_rec_list( def get_site_domain_rec_list(
for_obj_type: str, site_id: int,
for_obj_id: str,
limit: int = 1000,
enabled: str = 'enabled', # enabled, disabled, all enabled: str = 'enabled', # enabled, disabled, all
limit: int = 100,
offset: int = 0,
) -> list|bool: ) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) 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 else: return False
data = {} data = {}
data[f'{for_obj_type}_id'] = for_obj_id data['site_id'] = site_id
# data['for_obj_type'] = for_obj_type
sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id'
# if enabled in ['enabled', 'disabled', 'all']: sql_enabled, data['enable'] = sql_enable_part(table_name='site_domain', enabled=enabled) # Reasonably safe return str and bool
# if enabled == 'enabled': sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str
# 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 = f""" sql = f"""
SELECT `tbl`.id AS 'site_domain_id', `tbl`.id_random AS 'site_domain_id_random' SELECT `site_domain`.id AS 'site_domain_id', `site_domain`.id_random AS 'site_domain_id_random'
FROM `site_domain` AS `tbl` FROM `site_domain` AS `site_domain`
WHERE WHERE
{sql_obj_type_id} `site_domain`.site_id = :site_id
{sql_enabled} {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}; {sql_limit};
""" """
@@ -150,8 +139,6 @@ def get_site_domain_rec_list(
site_domain_rec_li = site_domain_rec_li_result site_domain_rec_li = site_domain_rec_li_result
else: else:
site_domain_rec_li = [] 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 return site_domain_rec_li
# ### END ### API Site Domain Methods ### get_site_domain_rec_list() ### # ### END ### API Site Domain Methods ### get_site_domain_rec_list() ###

View File

@@ -1,11 +1,10 @@
from __future__ import annotations
import datetime import datetime
from typing import Dict, List, Optional, Set, Union 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 redis_lookup_id_random, sql_insert, sql_select, sql_update 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 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 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() ### # ### BEGIN ### API Site Methods ### load_site_obj() ###
def load_site_obj( def load_site_obj(
site_id: int|str, site_id: int|str,
limit: int = 1000, enabled: str = 'enabled', # enabled, disabled, all
limit: int = 100,
offset: int = 0,
by_alias: bool = True, by_alias: bool = True,
exclude_unset: bool = True, exclude_unset: bool = True,
model_as_dict: bool = False, model_as_dict: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_site_domain_list: bool = False, inc_site_domain_list: bool = False,
) -> Site_Base|bool: ) -> Site_Base|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
@@ -69,10 +69,10 @@ def load_site_obj(
# Updated 2021-06-18 # Updated 2021-06-18
if inc_site_domain_list: if inc_site_domain_list:
if site_domain_rec_list_result := get_site_domain_rec_list( if site_domain_rec_list_result := get_site_domain_rec_list(
for_obj_type = 'site', site_id = site_id,
for_obj_id = site_id,
limit = limit,
enabled = enabled, enabled = enabled,
limit = limit,
offset = offset,
): ):
site_domain_result_list = [] site_domain_result_list = []
for site_domain_rec in site_domain_rec_list_result: 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() ### # ### BEGIN ### API Site Methods ### get_site_rec_list() ###
# Updated 2022-06-14
@logger_reset
def get_site_rec_list( def get_site_rec_list(
for_obj_type: str, account_id: int,
for_obj_id: str,
limit: int = 1000,
enabled: str = 'enabled', # enabled, disabled, all enabled: str = 'enabled', # enabled, disabled, all
limit: int = 100,
offset: int = 0,
) -> list|bool: ) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals()) 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 else: return False
data = {} data = {}
data[f'{for_obj_type}_id'] = for_obj_id data['account_id'] = account_id
# data['for_obj_type'] = for_obj_type
sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id'
if enabled in ['enabled', 'disabled', 'all']: sql_enabled, data['enable'] = sql_enable_part(table_name='site', enabled=enabled) # Reasonably safe return str and bool
if enabled == 'enabled': sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str
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 = f""" sql = f"""
SELECT `tbl`.id AS 'site_id', `tbl`.id_random AS 'site_id_random' SELECT `site`.id AS 'site_id', `site`.id_random AS 'site_id_random'
FROM `site` AS `tbl` FROM `site` AS `site`
WHERE WHERE
{sql_obj_type_id} `site`.account_id = :account_id
{sql_enabled} {sql_enabled}
ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC ORDER BY `site`.created_on DESC, `site`.updated_on DESC
{sql_limit}; {sql_limit};
""" """
@@ -171,8 +159,6 @@ def get_site_rec_list(
site_rec_li = site_rec_li_result site_rec_li = site_rec_li_result
else: else:
site_rec_li = [] site_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(site_rec_li_result)
return site_rec_li return site_rec_li
# ### END ### API Site Methods ### get_site_rec_list() ### # ### END ### API Site Methods ### get_site_rec_list() ###

View File

@@ -1,16 +1,18 @@
import datetime import datetime, pytz, secrets, time
#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 log, logging 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 sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random 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.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_models import Site_Base
from app.models.site_domain_models import Site_Domain_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 = APIRouter()
@router.post('', response_model=Resp_Body_Base) @router.post('/site', response_model=Resp_Body_Base)
async def post_site_obj( async def post_site_obj(
obj: Site_Base, obj: Site_Base,
x_account_id: str = Header(...), x_account_id: str = Header(...),
@@ -42,7 +44,7 @@ async def post_site_obj(
return result 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( async def patch_site_obj(
obj_id: str = Query(..., min_length=1, max_length=22), obj_id: str = Query(..., min_length=1, max_length=22),
obj: Site_Base = None, obj: Site_Base = None,
@@ -70,7 +72,7 @@ async def patch_site_obj(
return result 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( async def get_site_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50), 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), 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 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( async def get_site_obj(
obj_id: str = Query(..., min_length=1, max_length=22), obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...), x_account_id: str = Header(...),
@@ -114,7 +116,7 @@ async def get_site_obj(
return result 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( async def delete_site_obj(
obj_id: str = Query(..., min_length=1, max_length=22), obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...), x_account_id: str = Header(...),
@@ -131,45 +133,50 @@ async def delete_site_obj(
return result return result
# @router.get('/domain/lookup_fqdn', response_model=Resp_Body_Base) # ### BEGIN ### API Site ### get_account_site_obj_li() ###
# async def get_site_obj( # Updated 2021-12-13
# fqdn: str, @router.get('/account/{account_id}/site/list', response_model=Resp_Body_Base)
# access_key: Optional[str] = None, async def get_account_site_obj_li(
# referrer: Optional[str] = None, account_id: str = Query(..., min_length=11, max_length=22),
# 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())
# data = {} inc_site_domain_list: bool = False,
# data['fqdn'] = fqdn
# data['domain_access_key'] = access_key
# data['required_referrer'] = referrer
# if access_key: commons: Common_Route_Params = Depends(common_route_params),
# sql_domain_access_key = 'AND site_domain.domain_access_key = :domain_access_key' ):
# if referrer: log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# sql_referrer = 'AND site_domain.required_referrer = :required_referrer' log.debug(locals())
# sql = """ if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
# SELECT * else: return mk_resp(data=None, status_code=404, response=commons.response)
# FROM `v_site_domain` AS site_domain
# WHERE site_domain.fqdn = :fqdn
# {sql_domain_access_key}
# {sql_referrer}
# ;
# """
# if site_domain_obj_result := sql_select(data=data, sql=sql): # Updated 2021-12-13
# try: if site_rec_list_result := get_site_rec_list(
# site_domain_obj = Site_Domain_Base(**site_domain_obj_result) account_id = account_id,
# log.debug(order_obj) # hidden = 'all', # hidden, not_hidden, all
# except ValidationError as e: enabled = commons.enabled,
# log.error(e.json()) limit = commons.limit,
# return mk_resp(data=order_obj_li) offset = commons.offset,
# else: ):
# log.debug(order_obj_li_result) site_result_list = []
# return mk_resp(data=False, status_code=404, response=response) 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() ###

View File

@@ -19,7 +19,7 @@ from app.models.site_domain_models import Site_Domain_Base
router = APIRouter() router = APIRouter()
@router.post('', response_model=Resp_Body_Base) @router.post('/site/domain', response_model=Resp_Body_Base)
async def post_site_domain_obj( async def post_site_domain_obj(
obj: Site_Domain_Base, obj: Site_Domain_Base,
x_account_id: str = Header(...), x_account_id: str = Header(...),
@@ -44,7 +44,7 @@ async def post_site_domain_obj(
return result 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( async def patch_site_domain_obj(
obj: Site_Domain_Base, obj: Site_Domain_Base,
obj_id: str = Query(..., min_length=1, max_length=22), obj_id: str = Query(..., min_length=1, max_length=22),
@@ -73,7 +73,7 @@ async def patch_site_domain_obj(
return result 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( async def lookup_site_domain_obj(
fqdn: str, fqdn: str,
access_key: Optional[str] = Query(None, min_length=4, max_length=50), 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) 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( async def get_site_domain_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50), 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), 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 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( async def get_site_domain_obj(
site_domain_id: str = Query(..., min_length=11, max_length=22), site_domain_id: str = Query(..., min_length=11, max_length=22),
x_account_id: str = Header(...), 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) 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( async def delete_site_domain_obj(
obj_id: str = Query(..., min_length=1, max_length=22), obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...), x_account_id: str = Header(...),

View File

@@ -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.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.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 from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template