Work on API CRUD, person, membership

This commit is contained in:
Scott Idem
2022-01-14 17:45:34 -05:00
parent 539fe803af
commit 9efaa2bf61
3 changed files with 42 additions and 9 deletions

View File

@@ -513,9 +513,11 @@ def sql_select(
if rm_id_random: if rm_id_random:
data = lookup_id_random_pop(obj_data=data) data = lookup_id_random_pop(obj_data=data)
log.debug(data)
sql_where = [] sql_where = []
for field_name in data: for field_name in data:
log.debug(field_name)
sql_where_line = f"""`{table_name}`.{field_name} = :{field_name}""" sql_where_line = f"""`{table_name}`.{field_name} = :{field_name}"""
sql_where.append(sql_where_line) sql_where.append(sql_where_line)

View File

@@ -4,7 +4,7 @@ import datetime, hashlib, logging, os, pytz, redis, secrets
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random from app.db_sql import get_id_random, redis_lookup_id_random
from app.lib_general import log, logging from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes from app.models.common_field_schema import base_fields, default_num_bytes
@@ -34,8 +34,8 @@ class Contact_Base(BaseModel):
linked_address_id: Optional[int] linked_address_id: Optional[int]
for_type: Optional[str] for_type: Optional[str]
for_id_random: Optional[str]
for_id: Optional[int] for_id: Optional[int]
for_id_random: Optional[Union[str,None]] = None # lambda:get_id_random(values.get('for_id'), table_name=values.get('for_type')),
name: Optional[str] name: Optional[str]
title: Optional[str] title: Optional[str]
@@ -131,13 +131,44 @@ class Contact_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['linked_address_id_random'], table_name='linked_address') return redis_lookup_id_random(record_id_random=values['linked_address_id_random'], table_name='linked_address')
return None return None
@validator('for_id', always=True) @validator('for_id', pre=True, always=True)
def for_id_lookup(cls, v, values, **kwargs): def for_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING) log.setLevel(logging.DEBUG)
log.debug(locals()) log.debug(locals())
if values['for_id_random'] and values['for_type']: for_type = values.get('for_type')
for_id = v # values.get('for_id')
for_id_random = values.get('for_id_random')
if for_id and for_type:
log.info(f'Got For ID: {for_id}; For Type: {for_type}')
for_id_random = get_id_random(for_id, table_name=for_type)
values['for_id_random'] = for_id_random
return for_id
elif values.get('for_id_random') and values.get('for_type'):
log.info(f'Got For ID Random: {for_id_random}; For Type: {for_type}')
return redis_lookup_id_random(record_id_random=values['for_id_random'], table_name=values['for_type']) return redis_lookup_id_random(record_id_random=values['for_id_random'], table_name=values['for_type'])
log.info(f'Got nothing? For ID: {for_id}; For ID Random: {for_id_random}; For Type: {for_type}')
return None
@validator('for_id_random', always=True)
def for_id_random_lookup(cls, v, values, **kwargs):
log.setLevel(logging.DEBUG)
log.debug(locals())
for_type = values.get('for_type')
for_id = values.get('for_id')
for_id_random = v
if for_id_random:
log.info(f'Got For ID Random: {for_id_random}')
return for_id_random
elif for_id and for_type:
log.info(f'Got For ID: {for_id}; For Type: {for_type}')
for_id_random = get_id_random(for_id, table_name=for_type)
log.info(f'Got ID Random: {for_id_random}')
return for_id_random
log.info(f'Got nothing? For ID: {for_id}; For ID Random: {for_id_random}; For Type: {for_type}')
return None return None
class Config: class Config:

View File

@@ -155,9 +155,9 @@ router = APIRouter()
@router.get('/{obj_type_l1}/{obj_type_l2}/list') @router.get('/{obj_type_l1}/{obj_type_l2}/list')
@router.get('/{obj_type_l1}/{obj_type_l2}/{obj_type_l3}/list') @router.get('/{obj_type_l1}/{obj_type_l2}/{obj_type_l3}/list')
async def get_obj_li( async def get_obj_li(
obj_type_l1: str=None, obj_type_l1: str = Query(..., min_length=2, max_length=50),
obj_type_l2: str=None, obj_type_l2: str = Query(None, min_length=2, max_length=50),
obj_type_l3: str=None, obj_type_l3: str = Query(None, min_length=2, max_length=50),
#obj_id: str=None, #obj_id: str=None,
for_obj_type: Optional[str] = Query(None, max_length=50), for_obj_type: Optional[str] = Query(None, max_length=50),
for_obj_id: Optional[str] = Query(None, max_length=22), for_obj_id: Optional[str] = Query(None, max_length=22),
@@ -165,7 +165,7 @@ async def get_obj_li(
by_alias: Optional[bool] = True, by_alias: Optional[bool] = True,
include: Optional[list] = [], include: Optional[list] = [],
exclude: Optional[list] = [], exclude: Optional[list] = [],
exclude_unset: Optional[bool] = True, exclude_unset: Optional[bool] = False,
exclude_none: Optional[bool] = True, exclude_none: Optional[bool] = True,
response: Response = Response, response: Response = Response,
): ):