Skip to content

Commit cdeed07

Browse files
committed
Merge pull request #81 from samstav/reqs-typeerror
fix TypeError when reqs are blank
2 parents 2eaec5d + 90f057e commit cdeed07

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

lambda_uploader/package.py

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,19 @@
2121
from subprocess import Popen, PIPE
2222
from lambda_uploader import utils
2323

24+
# Python 2/3 compatability
25+
try:
26+
basestring
27+
except NameError:
28+
basestring = str
29+
30+
2431
LOG = logging.getLogger(__name__)
2532
TEMP_WORKSPACE_NAME = ".lambda_uploader_temp"
2633
ZIPFILE_NAME = 'lambda_function.zip'
2734

2835

29-
def build_package(path, requirements, virtualenv=None, ignore=[],
36+
def build_package(path, requires, virtualenv=None, ignore=[],
3037
extra_files=[], zipfile_name=ZIPFILE_NAME):
3138
pkg = Package(path, zipfile_name)
3239

@@ -35,7 +42,7 @@ def build_package(path, requirements, virtualenv=None, ignore=[],
3542
pkg.extra_file(fil)
3643
if virtualenv is not None:
3744
pkg.virtualenv(virtualenv)
38-
pkg.requirements(requirements)
45+
pkg.requirements(requires)
3946
pkg.build(ignore)
4047

4148
return pkg
@@ -70,25 +77,25 @@ def clean_zipfile(self):
7077
if os.path.isfile(self.zip_file):
7178
os.remove(self.zip_file)
7279

73-
def requirements(self, requirements):
80+
def requirements(self, requires):
7481
'''
7582
Sets the requirements for the package.
7683
7784
It will take either a valid path to a requirements file or
7885
a list of requirements.
7986
'''
80-
if requirements:
81-
if isinstance(requirements, str) and \
82-
os.path.isfile(os.path.abspath(requirements)):
83-
self._requirements_file = os.path.abspath(requirements)
87+
if requires:
88+
if isinstance(requires, basestring) and \
89+
os.path.isfile(os.path.abspath(requires)):
90+
self._requirements_file = os.path.abspath(requires)
8491
self._requirements = None
8592
else:
86-
if isinstance(self._requirements, str):
87-
requirements = requirements.split()
93+
if isinstance(self._requirements, basestring):
94+
requires = requires.split()
8895
self._requirements_file = None
89-
self._requirements = requirements
96+
self._requirements = requires
9097
else:
91-
self._requirements, self._requirements_file = None
98+
self._requirements, self._requirements_file = None, None
9299

93100
def virtualenv(self, virtualenv):
94101
'''
@@ -124,13 +131,12 @@ def install_dependencies(self):
124131
LOG.info('Skip Virtualenv set ... nothing to do')
125132
return
126133

127-
requirements_exist = \
128-
self._requirements or os.path.isfile(self._requirements_file)
129-
if self._virtualenv is None and requirements_exist:
134+
has_reqs = _isfile(self._requirements_file) or self._requirements
135+
if self._virtualenv is None and has_reqs:
130136
LOG.info('Building new virtualenv and installing requirements')
131137
self._build_new_virtualenv()
132138
self._install_requirements()
133-
elif self._virtualenv is None and not requirements_exist:
139+
elif self._virtualenv is None and not has_reqs:
134140
LOG.info('No requirements found, so no virtualenv will be made')
135141
self._pkg_venv = False
136142
else:
@@ -182,7 +188,7 @@ def _install_requirements(self):
182188
cmd = [os.path.join(self._pkg_venv, self._venv_pip),
183189
'install'] + self._requirements
184190

185-
elif os.path.isfile(self._requirements_file):
191+
elif _isfile(self._requirements_file):
186192
# Pip install
187193
LOG.debug("Installing requirements from requirements.txt file")
188194
cmd = [os.path.join(self._pkg_venv, self._venv_pip),
@@ -252,3 +258,10 @@ def _create_zip(self, src):
252258

253259
zf.write(absname, arcname)
254260
zf.close()
261+
262+
263+
def _isfile(path):
264+
"""Variant of os.path.isfile that is somewhat type-resilient."""
265+
if not path:
266+
return False
267+
return os.path.isfile(path)

test/test_package.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,22 @@ def test_install_requirements():
6767
assert path.isdir(path.join(site_packages, '_pytest'))
6868

6969

70+
def test_install_no_requirements():
71+
temp_workspace = path.join(TESTING_TEMP_DIR,
72+
package.TEMP_WORKSPACE_NAME)
73+
74+
pkg = package.Package(TESTING_TEMP_DIR)
75+
pkg.requirements([])
76+
pkg.install_dependencies()
77+
78+
site_packages = path.join(temp_workspace,
79+
'venv/lib/python2.7/site-packages')
80+
if sys.platform == 'win32' or sys.platform == 'cygwin':
81+
site_packages = path.join(temp_workspace, "venv\\lib\\site-packages")
82+
83+
assert path.isdir(path.join(site_packages, '_pytest'))
84+
85+
7086
def test_default_virtualenv():
7187
temp_workspace = path.join(TESTING_TEMP_DIR,
7288
package.TEMP_WORKSPACE_NAME)

0 commit comments

Comments
 (0)