27
27
28
28
29
29
def build_package (path , requirements , virtualenv = None , ignore = []):
30
- pkg = Package (path , virtualenv )
30
+ pkg = Package (path , virtualenv , requirements )
31
31
32
32
pkg .clean_workspace ()
33
33
pkg .clean_zipfile ()
34
34
pkg .prepare_workspace ()
35
- if virtualenv :
36
- if not os .path .isdir (virtualenv ):
37
- raise Exception ("supplied virtualenv %s not found" % virtualenv )
38
- LOG .info ("Using existing virtualenv found in %s" % virtualenv )
39
- else :
40
- LOG .info ('Building new virtualenv and installing requirements' )
41
- pkg .prepare_virtualenv ()
42
- pkg .install_requirements (requirements )
35
+ pkg .prepare_virtualenv ()
43
36
pkg .package (ignore )
44
37
return pkg
45
38
46
39
47
40
class Package (object ):
48
- def __init__ (self , path , virtualenv = None ):
41
+ def __init__ (self , path , virtualenv = None , requirements = [] ):
49
42
self ._path = path
50
43
self ._temp_workspace = os .path .join (path ,
51
44
TEMP_WORKSPACE_NAME )
52
45
self .zip_file = os .path .join (path , ZIPFILE_NAME )
53
-
54
- if virtualenv :
55
- self ._pkg_venv = virtualenv
56
- else :
57
- self ._pkg_venv = os .path .join (self ._temp_workspace , 'venv' )
58
- self ._venv_pip = 'bin/pip'
59
- if sys .platform == 'win32' or sys .platform == 'cygwin' :
60
- self ._venv_pip = 'Scripts\pip.exe'
46
+ self ._virtualenv = virtualenv
47
+ self ._requirements = requirements
61
48
62
49
def clean_workspace (self ):
63
50
if os .path .isdir (self ._temp_workspace ):
@@ -72,21 +59,59 @@ def prepare_workspace(self):
72
59
os .mkdir (self ._temp_workspace )
73
60
74
61
def prepare_virtualenv (self ):
75
- proc = Popen (["virtualenv" , self ._pkg_venv ], stdout = PIPE , stderr = PIPE )
76
- stdout , stderr = proc .communicate ()
77
- LOG .debug ("Virtualenv stdout: %s" % stdout )
78
- LOG .debug ("Virtualenv stderr: %s" % stderr )
62
+ requirements_exist = \
63
+ self ._requirements or os .path .isfile ("requirements.txt" )
64
+ if self ._virtualenv and self ._virtualenv is not False :
65
+ if not os .path .isdir (self ._virtualenv ):
66
+ raise Exception ("virtualenv %s not found" % self ._virtualenv )
67
+ LOG .info ("Using existing virtualenv at %s" % self ._virtualenv )
68
+
69
+ # use supplied virtualenv path
70
+ self ._pkg_venv = self ._virtualenv
71
+ elif self ._virtualenv is None and requirements_exist :
72
+ LOG .info ('Building new virtualenv and installing requirements' )
73
+ self .build_new_virtualenv ()
74
+ self .install_requirements ()
75
+ elif self ._virtualenv is None and not requirements_exist :
76
+ LOG .info ('No requirements found, so no virtualenv will be made' )
77
+ self ._pkg_venv = False
78
+ elif self ._virtualenv is False :
79
+ LOG .info ('Virtualenv has been omitted by supplied flag' )
80
+ self ._pkg_venv = False
81
+ else :
82
+ raise Exception ('Cannot determine what to do about virtualenv' )
79
83
80
- if proc .returncode is not 0 :
81
- raise Exception ('virtualenv returned unsuccessfully' )
84
+ def build_new_virtualenv (self ):
85
+ if self ._virtualenv is None :
86
+ # virtualenv was "None" which means "do default"
87
+ self ._pkg_venv = os .path .join (self ._temp_workspace , 'venv' )
88
+ self ._venv_pip = 'bin/pip'
89
+ if sys .platform == 'win32' or sys .platform == 'cygwin' :
90
+ self ._venv_pip = 'Scripts\pip.exe'
91
+
92
+ proc = Popen (["virtualenv" , self ._pkg_venv ],
93
+ stdout = PIPE , stderr = PIPE )
94
+ stdout , stderr = proc .communicate ()
95
+ LOG .debug ("Virtualenv stdout: %s" % stdout )
96
+ LOG .debug ("Virtualenv stderr: %s" % stderr )
97
+
98
+ if proc .returncode is not 0 :
99
+ raise Exception ('virtualenv returned unsuccessfully' )
100
+
101
+ else :
102
+ raise Exception ('cannot build a new virtualenv when asked to omit' )
103
+
104
+ def install_requirements (self ):
105
+ if not hasattr (self , '_pkg_venv' ):
106
+ err = 'Must call build_new_virtualenv before install_requirements'
107
+ raise Exception (err )
82
108
83
- def install_requirements (self , requirements ):
84
109
cmd = None
85
- if requirements :
110
+ if self . _requirements :
86
111
LOG .debug ("Installing requirements found %s in config"
87
- % requirements )
112
+ % self . _requirements )
88
113
cmd = [os .path .join (self ._pkg_venv , self ._venv_pip ),
89
- 'install' ] + requirements
114
+ 'install' ] + self . _requirements
90
115
91
116
elif os .path .isfile ("requirements.txt" ):
92
117
# Pip install
@@ -109,18 +134,19 @@ def package(self, ignore=[]):
109
134
# Copy site packages into package base
110
135
LOG .info ('Copying site packages' )
111
136
112
- site_packages = 'lib/python2.7/site-packages'
113
- lib64_site_packages = 'lib64/python2.7/site-packages'
114
- if sys .platform == 'win32' or sys .platform == 'cygwin' :
115
- lib64_site_packages = 'lib64\\ site-packages'
116
- site_packages = 'lib\\ site-packages'
117
-
118
- utils .copy_tree (os .path .join (self ._pkg_venv , site_packages ),
119
- package )
120
- lib64_path = os .path .join (self ._pkg_venv , lib64_site_packages )
121
- if not os .path .islink (lib64_path ):
122
- LOG .info ('Copying lib64 site packages' )
123
- utils .copy_tree (lib64_path , package )
137
+ if hasattr (self , '_pkg_venv' ) and self ._pkg_venv :
138
+ site_packages = 'lib/python2.7/site-packages'
139
+ lib64_site_packages = 'lib64/python2.7/site-packages'
140
+ if sys .platform == 'win32' or sys .platform == 'cygwin' :
141
+ lib64_site_packages = 'lib64\\ site-packages'
142
+ site_packages = 'lib\\ site-packages'
143
+
144
+ utils .copy_tree (os .path .join (self ._pkg_venv , site_packages ),
145
+ package )
146
+ lib64_path = os .path .join (self ._pkg_venv , lib64_site_packages )
147
+ if not os .path .islink (lib64_path ):
148
+ LOG .info ('Copying lib64 site packages' )
149
+ utils .copy_tree (lib64_path , package )
124
150
125
151
# Append the temp workspace to the ignore list
126
152
ignore .append ("^%s/*" % self ._temp_workspace )
0 commit comments