diff --git a/datadog_lambda/handler.py b/datadog_lambda/handler.py index 2c531515..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): @@ -23,6 +24,8 @@ class HandlerError(Exception): if len(parts) != 2: 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 = 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..f018c5d6 --- /dev/null +++ b/datadog_lambda/module_name.py @@ -0,0 +1,4 @@ +def modify_module_name(module_name): + """Returns a valid modified module to get imported + """ + return ".".join(module_name.split("/")) diff --git a/tests/test_module_name.py b/tests/test_module_name.py new file mode 100644 index 00000000..03de197d --- /dev/null +++ b/tests/test_module_name.py @@ -0,0 +1,21 @@ +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")