Skip to content

Instantly share code, notes, and snippets.

View ran-isenberg's full-sized avatar

Ran Isenberg ran-isenberg

View GitHub Profile
@ran-isenberg
ran-isenberg / optimistic.py
Last active April 7, 2022 05:51
No Input Validation
from aws_lambda_powertools.utilities.typing import LambdaContext
from typing import Any, Dict
def my_handler(event: Dict[str, Optional[Any]], context: LambdaContext) -> Dict[str, None]:
my_name: str = event['Records'][1]['name']
# process input and produce output
event = {
'title': 'rockz!',
'genre': 'Rock',
'release_date': str(date(2010, 10, 17)),
'artist': {
'name': 'Bon Jovi',
'age': 50,
}
}
from pydantic import BaseModel, ValidationError, validator
from datetime import date
from typing import Optional
from typing_extensions import Literal
class Artist(BaseModel):
name: str
age: int
record_company: Optional[str] = 'independent'
def handle_album(event: Dict[str, Optional[Any]], context: LambdaContext) -> None:
try:
parsed_event = Album(**event)
print(f'got title {parsed_event.title}')
print(f'got artist name {parsed_event.artist.name}')
except ValidationError as exc:
print(f'validation error, error={exc}')
return {
"statusCode": HTTPStatus.BAD_REQUEST,
"body": json.dumps({'error': 'invalid input'}),
from botocore.exception import ClientError
from pydantic import ValidationError
from http import HTTPStatus
import boto3
client = boto3.client('events')
try:
response = client.put_events(Entries=events)
parsed_response = EventBridgePutResponse(**response)
class PutResponseMeta(BaseModel):
RequestId: str
HTTPStatusCode: HTTPStatus
HTTPHeaders: Dict[str, str] = {}
RetryAttempts: int
class EventBridgePutResponse(BaseModel):
FailedEntryCount: int
Entries: List[Dict[Literal['EventId'], str]]
ResponseMetadata: PutResponseMeta
@ran-isenberg
ran-isenberg / gist:cbfa0b19bcb39634a2eff25e635c14c8
Created July 29, 2020 13:10
pydantic - boto3 improved schema
class PutResponseMeta(BaseModel):
HTTPStatusCode: HTTPStatus
class EventBridgePutResponse(BaseModel):
ResponseMetadata: PutResponseMeta
@ran-isenberg
ran-isenberg / eventbridge_pydantic.py
Last active November 11, 2020 06:34
eventbridge_pydantic
from datetime import datetime
from typing import Any, Dict, List
from pydantic import BaseModel
class UserModel(BaseModel):
username: str
password1: str
password2: str
@ran-isenberg
ran-isenberg / eventbridge_payload.py
Last active November 11, 2020 06:34
eventbridge_payload
event = {
"version": "0",
"id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718",
"detail-type": "CustomerSignedUp",
"source": "CustomerService",
"account": "111122223333",
"time": "2020-10-22T18:43:48Z",
"region": "us-west-1",
"resources": ["some_additional_"],
"detail": {
@ran-isenberg
ran-isenberg / withpowertools.py
Last active October 24, 2021 07:42
withpowertools
from datetime import datetime
from typing import Any, Dict, List
from pydantic import BaseModel
from aws_lambda_powertools.utilities.parser import event_parser, parse, BaseModel, envelopes
from aws_lambda_powertools.utilities.typing import LambdaContext
class UserModel(BaseModel):
username: str