Skip to main content

Simple Lambda Toolkit

Project description

SLaT

Simple Lambda Toolkit

CircleCI Coverage Status

Collection of reusable Python tools for lambda development.

This project is meant to :meat_on_bone: (or :corn:) these requirements

  • As a lambda developer I want to write as little boilerplate as possible
  • As a lambda developer I want to ensure I produce high value, discoverable logs
  • As a lambda developer I want to ensure I sends proper, consistent, well formed responses
  • As a lambda developer I want ToBeDetermined

Example hello world Lambda

from slat.log_util import LogUtil
from slat.response import LambdaProxyResponse
from slat.types import JsonapiBody

# initiate you logger outside the handler
log = LogUtil.init_logger(env_var_name='LOG_LEVEL', default_level='INFO')

def lambda_handler(event, context):
    # bind the request id to the logger
    LogUtil.init_request({'request_id': context.aws_request_id})
    # make log statements as normal
    log.debug('Lambda Handler Event', lambda_handler_event=event)
    # prepare a Jsonapi payload (https://jsonapi.org/)
    response_body = JsonapiBody(data={'hello': 'world!'}, errors=[], meta={})
    # respond in the expected APIGateway lambda proxy format (https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format)
    return LambdaProxyResponse.respond(200, response_body, context)

Slat Tools

Responses

TBDocumented

Logging

Structlog is used for structured JSON logging

Example Usage

import logging
from slat.log_util import LogUtil

log = LogUtil.init_logger(default_level='INFO',  correlation_id_key_val={'request_id': '999'})
log.info('is this JSON: {"answer": 42}')
log.error("the log message", some="value", extra_data=[1, 2, 3, "4"])
# only OUR logger will render as JSON
logging.getLogger("test").warning("hello")

output:

{"event": "is this JSON: {\"answer\": 42}", "level": "info", "logger": "slat.log_util", "request_id": "999", "timestamp": "2019-11-06T21:04:33.517295Z"}
{"event": "the log message", "extra_data": [1, 2, 3, "4"], "level": "error", "logger": "slat.log_util", "request_id": "999", "some": "value", "timestamp": "2019-11-06T21:04:33.517652Z"}
hello

For test runs you can add an ENV flag TESTING_RUN=true and log statements will be written to ./testing.log

TESTING_RUN=true pytest

Running tests

pytest

# with coverage 
pytest --cov=slat

# generage html report
coverage html
open ./htmlcov/index.html

Developing

create file ~/.pypirc

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository: https://upload.pypi.org/legacy/
username:
password:

[pypitest]
repository: https://test.pypi.org/legacy/
username:
password:

build

# tick to semver `version` in setup.py
rm -rf dist
python setup.py bdist_wheel --universal

pypitest

twine upload --repository pypitest dist/*
pip install slat --index-url https://test.pypi.org/simple/ --upgrade

pypi

twine upload --repository pypi dist/*
pip install slat --upgrade

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

slat-0.3.1-py2.py3-none-any.whl (10.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file slat-0.3.1-py2.py3-none-any.whl.

File metadata

  • Download URL: slat-0.3.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.4

File hashes

Hashes for slat-0.3.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 01c2f39dfdd8017746920276435afb2ea99e616ae4ad6a2b621d89c895647bb5
MD5 23e7aa441d19a097b6b00e2089471f90
BLAKE2b-256 1d844df83e3c26ec53d5cf78419a9be7cdba81fc098769cb0101a4de6178c04d

See more details on using hashes here.

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