Simple AWS Lambda proxy to handle API Gateway request
Project description
A simple proxy that can work on AWS Lambda as API-gateway proxy
Install
$ pip install -U pip
$ pip install lambda-proxy
Or install from source:
$ git clone https://github.com/vincentsarag/lambda-proxy.git
$ cd lambda-proxy
$ pip install -U pip
$ pip install -e .
Usage
With GET request
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<id>', methods=['GET'], cors=True)
>>> def print_id(id):
return ('OK', 'plain/text', id))
With POST request
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<id>', methods=['POST'], cors=True)
>>> def print_id(id, body):
return ('OK', 'plain/text', id))
Binary responses
When working with binary on API-Gateway we must return a base64 encoded string
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<filename>.jpg', methods=['GET'], cors=True, binary_b64encode=True)
>>> def print_id(filename):
with open(f"{filename}.jpg", "rb") as f:
return ('OK', 'image/jpeg', f.read()))
Enable compression (happens only if “Accept-Encoding” if found in headers)
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<filename>.jpg', methods=['GET'], cors=True, binary_b64encode=True, payload_compression_method="gzip")
>>> def print_id(filename):
with open(f"{filename}.jpg", "rb") as f:
return ('OK', 'image/jpeg', f.read()))
Simple Auth token
Lambda-proxy provide a simple token validation system.
a “TOKEN” variable must be set in the environment
each request must provide a “access_token” params (e.g curl http://myurl/test/tests/myid?access_token=blabla)
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<id>', methods=['GET'], cors=True, token=True)
>>> def print_id(id):
return ('OK', 'plain/text', id))
URL schema and request parameters
QueryString parameters are passed as function’s options.
>>> from lambda_proxy.proxy import API
>>> APP = API(app_name="app")
>>> @APP.route('/test/tests/<id>', methods=['GET'], cors=True)
>>> def print_id(id, name=None):
return ('OK', 'plain/text', f"{id}{name}"))
requests:
>>> curl /test/tests/000001
0001
>>> curl /test/tests/000001?name=vincent
0001vincent
Examples
Contribution & Devellopement
Issues and pull requests are more than welcome.
Dev install & Pull-Request
$ git clone https://github.com/vincentsarago/lambda-proxy.git
$ cd lambda-proxy
$ pip install -e .[dev]
Python >3.6 only
This repo is set to use pre-commit to run flake8, pydocstring and black (“uncompromising Python code formatter”) when committing new code.
$ pre-commit install
$ git add .
$ git commit -m'my change'
black....................................................................Passed
Flake8...................................................................Passed
Verifying PEP257 Compliance..............................................Passed
$ git push origin
License
See LICENSE.txt.
Changes
See CHANGES.txt.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.