Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
|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 <https://aws.amazon.com/lambda/>
_. They allow you to
avoid boiler plate for common things such as CORS headers, JSON serialization,
etc.
.. 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"}
If you are using the serverless framework <https://github.com/serverless/serverless>
_
I recommend using
serverless-python-requirements <https://github.com/UnitedIncome/serverless-python-requirements>
_
.. code:: shell
sls plugin install -n serverless-python-requirements
echo lambda-decorators >> requirements.txt
Or 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
lambda_decorators
includes the following decorators to avoid boilerplate
for common usecases when using AWS Lambda with Python.
async_handler <http://lambda-decorators.rtfd.io#lambda_decorators.async_handler>
_ - support for async handlerscors_headers <http://lambda-decorators.rtfd.io#lambda_decorators.cors_headers>
_ - automatic injection of CORS headersdump_json_body <http://lambda-decorators.rtfd.io#lambda_decorators.dump_json_body>
_ - auto-serialization of http body to JSONload_json_body <http://lambda-decorators.rtfd.io#lambda_decorators.load_json_body>
_ - auto-deserialize of http body from JSONjson_http_resp <http://lambda-decorators.rtfd.io#lambda_decorators.json_http_resp>
_ - automatic serialization of python object to HTTP JSON responsejson_schema_validator <http://lambda-decorators.rtfd.io#lambda_decorators.json_schema_validator>
_ - use JSONSchema to validate request&response payloadsload_urlencoded_body <http://lambda-decorators.rtfd.io#lambda_decorators.load_urlencoded_body>
_ - auto-deserialize of http body from a querystring encoded bodyno_retry_on_failure <http://lambda-decorators.rtfd.io#lambda_decorators.no_retry_on_failure>
_ - detect and stop retry attempts for scheduled lambdasssm_parameter_store <http://lambda-decorators.rtfd.io#lambda_decorators.ssm_parameter_store>
_ - fetch parameters from the AWS SSM Parameter Storesecret_manager <http://lambda-decorators.rtfd.io#lambda_decorators.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.rst
lambda_decorators
includes utilities to make building your own decorators
easier. The before <http://lambda-decorators.rtfd.io#lambda_decorators.before>
, after <http://lambda-decorators.rtfd.io#lambda_decorators.after>
, and on_exception <http://lambda-decorators.rtfd.io#lambda_decorators.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 <http://lambda-decorators.rtfd.io#lambda_decorators.LambdaDecorator>
_:
.. code:: python
import logging
from lambda_decorators import LambdaDecorator
class log_everything(LambdaDecorator):
def before(event, context):
logging.debug(event, context)
return event, context
def after(retval):
logging.debug(retval)
return retval
def on_exception(exception):
logging.debug(exception)
return {'statusCode': 500}
@log_everything
def handler(event, context):
return {}
Initially, I was inspired by middy <https://github.com/middyjs/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 <https://wiki.python.org/moin/PythonDecorators>
_
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 <http://lambda-decorators.readthedocs.io/en/latest/>
_
FAQs
A collection of useful decorators for making AWS Lambda handlers
We found that lambda-decorators demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.