| Name | finalsa-common-lambdas JSON |
| Version |
2.2.1
JSON |
| download |
| home_page | None |
| Summary | Common utilities for Finalsa's AWS Lambda functions |
| upload_time | 2025-08-19 02:23:52 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.10 |
| license | MIT License Copyright (c) 2025 Luis Diego JimΓ©nez Delgado Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| keywords |
aws
common
finalsa
lambda
utilities
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# Finalsa Common Lambda
[](https://pypi.org/project/finalsa-common-lambdas/)
[](https://python.org)
[](https://docs.python.org/3/library/typing.html)
[](LICENSE.md)
A comprehensive, **type-safe** Python library for building AWS Lambda functions with common patterns, utilities, and best practices for the Finalsa ecosystem.
## π Features
- **π Full Type Safety**: Comprehensive type hints for better IDE support and error detection
- **π Unified Lambda Framework**: Simple, decorator-based approach for handling both HTTP and SQS events
- **π― Type Safety**: Full type hints and Pydantic model integration with protocols and generics
- **π Built-in Traceability**: Automatic correlation ID and trace management
- **β‘ Error Handling**: Robust exception handling with retries and logging
- **π§ͺ Test Support**: Built-in test mode with mocking capabilities and type-safe testing
- **π§ Modular Design**: Composable handlers for different event types
- **π‘ Developer Experience**: Excellent IDE support with auto-completion and type checking
## π¦ Installation
```bash
pip install finalsa-common-lambdas
```
## ποΈ Quick Start
### Basic Lambda Function with Type Safety
```python
from finalsa.common.lambdas.app import App
from typing import Dict, Any, Union
from finalsa.common.lambdas.http.HttpResponse import HttpResponse
# Create your lambda handler
class MyLambda(AppEntry):
pass
# Create app instance
app = App("my-lambda-function")
# Register SQS handlers
@app.sqs.default()
def handle_default_sqs(message: dict):
print(f"Processing message: {message}")
return {"status": "processed"}
@app.sqs.handler("user-events")
def handle_user_events(message: dict, meta: dict):
print(f"User event: {message}")
return {"status": "success"}
# Register HTTP handlers
@app.http.post("/users")
def create_user(body: dict):
return {"message": "User created", "id": 123}
@app.http.get("/users/{user_id}")
def get_user(user_id: str):
return {"user_id": user_id, "name": "John Doe"}
# Lambda entry point
def lambda_handler(event, context):
return app.execute(event, context)
```
### Using AppEntry for Modular Design
```python
from finalsa.common.lambdas.app import App, AppEntry
# Create modular app entries
user_service = AppEntry("user-service")
notification_service = AppEntry("notification-service")
# Define handlers in user service
@user_service.http.post("/users")
def create_user(body: dict):
return {"message": "User created"}
@user_service.sqs.handler("user-created")
def handle_user_created(message: dict):
print("User created event processed")
# Define handlers in notification service
@notification_service.sqs.handler("send-email")
def send_email(message: dict):
print("Sending email...")
# Combine into main app
app = App("main-app")
app.register(user_service)
app.register(notification_service)
def lambda_handler(event, context):
return app.execute(event, context)
```
## π Documentation
### Core Components
#### App Class
The main application container that manages multiple `AppEntry` instances.
```python
from finalsa.common.lambdas.app import App
app = App(
app_name="my-lambda", # Optional: name for logging
logger=custom_logger, # Optional: custom logger
test_mode=False # Optional: enable test mode
)
```
**Methods:**
- `register(app_entry)`: Register an AppEntry with the app
- `execute(event, context)`: Main entry point for Lambda execution
#### AppEntry Class
Base class for creating modular Lambda handlers.
```python
from finalsa.common.lambdas.app import AppEntry
entry = AppEntry(
app_name="my-service", # Optional: service name
logger=custom_logger # Optional: custom logger
)
```
**Properties:**
- `sqs`: SQS handler instance
- `http`: HTTP handler instance
### SQS Handler
Handle SQS events with automatic message parsing and error handling.
#### Basic Usage
```python
# Default handler (catches all unmatched topics)
@app.sqs.default()
def handle_default(message: dict):
return {"status": "processed"}
# Topic-specific handler
@app.sqs.handler("user-events")
def handle_user_events(message: dict):
return {"status": "success"}
# Handler with metadata
@app.sqs.handler("orders", retries=3)
def handle_orders(message: dict, meta: dict):
correlation_id = meta.get("correlation_id")
return {"order_id": message["id"]}
```
#### Available Parameters
Your SQS handler functions can accept these parameters:
- `message: dict` - Parsed message body
- `meta: dict` - Message metadata (correlation_id, trace_id, etc.)
- `event: SqsEvent` - Raw SQS event object
- `context` - Lambda context object
#### Error Handling and Retries
```python
@app.sqs.handler("critical-process", retries=5)
def handle_critical(message: dict):
# This will retry up to 5 times on failure
if not process_critical_data(message):
raise Exception("Processing failed")
return {"status": "success"}
```
### HTTP Handler
Handle HTTP API Gateway events with automatic routing and parameter extraction.
#### HTTP Methods
```python
# Basic routes
@app.http.get("/health")
def health_check():
return {"status": "healthy"}
@app.http.post("/users")
def create_user(body: dict):
return {"user_id": 123}
@app.http.put("/users/{user_id}")
def update_user(user_id: str, body: dict):
return {"user_id": user_id, "updated": True}
@app.http.delete("/users/{user_id}")
def delete_user(user_id: str):
return {"deleted": True}
```
#### Path Parameters
```python
# Single path parameter
@app.http.get("/users/{user_id}")
def get_user(user_id: str):
return {"user_id": user_id}
# Multiple path parameters
@app.http.get("/users/{user_id}/posts/{post_id}")
def get_user_post(user_id: str, post_id: str):
return {"user_id": user_id, "post_id": post_id}
```
#### Available Parameters
Your HTTP handler functions can accept these parameters:
- `body: dict` - Parsed request body
- `headers: dict` - Request headers
- `query: dict` - Query string parameters
- `path_params: dict` - Path parameters
- `meta: dict` - Request metadata
- `event: dict` - Raw API Gateway event
- `context` - Lambda context object
#### Custom Response Codes
```python
from finalsa.common.lambdas.http.HttpResponse import HttpResponse
@app.http.post("/users")
def create_user(body: dict):
# Custom status code
return HttpResponse(
status_code=201,
body={"user_id": 123},
headers={"Location": "/users/123"}
)
@app.http.get("/users/{user_id}")
def get_user(user_id: str):
if not user_exists(user_id):
return HttpResponse(
status_code=404,
body={"error": "User not found"}
)
return {"user_id": user_id}
```
## π§ͺ Testing
### Test Mode
Enable test mode to use mocked services:
```python
from finalsa.common.lambdas.app import App
# Enable test mode
app = App(test_mode=True)
# Or enable later
app.__set_test_mode__()
# Test your handlers
response = app.execute({
"eventSource": "aws:sqs",
"Records": [
{
"body": '{"test": "message"}',
"messageAttributes": {
"correlation_id": {
"stringValue": "test-correlation-id"
}
}
}
]
})
```
### Example Test
```python
import pytest
from finalsa.common.lambdas.app import App, AppEntry
def test_sqs_handler():
# Setup
app_entry = AppEntry()
@app_entry.sqs.default()
def handle_message(message: dict):
return {"processed": message["id"]}
app = App(test_mode=True)
app.register(app_entry)
# Test
event = {
"eventSource": "aws:sqs",
"Records": [
{
"body": '{"id": "123", "type": "test"}',
"messageAttributes": {}
}
]
}
result = app.execute(event)
assert result[0]["processed"] == "123"
def test_http_handler():
app_entry = AppEntry()
@app_entry.http.get("/users/{user_id}")
def get_user(user_id: str):
return {"user_id": user_id}
app = App(test_mode=True)
app.register(app_entry)
event = {
"httpMethod": "GET",
"path": "/users/123",
"pathParameters": {"user_id": "123"}
}
result = app.execute(event)
assert result["statusCode"] == 200
```
## ποΈ Architecture
### Event Flow
```
Lambda Event β App.execute() β Handler Detection β Route to SQS/HTTP β Handler Execution β Response
```
### Component Structure
```
App
βββ AppEntry (modular services)
β βββ SqsHandler (message processing)
β βββ HttpHandler (API routing)
βββ Traceability (correlation/trace IDs)
βββ Error Handling (retries, logging)
βββ Test Support (mocking, fixtures)
```
## π§ Advanced Usage
### Custom Error Handling
```python
from finalsa.common.lambdas.common.exceptions import HandlerNotFoundError
@app.sqs.handler("critical-data")
def handle_critical(message: dict):
try:
process_data(message)
except ValueError as e:
# Log and re-raise for retry
app.logger.error(f"Invalid data: {e}")
raise
except Exception as e:
# Handle gracefully
app.logger.warning(f"Processing failed: {e}")
return {"status": "failed", "error": str(e)}
```
### Custom Logging
```python
import logging
from finalsa.common.lambdas.app import App
# Custom logger
logger = logging.getLogger("my-app")
logger.setLevel(logging.INFO)
app = App("my-lambda", logger=logger)
```
### Environment Configuration
```python
import os
from finalsa.common.lambdas.app import App
app = App(
app_name=os.getenv("APP_NAME", "default-app"),
test_mode=os.getenv("TEST_MODE", "false").lower() == "true"
)
```
## π€ Dependencies
This library depends on several Finalsa internal packages:
- `finalsa-common-logger` - Logging utilities
- `finalsa-common-models` - Pydantic models
- `finalsa-sqs-client` - SQS client implementation
- `finalsa-traceability` - Tracing and correlation
- `orjson` - Fast JSON parsing
- `pydantic` - Data validation
## π License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
## π Links
- [Homepage](https://github.com/finalsa/finalsa-common-lambda)
- [PyPI Package](https://pypi.org/project/finalsa-common-lambdas/)
- [Documentation](https://github.com/finalsa/finalsa-common-lambda/wiki)
## π Support
For questions and support, please contact [luis@finalsa.com](mailto:luis@finalsa.com)
Raw data
{
"_id": null,
"home_page": null,
"name": "finalsa-common-lambdas",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "aws, common, finalsa, lambda, utilities",
"author": null,
"author_email": "Luis Jimenez <luis@finalsa.com>",
"download_url": "https://files.pythonhosted.org/packages/ea/d1/d13aa6a398823ecf5990603758ceb7cbd4dba48bf333af7365a966eed7cd/finalsa_common_lambdas-2.2.1.tar.gz",
"platform": null,
"description": "# Finalsa Common Lambda\n\n[](https://pypi.org/project/finalsa-common-lambdas/)\n[](https://python.org)\n[](https://docs.python.org/3/library/typing.html)\n[](LICENSE.md)\n\nA comprehensive, **type-safe** Python library for building AWS Lambda functions with common patterns, utilities, and best practices for the Finalsa ecosystem.\n\n## \ud83d\ude80 Features\n\n- **\ud83d\udd12 Full Type Safety**: Comprehensive type hints for better IDE support and error detection\n- **\ud83c\udf10 Unified Lambda Framework**: Simple, decorator-based approach for handling both HTTP and SQS events\n- **\ud83c\udfaf Type Safety**: Full type hints and Pydantic model integration with protocols and generics\n- **\ud83d\udcca Built-in Traceability**: Automatic correlation ID and trace management\n- **\u26a1 Error Handling**: Robust exception handling with retries and logging\n- **\ud83e\uddea Test Support**: Built-in test mode with mocking capabilities and type-safe testing\n- **\ud83d\udd27 Modular Design**: Composable handlers for different event types\n- **\ud83d\udca1 Developer Experience**: Excellent IDE support with auto-completion and type checking\n\n## \ud83d\udce6 Installation\n\n```bash\npip install finalsa-common-lambdas\n```\n\n## \ud83c\udfd7\ufe0f Quick Start\n\n### Basic Lambda Function with Type Safety\n\n```python\nfrom finalsa.common.lambdas.app import App\nfrom typing import Dict, Any, Union\nfrom finalsa.common.lambdas.http.HttpResponse import HttpResponse\n\n# Create your lambda handler\nclass MyLambda(AppEntry):\n pass\n\n# Create app instance\napp = App(\"my-lambda-function\")\n\n# Register SQS handlers\n@app.sqs.default()\ndef handle_default_sqs(message: dict):\n print(f\"Processing message: {message}\")\n return {\"status\": \"processed\"}\n\n@app.sqs.handler(\"user-events\")\ndef handle_user_events(message: dict, meta: dict):\n print(f\"User event: {message}\")\n return {\"status\": \"success\"}\n\n# Register HTTP handlers\n@app.http.post(\"/users\")\ndef create_user(body: dict):\n return {\"message\": \"User created\", \"id\": 123}\n\n@app.http.get(\"/users/{user_id}\")\ndef get_user(user_id: str):\n return {\"user_id\": user_id, \"name\": \"John Doe\"}\n\n# Lambda entry point\ndef lambda_handler(event, context):\n return app.execute(event, context)\n```\n\n### Using AppEntry for Modular Design\n\n```python\nfrom finalsa.common.lambdas.app import App, AppEntry\n\n# Create modular app entries\nuser_service = AppEntry(\"user-service\")\nnotification_service = AppEntry(\"notification-service\")\n\n# Define handlers in user service\n@user_service.http.post(\"/users\")\ndef create_user(body: dict):\n return {\"message\": \"User created\"}\n\n@user_service.sqs.handler(\"user-created\")\ndef handle_user_created(message: dict):\n print(\"User created event processed\")\n\n# Define handlers in notification service\n@notification_service.sqs.handler(\"send-email\")\ndef send_email(message: dict):\n print(\"Sending email...\")\n\n# Combine into main app\napp = App(\"main-app\")\napp.register(user_service)\napp.register(notification_service)\n\ndef lambda_handler(event, context):\n return app.execute(event, context)\n```\n\n## \ud83d\udcd6 Documentation\n\n### Core Components\n\n#### App Class\n\nThe main application container that manages multiple `AppEntry` instances.\n\n```python\nfrom finalsa.common.lambdas.app import App\n\napp = App(\n app_name=\"my-lambda\", # Optional: name for logging\n logger=custom_logger, # Optional: custom logger\n test_mode=False # Optional: enable test mode\n)\n```\n\n**Methods:**\n- `register(app_entry)`: Register an AppEntry with the app\n- `execute(event, context)`: Main entry point for Lambda execution\n\n#### AppEntry Class\n\nBase class for creating modular Lambda handlers.\n\n```python\nfrom finalsa.common.lambdas.app import AppEntry\n\nentry = AppEntry(\n app_name=\"my-service\", # Optional: service name\n logger=custom_logger # Optional: custom logger\n)\n```\n\n**Properties:**\n- `sqs`: SQS handler instance\n- `http`: HTTP handler instance\n\n### SQS Handler\n\nHandle SQS events with automatic message parsing and error handling.\n\n#### Basic Usage\n\n```python\n# Default handler (catches all unmatched topics)\n@app.sqs.default()\ndef handle_default(message: dict):\n return {\"status\": \"processed\"}\n\n# Topic-specific handler\n@app.sqs.handler(\"user-events\")\ndef handle_user_events(message: dict):\n return {\"status\": \"success\"}\n\n# Handler with metadata\n@app.sqs.handler(\"orders\", retries=3)\ndef handle_orders(message: dict, meta: dict):\n correlation_id = meta.get(\"correlation_id\")\n return {\"order_id\": message[\"id\"]}\n```\n\n#### Available Parameters\n\nYour SQS handler functions can accept these parameters:\n\n- `message: dict` - Parsed message body\n- `meta: dict` - Message metadata (correlation_id, trace_id, etc.)\n- `event: SqsEvent` - Raw SQS event object\n- `context` - Lambda context object\n\n#### Error Handling and Retries\n\n```python\n@app.sqs.handler(\"critical-process\", retries=5)\ndef handle_critical(message: dict):\n # This will retry up to 5 times on failure\n if not process_critical_data(message):\n raise Exception(\"Processing failed\")\n return {\"status\": \"success\"}\n```\n\n### HTTP Handler\n\nHandle HTTP API Gateway events with automatic routing and parameter extraction.\n\n#### HTTP Methods\n\n```python\n# Basic routes\n@app.http.get(\"/health\")\ndef health_check():\n return {\"status\": \"healthy\"}\n\n@app.http.post(\"/users\")\ndef create_user(body: dict):\n return {\"user_id\": 123}\n\n@app.http.put(\"/users/{user_id}\")\ndef update_user(user_id: str, body: dict):\n return {\"user_id\": user_id, \"updated\": True}\n\n@app.http.delete(\"/users/{user_id}\")\ndef delete_user(user_id: str):\n return {\"deleted\": True}\n```\n\n#### Path Parameters\n\n```python\n# Single path parameter\n@app.http.get(\"/users/{user_id}\")\ndef get_user(user_id: str):\n return {\"user_id\": user_id}\n\n# Multiple path parameters\n@app.http.get(\"/users/{user_id}/posts/{post_id}\")\ndef get_user_post(user_id: str, post_id: str):\n return {\"user_id\": user_id, \"post_id\": post_id}\n```\n\n#### Available Parameters\n\nYour HTTP handler functions can accept these parameters:\n\n- `body: dict` - Parsed request body\n- `headers: dict` - Request headers\n- `query: dict` - Query string parameters\n- `path_params: dict` - Path parameters\n- `meta: dict` - Request metadata\n- `event: dict` - Raw API Gateway event\n- `context` - Lambda context object\n\n#### Custom Response Codes\n\n```python\nfrom finalsa.common.lambdas.http.HttpResponse import HttpResponse\n\n@app.http.post(\"/users\")\ndef create_user(body: dict):\n # Custom status code\n return HttpResponse(\n status_code=201,\n body={\"user_id\": 123},\n headers={\"Location\": \"/users/123\"}\n )\n\n@app.http.get(\"/users/{user_id}\")\ndef get_user(user_id: str):\n if not user_exists(user_id):\n return HttpResponse(\n status_code=404,\n body={\"error\": \"User not found\"}\n )\n return {\"user_id\": user_id}\n```\n\n## \ud83e\uddea Testing\n\n### Test Mode\n\nEnable test mode to use mocked services:\n\n```python\nfrom finalsa.common.lambdas.app import App\n\n# Enable test mode\napp = App(test_mode=True)\n\n# Or enable later\napp.__set_test_mode__()\n\n# Test your handlers\nresponse = app.execute({\n \"eventSource\": \"aws:sqs\",\n \"Records\": [\n {\n \"body\": '{\"test\": \"message\"}',\n \"messageAttributes\": {\n \"correlation_id\": {\n \"stringValue\": \"test-correlation-id\"\n }\n }\n }\n ]\n})\n```\n\n### Example Test\n\n```python\nimport pytest\nfrom finalsa.common.lambdas.app import App, AppEntry\n\ndef test_sqs_handler():\n # Setup\n app_entry = AppEntry()\n \n @app_entry.sqs.default()\n def handle_message(message: dict):\n return {\"processed\": message[\"id\"]}\n \n app = App(test_mode=True)\n app.register(app_entry)\n \n # Test\n event = {\n \"eventSource\": \"aws:sqs\",\n \"Records\": [\n {\n \"body\": '{\"id\": \"123\", \"type\": \"test\"}',\n \"messageAttributes\": {}\n }\n ]\n }\n \n result = app.execute(event)\n assert result[0][\"processed\"] == \"123\"\n\ndef test_http_handler():\n app_entry = AppEntry()\n \n @app_entry.http.get(\"/users/{user_id}\")\n def get_user(user_id: str):\n return {\"user_id\": user_id}\n \n app = App(test_mode=True)\n app.register(app_entry)\n \n event = {\n \"httpMethod\": \"GET\",\n \"path\": \"/users/123\",\n \"pathParameters\": {\"user_id\": \"123\"}\n }\n \n result = app.execute(event)\n assert result[\"statusCode\"] == 200\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\n### Event Flow\n\n```\nLambda Event \u2192 App.execute() \u2192 Handler Detection \u2192 Route to SQS/HTTP \u2192 Handler Execution \u2192 Response\n```\n\n### Component Structure\n\n```\nApp\n\u251c\u2500\u2500 AppEntry (modular services)\n\u2502 \u251c\u2500\u2500 SqsHandler (message processing)\n\u2502 \u2514\u2500\u2500 HttpHandler (API routing)\n\u251c\u2500\u2500 Traceability (correlation/trace IDs)\n\u251c\u2500\u2500 Error Handling (retries, logging)\n\u2514\u2500\u2500 Test Support (mocking, fixtures)\n```\n\n## \ud83d\udd27 Advanced Usage\n\n### Custom Error Handling\n\n```python\nfrom finalsa.common.lambdas.common.exceptions import HandlerNotFoundError\n\n@app.sqs.handler(\"critical-data\")\ndef handle_critical(message: dict):\n try:\n process_data(message)\n except ValueError as e:\n # Log and re-raise for retry\n app.logger.error(f\"Invalid data: {e}\")\n raise\n except Exception as e:\n # Handle gracefully\n app.logger.warning(f\"Processing failed: {e}\")\n return {\"status\": \"failed\", \"error\": str(e)}\n```\n\n### Custom Logging\n\n```python\nimport logging\nfrom finalsa.common.lambdas.app import App\n\n# Custom logger\nlogger = logging.getLogger(\"my-app\")\nlogger.setLevel(logging.INFO)\n\napp = App(\"my-lambda\", logger=logger)\n```\n\n### Environment Configuration\n\n```python\nimport os\nfrom finalsa.common.lambdas.app import App\n\napp = App(\n app_name=os.getenv(\"APP_NAME\", \"default-app\"),\n test_mode=os.getenv(\"TEST_MODE\", \"false\").lower() == \"true\"\n)\n```\n\n## \ud83e\udd1d Dependencies\n\nThis library depends on several Finalsa internal packages:\n\n- `finalsa-common-logger` - Logging utilities\n- `finalsa-common-models` - Pydantic models\n- `finalsa-sqs-client` - SQS client implementation\n- `finalsa-traceability` - Tracing and correlation\n- `orjson` - Fast JSON parsing\n- `pydantic` - Data validation\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.\n\n## \ud83d\udd17 Links\n\n- [Homepage](https://github.com/finalsa/finalsa-common-lambda)\n- [PyPI Package](https://pypi.org/project/finalsa-common-lambdas/)\n- [Documentation](https://github.com/finalsa/finalsa-common-lambda/wiki)\n\n## \ud83d\udcde Support\n\nFor questions and support, please contact [luis@finalsa.com](mailto:luis@finalsa.com)\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2025 Luis Diego Jim\u00e9nez Delgado Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
"summary": "Common utilities for Finalsa's AWS Lambda functions",
"version": "2.2.1",
"project_urls": {
"Homepage": "https://github.com/finalsa/finalsa-common-lambda"
},
"split_keywords": [
"aws",
" common",
" finalsa",
" lambda",
" utilities"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8bc4f622d8c1677727745171fd5e19de7b561fda5e836ff93277c4d361b7e1ed",
"md5": "0ee824ffbb7d5b5fce743ad15f35829c",
"sha256": "312057acbd94a7dc29314c42fe0c7064a21bf69bb3b6edbfcd6e5778d603fb81"
},
"downloads": -1,
"filename": "finalsa_common_lambdas-2.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0ee824ffbb7d5b5fce743ad15f35829c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 24682,
"upload_time": "2025-08-19T02:23:51",
"upload_time_iso_8601": "2025-08-19T02:23:51.577874Z",
"url": "https://files.pythonhosted.org/packages/8b/c4/f622d8c1677727745171fd5e19de7b561fda5e836ff93277c4d361b7e1ed/finalsa_common_lambdas-2.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ead1d13aa6a398823ecf5990603758ceb7cbd4dba48bf333af7365a966eed7cd",
"md5": "5607e013d7b6d49be844bf722e3e8a4d",
"sha256": "7131ea68b434beef9bdb8cc553e947d230c50a518432e27ff9f5a651b7ecd50e"
},
"downloads": -1,
"filename": "finalsa_common_lambdas-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "5607e013d7b6d49be844bf722e3e8a4d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 17150,
"upload_time": "2025-08-19T02:23:52",
"upload_time_iso_8601": "2025-08-19T02:23:52.792622Z",
"url": "https://files.pythonhosted.org/packages/ea/d1/d13aa6a398823ecf5990603758ceb7cbd4dba48bf333af7365a966eed7cd/finalsa_common_lambdas-2.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-19 02:23:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "finalsa",
"github_project": "finalsa-common-lambda",
"github_not_found": true,
"lcname": "finalsa-common-lambdas"
}