Name | leandropls.easylambda JSON |
Version |
0.1.3
JSON |
| download |
home_page | None |
Summary | None |
upload_time | 2024-11-05 14:09:10 |
maintainer | None |
docs_url | None |
author | Leandro Lima |
requires_python | <4.0,>=3.12 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# EasyLambda
A lightweight, FastAPI-inspired framework for building AWS Lambda functions with Python.
## Installation
You can install the library using pip:
```bash
pip install leandropls.easylambda
```
The library is also available as AWS Lambda Layers (choose based on your Python
version and architecture):
- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_11-arm64:1`
- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_11-x86_64:1`
- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_12-arm64:1`
- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_12-x86_64:1`
Requirements:
- Python 3.11 or 3.12
- AWS Lambda arm64 or x86_64 architecture (when using as a Lambda Layer)
- Region: us-east-2 (when using as a Lambda Layer)
## Quick Start
```python
from leandropls.easylambda import get
@get("/")
def lambda_handler() -> dict:
return {"message": "Hello World!"}
```
## Features
### Request Parameters
EasyLambda supports various ways to handle request parameters:
#### Path Parameters
```python
from typing import Annotated
from leandropls.easylambda import get
from leandropls.easylambda.path import Path
@get("/items/{item_id}")
def lambda_handler(item_id: Annotated[int, Path("item_id")]) -> dict:
return {"item_id": item_id}
```
#### Query Parameters
```python
from typing import Annotated
from leandropls.easylambda import get
from leandropls.easylambda.query import Query
items = [
{"item_name": "Foo"},
{"item_name": "Bar"},
{"item_name": "Baz"},
]
@get("/items")
def lambda_handler(
skip: Annotated[int, Query("skip")] = 0,
limit: Annotated[int, Query("limit")] = 10,
) -> list[dict]:
return items[skip : skip + limit]
```
#### Request Body
```python
from typing import Annotated
from leandropls.easylambda import post
from leandropls.easylambda.body import Body
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@post("/items")
def lambda_handler(item: Annotated[Item, Body]) -> dict:
return item.model_dump()
```
#### Headers
```python
from typing import Annotated
from leandropls.easylambda import get
from leandropls.easylambda.header import Header
@get("/items")
def lambda_handler(
user_agent: Annotated[str | None, Header("user-agent")] = None,
) -> dict:
return {"User-Agent": user_agent}
```
### Response Handling
EasyLambda provides flexible response handling options:
#### Dictionary Response
The simplest way to return a response:
```python
from leandropls.easylambda import get
@get("/")
def lambda_handler() -> dict:
return {"message": "Hello World!"}
```
#### Pydantic Model Response
For type-safe responses:
```python
from leandropls.easylambda import get
from pydantic import BaseModel
class HandlerResponse(BaseModel):
message: str
@get("/")
def lambda_handler() -> HandlerResponse:
return HandlerResponse(message="Hello World!")
```
#### Custom Response
For full control over the response:
```python
from leandropls.easylambda import get
from leandropls.easylambda.aws import Response
@get("/")
def lambda_handler() -> Response:
return Response(
statusCode=418,
body="I'm a teapot",
)
```
## Key Features
- FastAPI-inspired syntax
- Type hints and validation using Pydantic
- Support for path parameters, query parameters, request body, and headers
- Flexible response handling
- Lightweight and optimized for AWS Lambda environment
- No heavy web framework dependencies
## Best Practices
1. Use type hints consistently for better code clarity and automatic validation
2. Leverage Pydantic models for request/response validation
3. Keep functions focused and single-purpose
4. Use meaningful parameter names that match your API design
5. Provide default values for optional parameters
## Limitations
- When using as a Lambda Layer:
- Only available in us-east-2 region
- Requires Python 3.11 or 3.12
- Must be used as a Lambda Layer
## Contributing
The project is available on GitHub at: https://github.com/leandropls/easylambda
Raw data
{
"_id": null,
"home_page": null,
"name": "leandropls.easylambda",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.12",
"maintainer_email": null,
"keywords": null,
"author": "Leandro Lima",
"author_email": "leandro@lls-software.com",
"download_url": "https://files.pythonhosted.org/packages/d2/53/1afd13c8248d3587bb033c018a967f590eb76ca1aa0b5d3b61af44788843/leandropls_easylambda-0.1.3.tar.gz",
"platform": null,
"description": "# EasyLambda\n\nA lightweight, FastAPI-inspired framework for building AWS Lambda functions with Python.\n\n## Installation\n\nYou can install the library using pip:\n\n```bash\npip install leandropls.easylambda\n```\n\nThe library is also available as AWS Lambda Layers (choose based on your Python\nversion and architecture):\n\n- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_11-arm64:1`\n- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_11-x86_64:1`\n- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_12-arm64:1`\n- `arn:aws:lambda:us-east-2:144273415340:layer:easylambda-0_1_3-python3_12-x86_64:1`\n\nRequirements:\n- Python 3.11 or 3.12\n- AWS Lambda arm64 or x86_64 architecture (when using as a Lambda Layer)\n- Region: us-east-2 (when using as a Lambda Layer)\n\n## Quick Start\n\n```python\nfrom leandropls.easylambda import get\n\n@get(\"/\")\ndef lambda_handler() -> dict:\n return {\"message\": \"Hello World!\"}\n```\n\n## Features\n\n### Request Parameters\n\nEasyLambda supports various ways to handle request parameters:\n\n#### Path Parameters\n\n```python\nfrom typing import Annotated\nfrom leandropls.easylambda import get\nfrom leandropls.easylambda.path import Path\n\n@get(\"/items/{item_id}\")\ndef lambda_handler(item_id: Annotated[int, Path(\"item_id\")]) -> dict:\n return {\"item_id\": item_id}\n```\n\n#### Query Parameters\n\n```python\nfrom typing import Annotated\nfrom leandropls.easylambda import get\nfrom leandropls.easylambda.query import Query\n\nitems = [\n {\"item_name\": \"Foo\"},\n {\"item_name\": \"Bar\"},\n {\"item_name\": \"Baz\"},\n]\n\n\n@get(\"/items\")\ndef lambda_handler(\n skip: Annotated[int, Query(\"skip\")] = 0,\n limit: Annotated[int, Query(\"limit\")] = 10,\n) -> list[dict]:\n return items[skip : skip + limit]\n```\n\n#### Request Body\n\n```python\nfrom typing import Annotated\nfrom leandropls.easylambda import post\nfrom leandropls.easylambda.body import Body\nfrom pydantic import BaseModel\n\nclass Item(BaseModel):\n name: str\n description: str | None = None\n price: float\n tax: float | None = None\n\n@post(\"/items\")\ndef lambda_handler(item: Annotated[Item, Body]) -> dict:\n return item.model_dump()\n```\n\n#### Headers\n\n```python\nfrom typing import Annotated\nfrom leandropls.easylambda import get\nfrom leandropls.easylambda.header import Header\n\n@get(\"/items\")\ndef lambda_handler(\n user_agent: Annotated[str | None, Header(\"user-agent\")] = None,\n) -> dict:\n return {\"User-Agent\": user_agent}\n```\n\n### Response Handling\n\nEasyLambda provides flexible response handling options:\n\n#### Dictionary Response\n\nThe simplest way to return a response:\n\n```python\nfrom leandropls.easylambda import get\n\n@get(\"/\")\ndef lambda_handler() -> dict:\n return {\"message\": \"Hello World!\"}\n```\n\n#### Pydantic Model Response\n\nFor type-safe responses:\n\n```python\nfrom leandropls.easylambda import get\nfrom pydantic import BaseModel\n\nclass HandlerResponse(BaseModel):\n message: str\n\n@get(\"/\")\ndef lambda_handler() -> HandlerResponse:\n return HandlerResponse(message=\"Hello World!\")\n```\n\n#### Custom Response\n\nFor full control over the response:\n\n```python\nfrom leandropls.easylambda import get\nfrom leandropls.easylambda.aws import Response\n\n@get(\"/\")\ndef lambda_handler() -> Response:\n return Response(\n statusCode=418,\n body=\"I'm a teapot\",\n )\n```\n\n## Key Features\n\n- FastAPI-inspired syntax\n- Type hints and validation using Pydantic\n- Support for path parameters, query parameters, request body, and headers\n- Flexible response handling\n- Lightweight and optimized for AWS Lambda environment\n- No heavy web framework dependencies\n\n## Best Practices\n\n1. Use type hints consistently for better code clarity and automatic validation\n2. Leverage Pydantic models for request/response validation\n3. Keep functions focused and single-purpose\n4. Use meaningful parameter names that match your API design\n5. Provide default values for optional parameters\n\n## Limitations\n\n- When using as a Lambda Layer:\n - Only available in us-east-2 region\n - Requires Python 3.11 or 3.12\n - Must be used as a Lambda Layer\n\n## Contributing\n\nThe project is available on GitHub at: https://github.com/leandropls/easylambda",
"bugtrack_url": null,
"license": "MIT",
"summary": null,
"version": "0.1.3",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5e97fb8364a9d7d938c9726803c9cd81d95e5313226316ea4032bfd1f4ca5298",
"md5": "955fed3f664099ac5d2d6e331a7cff45",
"sha256": "f97e0ac25c5597dffc76e7a5a41f062d0476ac62d63c57c6ad41b4393ea17708"
},
"downloads": -1,
"filename": "leandropls_easylambda-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "955fed3f664099ac5d2d6e331a7cff45",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.12",
"size": 10877,
"upload_time": "2024-11-05T14:09:09",
"upload_time_iso_8601": "2024-11-05T14:09:09.241696Z",
"url": "https://files.pythonhosted.org/packages/5e/97/fb8364a9d7d938c9726803c9cd81d95e5313226316ea4032bfd1f4ca5298/leandropls_easylambda-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d2531afd13c8248d3587bb033c018a967f590eb76ca1aa0b5d3b61af44788843",
"md5": "e593265ebf029cc78ba6060d24287f4d",
"sha256": "bf0be0712f2658b88b2e1dc7077f7cd68148de9bb96989a8546e8032a6cf9f70"
},
"downloads": -1,
"filename": "leandropls_easylambda-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "e593265ebf029cc78ba6060d24287f4d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.12",
"size": 8556,
"upload_time": "2024-11-05T14:09:10",
"upload_time_iso_8601": "2024-11-05T14:09:10.881283Z",
"url": "https://files.pythonhosted.org/packages/d2/53/1afd13c8248d3587bb033c018a967f590eb76ca1aa0b5d3b61af44788843/leandropls_easylambda-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-05 14:09:10",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "leandropls.easylambda"
}