leandropls.easylambda


Nameleandropls.easylambda JSON
Version 0.1.3 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2024-11-05 14:09:10
maintainerNone
docs_urlNone
authorLeandro Lima
requires_python<4.0,>=3.12
licenseMIT
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"
}
        
Elapsed time: 0.41721s