From a5ea16028fb47fc4ede4e63001fe5157c1bc8a19 Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 11:50:52 -0400 Subject: [PATCH 1/7] handle / in lambda handlers and replace them with . --- datadog_lambda/handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/datadog_lambda/handler.py b/datadog_lambda/handler.py index 2c531515..9fdf5ee1 100644 --- a/datadog_lambda/handler.py +++ b/datadog_lambda/handler.py @@ -24,5 +24,6 @@ class HandlerError(Exception): raise HandlerError("Value %s for DD_LAMBDA_HANDLER has invalid format." % path) (mod_name, handler_name) = parts -handler_module = import_module(mod_name) +modified_mod_name = ".".join(mod_name.split("/")) +handler_module = import_module(modified_mod_name) handler = datadog_lambda_wrapper(getattr(handler_module, handler_name)) From b0090777e95224b7c1b07a4104afc81ee58076ed Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 12:46:46 -0400 Subject: [PATCH 2/7] handle names with `/` --- datadog_lambda/handler.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/datadog_lambda/handler.py b/datadog_lambda/handler.py index 9fdf5ee1..37a60a48 100644 --- a/datadog_lambda/handler.py +++ b/datadog_lambda/handler.py @@ -23,7 +23,10 @@ class HandlerError(Exception): if len(parts) != 2: raise HandlerError("Value %s for DD_LAMBDA_HANDLER has invalid format." % path) +def modify_module_name(module_name): + return ".".join(mod_name.split("/")) + (mod_name, handler_name) = parts -modified_mod_name = ".".join(mod_name.split("/")) +modified_mod_name = modify_module_name(mod_name) handler_module = import_module(modified_mod_name) handler = datadog_lambda_wrapper(getattr(handler_module, handler_name)) From 82d91b9ed523b13bf63a32eb51d547c677c29831 Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 12:53:12 -0400 Subject: [PATCH 3/7] try to fix lint? --- datadog_lambda/handler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/datadog_lambda/handler.py b/datadog_lambda/handler.py index 37a60a48..d3d0248a 100644 --- a/datadog_lambda/handler.py +++ b/datadog_lambda/handler.py @@ -23,10 +23,13 @@ class HandlerError(Exception): if len(parts) != 2: raise HandlerError("Value %s for DD_LAMBDA_HANDLER has invalid format." % path) + def modify_module_name(module_name): return ".".join(mod_name.split("/")) + (mod_name, handler_name) = parts + modified_mod_name = modify_module_name(mod_name) handler_module = import_module(modified_mod_name) handler = datadog_lambda_wrapper(getattr(handler_module, handler_name)) From b6b13dfdb18e26471706b54cd92844c927979151 Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 16:29:48 -0400 Subject: [PATCH 4/7] add more tests and move function to its own file --- datadog_lambda/handler.py | 6 +----- datadog_lambda/module_name.py | 6 ++++++ tests/test_module_name.py | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 datadog_lambda/module_name.py create mode 100644 tests/test_module_name.py diff --git a/datadog_lambda/handler.py b/datadog_lambda/handler.py index d3d0248a..09cc5e7d 100644 --- a/datadog_lambda/handler.py +++ b/datadog_lambda/handler.py @@ -8,6 +8,7 @@ import os from datadog_lambda.wrapper import datadog_lambda_wrapper +from datadog_lambda.module_name import modify_module_name class HandlerError(Exception): @@ -24,12 +25,7 @@ class HandlerError(Exception): raise HandlerError("Value %s for DD_LAMBDA_HANDLER has invalid format." % path) -def modify_module_name(module_name): - return ".".join(mod_name.split("/")) - - (mod_name, handler_name) = parts - modified_mod_name = modify_module_name(mod_name) handler_module = import_module(modified_mod_name) handler = datadog_lambda_wrapper(getattr(handler_module, handler_name)) diff --git a/datadog_lambda/module_name.py b/datadog_lambda/module_name.py new file mode 100644 index 00000000..a5891a0b --- /dev/null +++ b/datadog_lambda/module_name.py @@ -0,0 +1,6 @@ + + +def modify_module_name(module_name): + """Returns a valid modified module to get imported + """ + return ".".join(module_name.split("/")) \ No newline at end of file diff --git a/tests/test_module_name.py b/tests/test_module_name.py new file mode 100644 index 00000000..16300246 --- /dev/null +++ b/tests/test_module_name.py @@ -0,0 +1,20 @@ +import sys +import os +import unittest + +try: + from unittest.mock import patch, call, MagicMock +except ImportError: + from mock import patch, call, MagicMock + +from datadog_lambda.module_name import modify_module_name + + + +class TestModifyModuleName(unittest.TestCase): + + def test_modify_module_name(self): + self.assertEqual(modify_module_name('lambda/handler/name.bar'), 'lambda.handler.name.bar') + self.assertEqual(modify_module_name('lambda.handler/name.biz'), 'lambda.handler.name.biz') + self.assertEqual(modify_module_name('foo.handler'), 'foo.handler') + From 03b4cd853d365325ca508673692532e4a767ae10 Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 16:35:56 -0400 Subject: [PATCH 5/7] fix lint --- datadog_lambda/module_name.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datadog_lambda/module_name.py b/datadog_lambda/module_name.py index a5891a0b..9a85ae3e 100644 --- a/datadog_lambda/module_name.py +++ b/datadog_lambda/module_name.py @@ -3,4 +3,4 @@ def modify_module_name(module_name): """Returns a valid modified module to get imported """ - return ".".join(module_name.split("/")) \ No newline at end of file + return ".".join(module_name.split("/")) From c6f7eb547d4b90978a3a51294ef838ff932366a0 Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 16:43:49 -0400 Subject: [PATCH 6/7] format again --- datadog_lambda/module_name.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/datadog_lambda/module_name.py b/datadog_lambda/module_name.py index 9a85ae3e..f018c5d6 100644 --- a/datadog_lambda/module_name.py +++ b/datadog_lambda/module_name.py @@ -1,5 +1,3 @@ - - def modify_module_name(module_name): """Returns a valid modified module to get imported """ From e5e6d6b23c66ca02c7fbe936aafef169975ddd0c Mon Sep 17 00:00:00 2001 From: Sergio Prada Date: Tue, 25 Aug 2020 16:58:29 -0400 Subject: [PATCH 7/7] format tests --- tests/test_module_name.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/test_module_name.py b/tests/test_module_name.py index 16300246..03de197d 100644 --- a/tests/test_module_name.py +++ b/tests/test_module_name.py @@ -10,11 +10,12 @@ from datadog_lambda.module_name import modify_module_name - class TestModifyModuleName(unittest.TestCase): - def test_modify_module_name(self): - self.assertEqual(modify_module_name('lambda/handler/name.bar'), 'lambda.handler.name.bar') - self.assertEqual(modify_module_name('lambda.handler/name.biz'), 'lambda.handler.name.biz') - self.assertEqual(modify_module_name('foo.handler'), 'foo.handler') - + self.assertEqual( + modify_module_name("lambda/handler/name.bar"), "lambda.handler.name.bar" + ) + self.assertEqual( + modify_module_name("lambda.handler/name.biz"), "lambda.handler.name.biz" + ) + self.assertEqual(modify_module_name("foo.handler"), "foo.handler")