from io import BytesIO from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Router from aws_lambda_powertools.event_handler.exceptions import ( BadRequestError, NotFoundError, ) from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from pydantic import UUID4, BaseModel from python_multipart import parse_form from boto3clients import dynamodb_client from config import COURSE_TABLE logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client) @router.get('/') def get_course(course_id: str): return dyn.collection.get_item( KeyPair(course_id, '0'), exc_cls=NotFoundError, ) class Cert(BaseModel): exp_interval: int rawfile: bytes class FormData(BaseModel): id: UUID4 name: str access_period: int cert: Cert | None = None @router.post('/') def edit_course(course_id: str): event = router.current_event if not event.decoded_body: raise BadRequestError('Invalid request body') ret = {'id': course_id} body = BytesIO(event.decoded_body.encode()) def on_field(field): field_name = field.field_name.decode().split('.') if len(field_name) > 1: field_name, subfield_name = field_name print(field_name, subfield_name) else: field_name, *_ = field_name ret[field_name] = field.value parse_form( event.headers, # type: ignore body, on_field=on_field, on_file=on_field, ) # print(ret.keys()) data = FormData.model_validate(ret) print(data) return {}