def create_lambda_archive(script, stream=None, get_content=False, libs=[], runtime=None): """Utility method to create a Lambda function archive""" tmp_dir = tempfile.mkdtemp(prefix=ARCHIVE_DIR_PREFIX) TMP_FILES.append(tmp_dir) file_name = get_handler_file_from_name(LAMBDA_DEFAULT_HANDLER, runtime=runtime) script_file = '%s/%s' % (tmp_dir, file_name) save_file(script_file, script) # copy libs for lib in libs: paths = [lib, '%s.py' % lib] target_dir = tmp_dir root_folder = '%s/lib/python*/site-packages' % LOCALSTACK_VENV_FOLDER if lib == 'localstack': paths = ['localstack/*.py', 'localstack/utils'] root_folder = LOCALSTACK_ROOT_FOLDER target_dir = '%s/%s/' % (tmp_dir, lib) mkdir(target_dir) for path in paths: file_to_copy = '%s/%s' % (root_folder, path) for file_path in glob.glob(file_to_copy): run('cp -r %s %s/' % (file_path, target_dir)) # create zip file return create_zip_file(tmp_dir, get_content=True)
def create_lambda_archive(script, get_content=False, libs=[], runtime=None): """Utility method to create a Lambda function archive""" tmp_dir = tempfile.mkdtemp(prefix=ARCHIVE_DIR_PREFIX) TMP_FILES.append(tmp_dir) file_name = get_handler_file_from_name(LAMBDA_DEFAULT_HANDLER, runtime=runtime) script_file = os.path.join(tmp_dir, file_name) save_file(script_file, script) # copy libs for lib in libs: paths = [lib, '%s.py' % lib] target_dir = tmp_dir root_folder = os.path.join(LOCALSTACK_VENV_FOLDER, 'lib/python*/site-packages') if lib == 'localstack': paths = ['localstack/*.py', 'localstack/utils'] root_folder = LOCALSTACK_ROOT_FOLDER target_dir = os.path.join(tmp_dir, lib) mkdir(target_dir) for path in paths: file_to_copy = os.path.join(root_folder, path) for file_path in glob.glob(file_to_copy): name = os.path.join(target_dir, file_path.split(os.path.sep)[-1]) if os.path.isdir(file_path): shutil.copytree(file_path, name) else: shutil.copyfile(file_path, name) # create zip file return create_zip_file(tmp_dir, get_content=get_content)
def get_lambda_code_param(params, **kwargs): code = params.get('Code', {}) zip_file = code.get('ZipFile') if zip_file and not common.is_base64(zip_file): tmp_dir = common.new_tmp_dir() handler_file = get_handler_file_from_name(params['Handler'], runtime=params['Runtime']) tmp_file = os.path.join(tmp_dir, handler_file) common.save_file(tmp_file, zip_file) zip_file = create_zip_file(tmp_file, get_content=True) code['ZipFile'] = zip_file common.rm_rf(tmp_dir) return code
def create_lambda_archive(script, get_content=False, libs=[], runtime=None, file_name=None): """ Utility method to create a Lambda function archive """ runtime = runtime or LAMBDA_DEFAULT_RUNTIME tmp_dir = tempfile.mkdtemp(prefix=ARCHIVE_DIR_PREFIX) TMP_FILES.append(tmp_dir) file_name = file_name or get_handler_file_from_name(LAMBDA_DEFAULT_HANDLER, runtime=runtime) script_file = os.path.join(tmp_dir, file_name) if os.path.sep in script_file: mkdir(os.path.dirname(script_file)) # create __init__.py files along the path to allow Python imports path = file_name.split(os.path.sep) for i in range(1, len(path)): save_file(os.path.join(tmp_dir, *(path[:i] + ['__init__.py'])), '') save_file(script_file, script) # copy libs for lib in libs: paths = [lib, '%s.py' % lib] try: module = importlib.import_module(lib) paths.append(module.__file__) except Exception: pass target_dir = tmp_dir root_folder = os.path.join(LOCALSTACK_VENV_FOLDER, 'lib/python*/site-packages') if lib == 'localstack': paths = ['localstack/*.py', 'localstack/utils'] root_folder = LOCALSTACK_ROOT_FOLDER target_dir = os.path.join(tmp_dir, lib) mkdir(target_dir) for path in paths: file_to_copy = path if path.startswith('/') else os.path.join( root_folder, path) for file_path in glob.glob(file_to_copy): name = os.path.join(target_dir, file_path.split(os.path.sep)[-1]) if os.path.isdir(file_path): copy_dir(file_path, name) else: shutil.copyfile(file_path, name) # create zip file result = create_zip_file(tmp_dir, get_content=get_content) return result
def create_lambda_archive(script, stream=None, get_content=False, libs=[], runtime=None): """Utility method to create a Lambda function archive""" tmp_dir = tempfile.mkdtemp(prefix=ARCHIVE_DIR_PREFIX) TMP_FILES.append(tmp_dir) file_name = get_handler_file_from_name(LAMBDA_DEFAULT_HANDLER, runtime=runtime) script_file = '%s/%s' % (tmp_dir, file_name) save_file(script_file, script) # copy libs for lib in libs: paths = [lib, '%s.py' % lib] target_dir = tmp_dir root_folder = '%s/lib/python*/site-packages' % LOCALSTACK_VENV_FOLDER if lib == 'localstack': paths = ['localstack/*.py', 'localstack/utils'] root_folder = LOCALSTACK_ROOT_FOLDER target_dir = '%s/%s/' % (tmp_dir, lib) mkdir(target_dir) for path in paths: file_to_copy = '%s/%s' % (root_folder, path) for file_path in glob.glob(file_to_copy): run('cp -r %s %s/' % (file_path, target_dir)) # create zip file return create_zip_file(tmp_dir, get_content=True)