diff --git a/.travis.yml b/.travis.yml index b29f285..64a1812 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,21 @@ language: python -python: - - "2.7" - - "3.5" - - "3.6" +matrix: + include: + - python: 2.7 + dist: xenial + sudo: true + - python: 3.6 + dist: xenial + sudo: true + - python: 3.7 + dist: xenial + sudo: true + +before_install: + # Because Travis has some special configuration for boto that interfere + # https://github.com/travis-ci/travis-ci/issues/7940 + - "sudo rm -f /etc/boto.cfg" install: - pip install tox-travis coveralls diff --git a/raven_python_lambda/__init__.py b/raven_python_lambda/__init__.py index adba161..8fb11d9 100644 --- a/raven_python_lambda/__init__.py +++ b/raven_python_lambda/__init__.py @@ -151,7 +151,7 @@ def decorated(event, context): # Gather identity information from context if possible if event.get('requestContext'): - identity = event['requestContext']['identity'] + identity = event['requestContext'].get('identity') if identity: raven_context['user'] = { 'id': identity.get('cognitoIdentityId', None), @@ -163,11 +163,12 @@ def decorated(event, context): } # Add additional tags for AWS_PROXY endpoints - raven_context['tags'] = { - 'api_id': event['requestContext']['apiId'], - 'api_stage': event['requestContext']['stage'], - 'http_method': event['requestContext']['httpMethod'] - } + if 'apiId' in event['requestContext']: + raven_context['tags'] = { + 'api_id': event['requestContext']['apiId'], + 'api_stage': event['requestContext']['stage'], + 'http_method': event['requestContext']['httpMethod'] + } # Add cloudwatch event context if event.get('detail'): @@ -189,7 +190,7 @@ def decorated(event, context): 'data': {} } - if event.get('requestContext'): + if event.get('requestContext') and 'httpMethod' in event['requestContext']: breadcrumb['data'] = { 'http_method': event['requestContext']['httpMethod'], 'host': (event['headers'] or {}).get('Host'), diff --git a/raven_python_lambda/tests/test_decorator.py b/raven_python_lambda/tests/test_decorator.py index ad8616e..69c46d2 100644 --- a/raven_python_lambda/tests/test_decorator.py +++ b/raven_python_lambda/tests/test_decorator.py @@ -1,6 +1,5 @@ import threading from time import sleep -import os import pytest @@ -75,3 +74,17 @@ def f(event, context): wrapper = RavenLambdaWrapper() assert wrapper.config['enabled'] assert wrapper.config['raven_client'] + + +def test_doesnt_error_out_if_request_context_is_present_but_not_all_keys(): + """You can use lambda together with Application Load Balancer (ALB) + which uses a different set of keys than previously set. This test + covers all the keys that are available when called by an ALB. + """ + event = dict(requestContext=dict(elb=dict(targetGroupArn='arn:aws:something'))) + + @RavenLambdaWrapper() + def test_func(event, context): + return dict(success=True) + + assert test_func(event, FakeContext()) == dict(success=True) diff --git a/tox.ini b/tox.ini index 7562264..2e400f0 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py36 +envlist = py27,py36,py37 [testenv] passenv =