Add a new layer ("lâmina") to AWS lambda functions
Project description
Welcome to Lamina
This library adds a new layer ("lâmina") to AWS lambda functions, integrating synchronous and asynchronous code in a single function, which use Pydantic models to validate input and output data.
Install
$ pip install py-lamina
This library is compatible with Python 3.9, 3.10 and 3.11.
Usage
Create the models for Input and Output data:
# schemas.py
from pydantic import BaseModel
class ExampleInput(BaseModel):
name: str
age: int
class ExampleOutput(BaseModel):
message: str
Create your AWS Lambda handler:
# main.py
from typing import Any, Dict, Tuple, Union
from lamina import lamina, Request
from .schemas import ExampleInput, ExampleOutput
@lamina(schema=ExampleInput, schema_out=ExampleOutput)
def handler(request: Request) -> Dict[str, Any]:
response = {"message": f"Hello {request.data.name}, you are {request.data.age} years old!"}
return response
You can also use an async handler:
# main.py
import asyncio
@lamina(schema=ExampleInput, schema_out=ExampleOutput)
async def handler(request: Request) -> Dict[str, Any]:
await asyncio.sleep(1)
response = {"message": f"Hello {request.data.name}, you are {request.data.age} years old!"}
return response
The Response Status Code
Default value is 200. You can change it by returning a tuple with the response and the status code:
@lamina(schema=ExampleInput, schema_out=ExampleOutput)
def handler(request: Request) -> Tuple[Dict[str, Any], int]:
response = {"message": f"Hello {request.data.name}, you are {request.data.age} years old!"}
return response, 201
The Response Content Type
Default content type is application/json; charset=utf-8
. You can change it by defining the content_type
parameter:
@lamina(schema=ExampleInput, content_type=Lamina.HTML)
def handler(request: Request) -> Tuple[str, int]:
html_404 = """
<html>
<head><title>404 Not Found</title></head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
"""
return html_404, 404
The Response Headers
Default header contains the Content Type defined in decorator or {"Content-Type": "application/json; charset=utf-8"}
by default.
You can add more headers it by returning a dict in the function return tuple:
@lamina(schema=ExampleInput, content_type=Lamina.HTML)
def handler(request: Request) -> str:
return None, 403, {"Location": "https://www.example.com"}
This dict will be merged with the default header.
The Request object
The Request
object has the following attributes:
data
: The input data, already validated by the schema.event
: The original event received by the lambda function.context
: The original context received by the lambda function.
You can use lamina without one or both schemas, if you like:
# main.py
import json
from typing import Any, Dict
from lamina import lamina, Request
@lamina()
def handler(request: Request) -> Dict[str, Any]:
body = request.event["body"]
data = json.loads(body)
response = {"message": f"Hello {data.name}, you are {data.age} years old!"}
return response
Please note, if you do not define a SchemaIn, the data
attribute will contain the original body from event. You
need to validate it yourself and convert it to a dict, bytes, etc... you need before using the data received.
License
This project is licensed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file py_lamina-3.0.0.tar.gz
.
File metadata
- Download URL: py_lamina-3.0.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.1 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f146f6a4aa59b760af349f97358bd3d7e3c6baafac080352607cb293b0b59842 |
|
MD5 | 2f8f433f2dbb5770e457c6cbcb1bad2d |
|
BLAKE2b-256 | 44eebed43bfa9a437e9ab322f9ea3f8d42582b9cb6954cae573853b21e12a361 |
File details
Details for the file py_lamina-3.0.0-py3-none-any.whl
.
File metadata
- Download URL: py_lamina-3.0.0-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.1 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7ed92e3c87713196093a1e1b6a24d4711d80c5c575b69be0e532b3cfd3560ad |
|
MD5 | a884e74b240251ab73ab33c04b24586a |
|
BLAKE2b-256 | cf88940db94d9d1ae0f58111baa7e90edaad7660f4f130ea89601762e1e31eeb |