From 5bfaf9d17c15662b1298676a1f0745644d316b97 Mon Sep 17 00:00:00 2001
From: Setu Shah <setu4993@yahoo.co.in>
Date: Wed, 29 Dec 2021 12:56:36 -0800
Subject: [PATCH] fix: Resolve handler to improve sub-dir handling

fixes https://github.com/aws/aws-cdk/issues/15391
---
 packages/@aws-cdk/aws-lambda-python/lib/function.ts         | 6 ++++--
 packages/@aws-cdk/aws-lambda-python/test/function.test.ts   | 2 +-
 .../aws-lambda-python/test/integ.function.sub.expected.json | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/packages/@aws-cdk/aws-lambda-python/lib/function.ts b/packages/@aws-cdk/aws-lambda-python/lib/function.ts
index 9de4881134e30..680c9cf845265 100644
--- a/packages/@aws-cdk/aws-lambda-python/lib/function.ts
+++ b/packages/@aws-cdk/aws-lambda-python/lib/function.ts
@@ -14,7 +14,7 @@ import { Construct } from '@aws-cdk/core';
  */
 export interface PythonFunctionProps extends FunctionOptions {
   /**
-   * The path to the root directory of the function.
+   * Path to the source of the function or the location for dependencies.
    */
   readonly entry: string;
 
@@ -70,6 +70,8 @@ export class PythonFunction extends Function {
       throw new Error('Only `PYTHON` runtimes are supported.');
     }
 
+    const resolvedHandler =`${index.slice(0, -3)}.${handler}`.replace('/', '.');
+
     super(scope, id, {
       ...props,
       runtime,
@@ -78,7 +80,7 @@ export class PythonFunction extends Function {
         runtime,
         ...props.bundling,
       }),
-      handler: `${index.slice(0, -3)}.${handler}`,
+      handler: resolvedHandler,
     });
   }
 }
diff --git a/packages/@aws-cdk/aws-lambda-python/test/function.test.ts b/packages/@aws-cdk/aws-lambda-python/test/function.test.ts
index 935d4ceffaff7..3a28f276ec7ad 100644
--- a/packages/@aws-cdk/aws-lambda-python/test/function.test.ts
+++ b/packages/@aws-cdk/aws-lambda-python/test/function.test.ts
@@ -73,7 +73,7 @@ test('PythonFunction with index in a subdirectory', () => {
   }));
 
   Template.fromStack(stack).hasResourceProperties('AWS::Lambda::Function', {
-    Handler: 'inner/custom_index.custom_handler',
+    Handler: 'inner.custom_index.custom_handler',
   });
 });
 
diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.sub.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.sub.expected.json
index 3c44a7a33990e..35e40ea2f0cc6 100644
--- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.sub.expected.json
+++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.sub.expected.json
@@ -78,7 +78,7 @@
             "Arn"
           ]
         },
-        "Handler": "inner/custom_index.custom_handler",
+        "Handler": "inner.custom_index.custom_handler",
         "Runtime": "python3.7"
       },
       "DependsOn": [