From daa330cd01ed7854db57467431fbcbff44f430ca Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Mon, 26 Jun 2017 14:22:11 -0400 Subject: [PATCH 1/6] change file persmissions so allow executable binaries during build; add configuration param to allow inclusion of additional directories in build --- aws_lambda/aws_lambda.py | 13 ++++++++++++- aws_lambda/helpers.py | 9 +++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/aws_lambda/aws_lambda.py b/aws_lambda/aws_lambda.py index 097c8281..c6b83244 100755 --- a/aws_lambda/aws_lambda.py +++ b/aws_lambda/aws_lambda.py @@ -6,7 +6,7 @@ import sys import time from imp import load_source -from shutil import copy, copyfile +from shutil import copy, copyfile, copytree from tempfile import mkdtemp import botocore @@ -207,6 +207,17 @@ def build(src, requirements=False, local_package=None): print("Bundling: %r" % filename) files.append(os.path.join(src, filename)) + # include additional directories + include_paths = cfg.get('include_directories', []) + for include_path in include_paths: + if not os.path.isdir(include_path): + continue + print("Bundling: %r" % include_path) + copytree( + include_path, + os.path.join(path_to_temp, include_path) + ) + # "cd" into `temp_path` directory. os.chdir(path_to_temp) for f in files: diff --git a/aws_lambda/helpers.py b/aws_lambda/helpers.py index 78099049..772ea675 100644 --- a/aws_lambda/helpers.py +++ b/aws_lambda/helpers.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- import os +import stat import zipfile import datetime as dt - def mkdir(path): if not os.path.exists(path): os.makedirs(path) @@ -22,7 +22,12 @@ def archive(src, dest, filename): for root, _, files in os.walk(src): for file in files: - zfh.write(os.path.join(root, file)) + filePath = os.path.join(root, file) + zfh.write(filePath) + # set global read+write+execute permissions (needed to execute binaries) + # TODO: set permission from file + info = zfh.getinfo(filePath.strip("./")) + info.external_attr = 0777 << 16L zfh.close() return os.path.join(dest, filename) From 0c0187e1c1dbe5ef33ca37daabb866dda12e608a Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Fri, 29 Sep 2017 13:54:22 -0400 Subject: [PATCH 2/6] should now ignore .gitignore --- aws_lambda/aws_lambda.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws_lambda/aws_lambda.py b/aws_lambda/aws_lambda.py index c6b83244..40351999 100755 --- a/aws_lambda/aws_lambda.py +++ b/aws_lambda/aws_lambda.py @@ -147,7 +147,7 @@ def init(src, minimal=False): templates_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "project_templates") for filename in os.listdir(templates_path): - if (minimal and filename == 'event.json') or filename.endswith('.pyc'): + if (minimal and filename == 'event.json') or filename.endswith('.pyc') or filename.endswith('.gitignore'): continue dest_path = os.path.join(templates_path, filename) From 9881a88dae2ed30b9ca21e2230035a46620c89b9 Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Fri, 29 Sep 2017 13:58:55 -0400 Subject: [PATCH 3/6] fixed .gitignore ignore --- aws_lambda/aws_lambda.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aws_lambda/aws_lambda.py b/aws_lambda/aws_lambda.py index 40351999..e303aee4 100755 --- a/aws_lambda/aws_lambda.py +++ b/aws_lambda/aws_lambda.py @@ -147,7 +147,7 @@ def init(src, minimal=False): templates_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "project_templates") for filename in os.listdir(templates_path): - if (minimal and filename == 'event.json') or filename.endswith('.pyc') or filename.endswith('.gitignore'): + if (minimal and filename == 'event.json') or filename.endswith('.pyc'): continue dest_path = os.path.join(templates_path, filename) @@ -204,6 +204,8 @@ def build(src, requirements=False, local_package=None): continue if filename == 'config.yaml': continue + if filename == '.gitignore': + continue print("Bundling: %r" % filename) files.append(os.path.join(src, filename)) From b43d60973de12a89f6ae9e88943edf9d39494d0d Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Thu, 26 Apr 2018 19:24:47 -0400 Subject: [PATCH 4/6] fixed setup.py for pip 10 --- setup.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 1f0c2065..cffbeab2 100755 --- a/setup.py +++ b/setup.py @@ -4,11 +4,18 @@ from setuptools import setup, find_packages +try: # for pip >= 10 + from pip._internal.req import parse_requirements + from pip._internal.download import PipSession +except ImportError: # for pip <= 9.0.3 + from pip.req import parse_requirements + from pip.download import PipSession + with open('README.rst') as readme_file: readme = readme_file.read() -requirements = pip.req.parse_requirements( - "requirements.txt", session=pip.download.PipSession() +requirements = parse_requirements( + "requirements.txt", session=PipSession() ) pip_requirements = [str(r.req) for r in requirements] From d0068a6a07c1571e286052c78ab8cf7f3ec1723b Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Thu, 26 Apr 2018 19:28:39 -0400 Subject: [PATCH 5/6] fixed pip reference in aws_lambda.py --- aws_lambda/aws_lambda.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/aws_lambda/aws_lambda.py b/aws_lambda/aws_lambda.py index e303aee4..200e3c35 100755 --- a/aws_lambda/aws_lambda.py +++ b/aws_lambda/aws_lambda.py @@ -14,6 +14,11 @@ import pip import yaml +try: # for pip >= 10 + from pip._internal.operations.freeze import freeze +except ImportError: # for pip <= 9.0.3 + from pip.operations.freeze import freeze + from .helpers import mkdir, read, archive, timestamp @@ -307,7 +312,7 @@ def pip_install_to_target(path, requirements=False, local_package=None): packages = [] if not requirements: print('Gathering pip packages') - packages.extend(pip.operations.freeze.freeze()) + packages.extend(freeze()) else: if os.path.exists("requirements.txt"): print('Gathering requirement packages') From 8760417b33164c4f1292d778a0658955cae3a7a1 Mon Sep 17 00:00:00 2001 From: Nathan Ogden Date: Thu, 26 Apr 2018 19:37:20 -0400 Subject: [PATCH 6/6] further fixes for pip 10 --- aws_lambda/aws_lambda.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/aws_lambda/aws_lambda.py b/aws_lambda/aws_lambda.py index 200e3c35..3a35608f 100755 --- a/aws_lambda/aws_lambda.py +++ b/aws_lambda/aws_lambda.py @@ -15,9 +15,11 @@ import yaml try: # for pip >= 10 - from pip._internal.operations.freeze import freeze + from pip._internal import main as pip_main + from pip._internal.operations.freeze import freeze as pip_freeze except ImportError: # for pip <= 9.0.3 - from pip.operations.freeze import freeze + from pip import main as pip_main + from pip.operations.freeze import freeze as pip_freeze from .helpers import mkdir, read, archive, timestamp @@ -290,7 +292,7 @@ def _filter_blacklist(package): package = package.replace('-e ', '') print('Installing {package}'.format(package=package)) - pip.main(['install', package, '-t', path, '--ignore-installed']) + pip_main(['install', package, '-t', path, '--ignore-installed']) def pip_install_to_target(path, requirements=False, local_package=None): @@ -312,7 +314,7 @@ def pip_install_to_target(path, requirements=False, local_package=None): packages = [] if not requirements: print('Gathering pip packages') - packages.extend(freeze()) + packages.extend(pip_freeze()) else: if os.path.exists("requirements.txt"): print('Gathering requirement packages')