https://github.com/dschep/lambda-decorators
🐍λ✨ - A collection of useful decorators for making AWS Lambda handlers
https://github.com/dschep/lambda-decorators
aws-lambda decorators python serverless
Last synced: 22 days ago
JSON representation
🐍λ✨ - A collection of useful decorators for making AWS Lambda handlers
- Host: GitHub
- URL: https://github.com/dschep/lambda-decorators
- Owner: dschep
- License: mit
- Created: 2017-12-23T16:25:06.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-20T14:13:36.000Z (almost 2 years ago)
- Last Synced: 2024-10-19T06:02:55.843Z (6 months ago)
- Topics: aws-lambda, decorators, python, serverless
- Language: Python
- Homepage: http://lambda-decorators.rtfd.io
- Size: 118 KB
- Stars: 247
- Watchers: 4
- Forks: 34
- Open Issues: 18
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
🐍λ✨ - lambda_decorators
=========================
|Version|_ |Docs|_ |Build|_ |SayThanks|_A collection of useful decorators for making AWS Lambda handlers
``lambda_decorators`` is a collection of useful decorators for writing Python
handlers for `AWS Lambda `_. They allow you to
avoid boiler plate for common things such as CORS headers, JSON serialization,
etc.Quick example
-------------
.. code:: python# handler.py
from lambda_decorators import json_http_resp, load_json_body
@json_http_resp
@load_json_body
def handler(event, context):
return {'hello': event['body']['name']}When deployed to Lambda behind API Gateway and cURL'd:
.. code:: shell
$ curl -d '{"name": "world"}' https://example.execute-api.us-east-1.amazonaws.com/dev/hello
{"hello": "world"}Install
-------
If you are using `the serverless framework `_
I recommend using
`serverless-python-requirements `_.. code:: shell
sls plugin install -n serverless-python-requirements
echo lambda-decorators >> requirements.txtOr if using some other deployment method to AWS Lambda you can just download
the entire module because it's only one file... code:: shell
curl -O https://raw.githubusercontent.com/dschep/lambda-decorators/master/lambda_decorators.py
Included Decorators:
--------------------
``lambda_decorators`` includes the following decorators to avoid boilerplate
for common usecases when using AWS Lambda with Python.* `async_handler `_ - support for async handlers
* `cors_headers `_ - automatic injection of CORS headers
* `dump_json_body `_ - auto-serialization of http body to JSON
* `load_json_body `_ - auto-deserialize of http body from JSON
* `json_http_resp `_ - automatic serialization of python object to HTTP JSON response
* `json_schema_validator `_ - use JSONSchema to validate request&response payloads
* `load_urlencoded_body `_ - auto-deserialize of http body from a querystring encoded body
* `no_retry_on_failure `_ - detect and stop retry attempts for scheduled lambdas
* `ssm_parameter_store `_ - fetch parameters from the AWS SSM Parameter Store
* `secret_manager `_ - fetch secrets from the AWS Secrets ManagerSee each individual decorators for specific usage details and the example_
for some more use cases. This library is also meant to serve as an example for how to write
decorators for use as lambda middleware. See the recipes_ page for some more niche examples of
using decorators as middleware for lambda... _example: https://github.com/dschep/lambda-decorators/tree/master/example
.. _recipes: recipes.rstWriting your own
----------------
``lambda_decorators`` includes utilities to make building your own decorators
easier. The `before `_, `after `_, and `on_exception `_ decorators
can be applied to your own functions to turn them into decorators for your
handlers. For example:.. code:: python
import logging
from lambda_decorators import before@before
def log_event(event, context):
logging.debug(event)
return event, context@log_event
def handler(event, context):
return {}And if you want to make a decorator that provides two or more of
before/after/on_exception functionality, you can use
`LambdaDecorator `_:.. code:: python
import logging
from lambda_decorators import LambdaDecoratorclass log_everything(LambdaDecorator):
def before(self, event, context):
logging.debug(event, context)
return event, context
def after(self, retval):
logging.debug(retval)
return retval
def on_exception(self, exception):
logging.debug(exception)
return {'statusCode': 500}@log_everything
def handler(event, context):
return {}Why
---
Initially, I was inspired by `middy `_ which
I like using in JavaScript. So naturally, I thought I'd like to have something similar in Python
too. But then as I thought about it more, it seemed that when thinking of functions as the compute
unit, when using python, `decorators `_
pretty much are middleware! So instead of building a middleware engine and a few middlewares, I
just built a few useful decorators and utilities to build them.-----
.. |Version| image:: https://img.shields.io/pypi/v/lambda-decorators.svg
.. _Version: https://pypi.org/project/lambda-decorators
.. |Docs| image:: http://readthedocs.org/projects/lambda-decorators/badge/?version=latest
.. _Docs: http://lambda-decorators.readthedocs.org/en/latest
.. |Build| image:: https://img.shields.io/travis/dschep/lambda-decorators/master.svg
.. _Build: https://travis-ci.org/dschep/lambda-decorators
.. |SayThanks| image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg
.. _SayThanks: https://saythanks.io/to/dschep`Full API Documentation `_