Skip to main content

Lambda Helper for AWS Lambda Api Gateway Integrations

Project description

Build Status Coverage Status

Lambda Helper to Api Gateway Lambda Integration

This lib provide a way to organize aws lambda integration with aws api gateway using Models, Services and Controllers.

Get It Now

$ pip install lamper
import requests
from marshmallow import Schema, fields

from lamper import core
from lamper import decorators
from lamper.exceptions import HttpBaseException
from lamper.https import HttpResponse
from lamper.config import get_logger

logger = get_logger(__name__, level='DEBUG')

#MODELS
class ExampleQueryString(Schema):
    idFromApiGateway = fields.Str(required=True, attribute="id")


class ExampleResponse(Schema):
    one_changed = fields.Str(attribute="one")
    key_changed = fields.Str(attribute="key")

#SERVICE
def example_service(event):
    return core.callapi(
        querystring_schema=ExampleQueryString,
        response_schema=ExampleResponse,
        http_method=core.HttpMethod.GET,
        api_url='http://echo.jsontest.com/key/value/one/two',
        event=event)


# ROUTES
routes = decorators.Mapping()


@routes.get('/example')
def my_example(event, context):
    try:
        response = example_service(event)
    except HttpBaseException as e:
        return e.get_response()

    return HttpResponse.success(response)


def lambda_handler(event, context):
    return core.registry_components(event=event,
                                    context=context,
                                    routes=routes, )

#TEST LAMBDA HANDLER
if __name__ == '__main__':
    event = {
        'resource': '/example',
        'httpMethod': 'GET',
        'queryStringParameters': {'idFromApiGateway': '1'}
    }

    result = lambda_handler(event, None)


#SUCESS RESPONSE

# 2020-09-26:11:09:48,483 INFO     [core.py:72] calling url:http://echo.jsontest.com/key/value/one/two
# 2020-09-26:11:09:48,483 INFO     [core.py:73] with headers:
# 2020-09-26:11:09:48,483 INFO     [core.py:74] None
# 2020-09-26:11:09:48,483 INFO     [core.py:75] with payload:
# 2020-09-26:11:09:48,483 INFO     [core.py:77] {'id': '1'}
# 2020-09-26:11:09:48,486 DEBUG    [connectionpool.py:226] Starting new HTTP connection (1): echo.jsontest.com:80
# send: b'GET /key/value/one/two?id=1 HTTP/1.1\r\nHost: echo.jsontest.com\r\nUser-Agent: python-requests/2.24.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
# reply: 'HTTP/1.1 200 OK\r\n'
# header: Access-Control-Allow-Origin: *
# header: Content-Type: application/json
# header: X-Cloud-Trace-Context: 6943045aaeac18beff6462204546f853
# header: Date: Sat, 26 Sep 2020 14:09:48 GMT
# header: Server: Google Frontend
# header: Content-Length: 39
# {'statusCode': 200, 'body': '{"key_changed": "value", "one_changed": "two"}'}
# 2020-09-26:11:09:48,702 DEBUG    [connectionpool.py:433] http://echo.jsontest.com:80 "GET /key/value/one/two?id=1 HTTP/1.1" 200 39
# 2020-09-26:11:09:48,703 INFO     [core.py:88] request : <PreparedRequest [GET]>
# 2020-09-26:11:09:48,703 INFO     [core.py:89] response text: {
#    "one": "two",
#    "key": "value"
# }
#
# 2020-09-26:11:09:48,703 INFO     [core.py:97] response:
# 2020-09-26:11:09:48,704 INFO     [core.py:98] {'key_changed': 'value', 'one_changed': 'two'}
# 2020-09-26:11:09:48,704 INFO     [https.py:22] response to api gateway:
# 2020-09-26:11:09:48,704 INFO     [https.py:23] {'body': '{"key_changed": "value", "one_changed": "two"}', 'statusCode': 200}
#



#TEST VALIDATES
    event = {
        'resource': '/example',
        'httpMethod': 'GET',
        'queryStringParameters': {'idFromApiGateway': None}
    }

    result = lambda_handler(event, None)

#RESPONSE
# 2020-09-26:11:16:19,832 INFO     [exceptions.py:18] response to api gateway:
# 2020-09-26:11:16:19,833 INFO     [exceptions.py:19] {'body': '{"idFromApiGateway": ["Field may not be null."]}', 'statusCode': 422}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

lamper-0.1.3-py3.8.egg (16.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page