File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -120,11 +120,17 @@ def main():
120120 # Parse opts
121121 opts = get_opts ()
122122
123- base_python_path = opts .base_python_path or os .path .curdir
123+ base_python_path = os . path . abspath ( opts .base_python_path or os .path .curdir )
124124
125125 # Load env vars
126- env_vars = load_env_vars (opts .env_vars_json )
127- os .environ .update (env_vars )
126+ if opts .env_vars_json and opts .SAM_TEMPLATE .endswith ('.ts' ):
127+ sam = CDKParser (opts .SAM_TEMPLATE )
128+ mapping = sam .get_env_var_mapping ()
129+ env_vars = load_env_vars (opts .env_vars_json , mapping )
130+ os .environ .update (env_vars )
131+ else :
132+ env_vars = load_env_vars (opts .env_vars_json )
133+ os .environ .update (env_vars )
128134
129135 # Load SAM Template or CDK Stack
130136 if opts .SAM_TEMPLATE .endswith ('.ts' ):
Original file line number Diff line number Diff line change @@ -53,4 +53,47 @@ def _infer_code_uri(self):
5353 m = re .search (r"Code\.fromAsset\(['\"]([^'\"]+)['\"]\)" , self .ts_code )
5454 if m :
5555 return m .group (1 )
56- return '.'
56+ return '.'
57+
58+ def get_env_var_mapping (self ):
59+ """
60+ Parse getLambdaEnv function to map env var names to props keys.
61+ Returns a dict: { ENV_VAR: props_key, ... }
62+ """
63+ mapping = {}
64+ # Find start of getLambdaEnv function
65+ m = re .search (r'function\s+getLambdaEnv\([^)]*\)\s*{' , self .ts_code )
66+ if not m :
67+ m = re .search (r'def\s+getLambdaEnv\([^)]*\)\s*{' , self .ts_code )
68+ if not m :
69+ return mapping
70+ start = m .end () - 1 # position of the opening brace
71+ code = self .ts_code
72+ brace_count = 0
73+ body = ''
74+ i = start
75+ while i < len (code ):
76+ c = code [i ]
77+ if c == '{' :
78+ brace_count += 1
79+ elif c == '}' :
80+ brace_count -= 1
81+ if brace_count == 0 :
82+ body += c
83+ break
84+ body += c
85+ i += 1
86+ # Now parse lines for ENV_VAR: props.propsKey
87+ for line in body .splitlines ():
88+ line = line .strip ().rstrip (',' )
89+ m2 = re .match (r'([A-Z0-9_]+)\s*:\s*props\.([a-zA-Z0-9_]+)\s*(,|$)' , line )
90+ if m2 :
91+ env_var , props_key = m2 .group (1 ), m2 .group (2 )
92+ mapping [env_var ] = props_key
93+ else :
94+ # Match lines like DDBTableName: table.tableName,
95+ m3 = re .match (r'([A-Za-z0-9_]+)\s*:\s*[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\s*(,|$)' , line )
96+ if m3 :
97+ env_var = m3 .group (1 )
98+ mapping [env_var ] = os .environ .get (env_var , "" )
99+ return mapping
Original file line number Diff line number Diff line change @@ -24,7 +24,7 @@ def get_handler(self):
2424 if not name :
2525 raise ValueError (f"Bad handler signature '{ self .handler } '" )
2626 try :
27- sys .path .append (self .base_python_path )
27+ sys .path .append (os . path . abspath ( self .base_python_path ) )
2828 module = importlib .import_module (name )
2929 importlib .reload (module )
3030 handler = getattr (module , func )
Original file line number Diff line number Diff line change 22from collections import namedtuple
33from ruamel .yaml import YAML
44import re
5+ import os
56
67Endpoint = namedtuple ("Endpoint" , "CodeUri Handler Path Method" )
78
@@ -38,7 +39,7 @@ def get_endpoints(self):
3839
3940 yield Endpoint (CodeUri , Handler , Path , Method )
4041
41- def load_env_vars (env_vars_path ):
42+ def load_env_vars (env_vars_path , mapping = None ):
4243 if not env_vars_path :
4344 return {}
4445
@@ -61,8 +62,19 @@ def load_env_vars(env_vars_path):
6162 ts_code = re .sub (r',\s*]' , ']' , ts_code )
6263 # Now ts_code should be valid JSON
6364 import json
64- env_vars = json .loads (ts_code )
65- return env_vars
65+ config_vars = json .loads (ts_code )
66+ if mapping :
67+ env_vars = {}
68+ for env_var , props_key in mapping .items ():
69+ if props_key is None :
70+ env_vars [env_var ] = os .environ .get (env_var , "" )
71+ elif props_key in config_vars :
72+ env_vars [env_var ] = config_vars [props_key ]
73+ else :
74+ env_vars [env_var ] = os .environ .get (env_var , "" )
75+ return env_vars
76+ else :
77+ return config_vars
6678 else :
6779 with open (env_vars_path , "rt" ) as f :
6880 env_vars_all = json .load (f )
You can’t perform that action at this time.
0 commit comments