72 lines
1.7 KiB
Python
72 lines
1.7 KiB
Python
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('/<course_id>')
|
|
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('/<course_id>')
|
|
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 {}
|