annotate frogsUtils.py @ 0:da4101033e10 draft default tip

planemo upload
author oinizan
date Wed, 18 Oct 2017 05:30:40 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
da4101033e10 planemo upload
oinizan
parents:
diff changeset
1 #
da4101033e10 planemo upload
oinizan
parents:
diff changeset
2 # Copyright (C) 2014 INRA
da4101033e10 planemo upload
oinizan
parents:
diff changeset
3 #
da4101033e10 planemo upload
oinizan
parents:
diff changeset
4 # This program is free software: you can redistribute it and/or modify
da4101033e10 planemo upload
oinizan
parents:
diff changeset
5 # it under the terms of the GNU General Public License as published by
da4101033e10 planemo upload
oinizan
parents:
diff changeset
6 # the Free Software Foundation, either version 3 of the License, or
da4101033e10 planemo upload
oinizan
parents:
diff changeset
7 # (at your option) any later version.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
8 #
da4101033e10 planemo upload
oinizan
parents:
diff changeset
9 # This program is distributed in the hope that it will be useful,
da4101033e10 planemo upload
oinizan
parents:
diff changeset
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
da4101033e10 planemo upload
oinizan
parents:
diff changeset
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
da4101033e10 planemo upload
oinizan
parents:
diff changeset
12 # GNU General Public License for more details.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
13 #
da4101033e10 planemo upload
oinizan
parents:
diff changeset
14 # You should have received a copy of the GNU General Public License
da4101033e10 planemo upload
oinizan
parents:
diff changeset
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
16 #
da4101033e10 planemo upload
oinizan
parents:
diff changeset
17
da4101033e10 planemo upload
oinizan
parents:
diff changeset
18 __author__ = 'Frederic Escudie - Plateforme bioinformatique Toulouse'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
19 __copyright__ = 'Copyright (C) 2015 INRA'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
20 __license__ = 'GNU General Public License'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
21 __version__ = '0.2.0'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
22 __email__ = 'frogs@inra.fr'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
23 __status__ = 'prod'
da4101033e10 planemo upload
oinizan
parents:
diff changeset
24
da4101033e10 planemo upload
oinizan
parents:
diff changeset
25 import os
da4101033e10 planemo upload
oinizan
parents:
diff changeset
26 import sys
da4101033e10 planemo upload
oinizan
parents:
diff changeset
27 import time
da4101033e10 planemo upload
oinizan
parents:
diff changeset
28 import subprocess
da4101033e10 planemo upload
oinizan
parents:
diff changeset
29 from subprocess import Popen, PIPE
da4101033e10 planemo upload
oinizan
parents:
diff changeset
30
da4101033e10 planemo upload
oinizan
parents:
diff changeset
31
da4101033e10 planemo upload
oinizan
parents:
diff changeset
32 def which(exec_name):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
33 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
34 @summary: Returns the software absolute path.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
35 @param exec_name: [str] The software file (example : blastn or classifier.jar).
da4101033e10 planemo upload
oinizan
parents:
diff changeset
36 @return: [str] The software absolute path.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
37 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
38 path_locations = os.getenv("PATH").split(os.pathsep) + sys.path
da4101033e10 planemo upload
oinizan
parents:
diff changeset
39 exec_path = None
da4101033e10 planemo upload
oinizan
parents:
diff changeset
40 for current_location in path_locations:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
41 if exec_path is None and os.path.isfile(os.path.join(current_location, exec_name)):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
42 exec_path = os.path.abspath( os.path.join(current_location, exec_name) )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
43 if exec_path is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
44 raise Exception( "The software '" + exec_name + "' cannot be retrieved in path." )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
45 return exec_path
da4101033e10 planemo upload
oinizan
parents:
diff changeset
46
da4101033e10 planemo upload
oinizan
parents:
diff changeset
47
da4101033e10 planemo upload
oinizan
parents:
diff changeset
48 def prevent_shell_injections(argparse_namespace, excluded_args=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
49 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
50 @summary: Raises an exception if one parameter contains a backquote or a semi-colon.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
51 @param argparse_namespace: [Namespase] The result of parser.parse_args().
da4101033e10 planemo upload
oinizan
parents:
diff changeset
52 @param excluded_args: [list] List of unchecked parameters.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
53 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
54 exceptions = list() if excluded_args is None else excluded_args
da4101033e10 planemo upload
oinizan
parents:
diff changeset
55 for param_name in argparse_namespace.__dict__.keys():
da4101033e10 planemo upload
oinizan
parents:
diff changeset
56 if not param_name in exceptions:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
57 param_val = getattr(argparse_namespace, param_name)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
58 if issubclass(param_val.__class__, list):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
59 new_param_val = list()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
60 for val in param_val:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
61 if ';' in val.encode('utf8') or '`' in val.encode('utf8') or '|' in val.encode('utf8'):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
62 raise Exception( "';' and '`' are unauthorized characters." )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
63 elif param_val is not None and issubclass(param_val.__class__, str):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
64 if ';' in param_val.encode('utf8') or '`' in param_val.encode('utf8') or '|' in param_val.encode('utf8'):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
65 raise Exception( "';' and '`' are unauthorized characters." )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
66
da4101033e10 planemo upload
oinizan
parents:
diff changeset
67
da4101033e10 planemo upload
oinizan
parents:
diff changeset
68 class Cmd:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
69 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
70 @summary : Command wrapper.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
71 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
72 def __init__(self, program, description, exec_parameters, version_parameters=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
73 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
74 @param exec_parameters: [str] The parameters to execute the program. Two possibles syntaxes.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
75 If the parameter contains the string '##PROGRAM##', this tag will be replaced by the program parameter before submit.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
76 Otherwise the parameters will be added after the program in command line.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
77 @param version_parameters: [str] The parameters to get the program version. Two possibles syntaxes.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
78 If the parameter contains the string '##PROGRAM##', this tag will be replaced by the program parameter before submit.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
79 Otherwise the parameters will be added after the program in command line.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
80 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
81 self.program = program
da4101033e10 planemo upload
oinizan
parents:
diff changeset
82 self.description = description
da4101033e10 planemo upload
oinizan
parents:
diff changeset
83 self.exec_parameters = exec_parameters
da4101033e10 planemo upload
oinizan
parents:
diff changeset
84 self.version_parameters = version_parameters
da4101033e10 planemo upload
oinizan
parents:
diff changeset
85
da4101033e10 planemo upload
oinizan
parents:
diff changeset
86 def get_cmd(self):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
87 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
88 @summary : Returns the command line.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
89 @return : [str] The command line.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
90 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
91 cmd = None
da4101033e10 planemo upload
oinizan
parents:
diff changeset
92 if '##PROGRAM##' in self.exec_parameters:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
93 cmd = self.exec_parameters.replace('##PROGRAM##', self.program)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
94 else:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
95 cmd = self.program + ' ' + self.exec_parameters
da4101033e10 planemo upload
oinizan
parents:
diff changeset
96 return cmd
da4101033e10 planemo upload
oinizan
parents:
diff changeset
97
da4101033e10 planemo upload
oinizan
parents:
diff changeset
98 def get_version(self, location='stderr'):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
99 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
100 @summary : Returns the program version number.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
101 @param location : [str] If the version command returns the version number on 'stdout' or on 'stderr'.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
102 @return : [str] version number if this is possible, otherwise this method return 'unknown'.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
103 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
104 if self.version_parameters is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
105 return "unknown"
da4101033e10 planemo upload
oinizan
parents:
diff changeset
106 else:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
107 try:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
108 cmd = self.program + ' ' + self.version_parameters
da4101033e10 planemo upload
oinizan
parents:
diff changeset
109 if '##PROGRAM##' in self.exec_parameters:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
110 cmd = self.version_parameters.replace('##PROGRAM##', self.program)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
111 p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
112 stdout, stderr = p.communicate()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
113 if location == 'stderr':
da4101033e10 planemo upload
oinizan
parents:
diff changeset
114 return stderr.strip()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
115 else:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
116 return stdout.strip()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
117 except:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
118 raise Exception( "Version cannot be retrieve for the software '" + self.program + "'." )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
119
da4101033e10 planemo upload
oinizan
parents:
diff changeset
120 def parser(self, log_file):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
121 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
122 @summary : Parse the command results to add information in log_file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
123 @log_file : [str] Path to the sample process log file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
124 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
125 pass
da4101033e10 planemo upload
oinizan
parents:
diff changeset
126
da4101033e10 planemo upload
oinizan
parents:
diff changeset
127 def submit(self, log_file=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
128 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
129 @summary : Launch command, trace this action in log and parse results.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
130 @log_file : [str] Path to the sample process log file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
131 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
132 # Log
da4101033e10 planemo upload
oinizan
parents:
diff changeset
133 if log_file is not None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
134 FH_log = Logger( log_file )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
135 FH_log.write( '# ' + self.description + ' (' + os.path.basename(self.program) + ' version : ' + self.get_version() + ')\n' )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
136 FH_log.write( 'Command:\n\t' + self.get_cmd() + '\n\n' )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
137 FH_log.write( 'Execution:\n\tstart: ' + time.strftime("%d %b %Y %H:%M:%S", time.localtime()) + '\n' )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
138 FH_log.close()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
139 # Process
da4101033e10 planemo upload
oinizan
parents:
diff changeset
140 subprocess.check_output( self.get_cmd(), shell=True )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
141 # Log
da4101033e10 planemo upload
oinizan
parents:
diff changeset
142 if log_file is not None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
143 FH_log = Logger( log_file )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
144 FH_log.write( '\tend: ' + time.strftime("%d %b %Y %H:%M:%S", time.localtime()) + '\n\n' )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
145 FH_log.close()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
146 # Post-process results
da4101033e10 planemo upload
oinizan
parents:
diff changeset
147 self.parser(log_file)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
148
da4101033e10 planemo upload
oinizan
parents:
diff changeset
149
da4101033e10 planemo upload
oinizan
parents:
diff changeset
150 class Logger:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
151 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
152 @summary: Log file handler.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
153 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
154
da4101033e10 planemo upload
oinizan
parents:
diff changeset
155 def __init__(self, filepath=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
156 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
157 @param filepath: [str] The log filepath. [default : STDOUT]
da4101033e10 planemo upload
oinizan
parents:
diff changeset
158 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
159 self.filepath = filepath
da4101033e10 planemo upload
oinizan
parents:
diff changeset
160 if self.filepath is not None and self.filepath is not sys.stdout:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
161 self.file_handle = open( self.filepath, "a" )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
162 else:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
163 self.file_handle = sys.stdout
da4101033e10 planemo upload
oinizan
parents:
diff changeset
164
da4101033e10 planemo upload
oinizan
parents:
diff changeset
165 def __del__(self):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
166 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
167 @summary: Closed file handler when the logger is detroyed.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
168 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
169 self.close()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
170
da4101033e10 planemo upload
oinizan
parents:
diff changeset
171 def close(self):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
172 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
173 @summary: Closed file handler.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
174 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
175 if self.filepath is not None and self.filepath is not sys.stdout:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
176 if self.file_handle is not None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
177 self.file_handle.close()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
178 self.file_handle = None
da4101033e10 planemo upload
oinizan
parents:
diff changeset
179
da4101033e10 planemo upload
oinizan
parents:
diff changeset
180 def write(self, msg):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
181 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
182 @summary: Writes msg on file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
183 @param msg: [str] The message to write.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
184 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
185 self.file_handle.write( msg )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
186
da4101033e10 planemo upload
oinizan
parents:
diff changeset
187 @staticmethod
da4101033e10 planemo upload
oinizan
parents:
diff changeset
188 def static_write(filepath, msg):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
189 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
190 @summary: Writes msg on file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
191 @param filepath: [str] The log filepath. [default : STDOUT]
da4101033e10 planemo upload
oinizan
parents:
diff changeset
192 @param msg: [str] The message to write.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
193 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
194 if filepath is not None and filepath is not sys.stdout:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
195 FH_log = open( filepath, "a" )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
196 FH_log.write( msg )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
197 FH_log.close()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
198 else:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
199 sys.stdout.write( msg )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
200
da4101033e10 planemo upload
oinizan
parents:
diff changeset
201
da4101033e10 planemo upload
oinizan
parents:
diff changeset
202 class TmpFiles:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
203 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
204 @summary: Manager for temporary files.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
205 @note:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
206 tmpFiles = TmpFiles(out_dir)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
207 try:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
208 ...
da4101033e10 planemo upload
oinizan
parents:
diff changeset
209 tmp_seq = tmpFiles.add( "toto.fasta" )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
210 ...
da4101033e10 planemo upload
oinizan
parents:
diff changeset
211 tmp_log = tmpFiles.add( "log.txt" )
da4101033e10 planemo upload
oinizan
parents:
diff changeset
212 ...
da4101033e10 planemo upload
oinizan
parents:
diff changeset
213 finaly:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
214 tmpFiles.deleteAll()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
215 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
216 def __init__(self, tmp_dir, prefix=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
217 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
218 @param tmp_dir: [str] The temporary directory path.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
219 @param prefix: [str] The prefix added to each temporary file [default: <TIMESTAMP>_<PID>].
da4101033e10 planemo upload
oinizan
parents:
diff changeset
220 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
221 if prefix is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
222 prefix = str(time.time()) + "_" + str(os.getpid())
da4101033e10 planemo upload
oinizan
parents:
diff changeset
223 self.files = list()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
224 self.dirs = list()
da4101033e10 planemo upload
oinizan
parents:
diff changeset
225 self.tmp_dir = tmp_dir
da4101033e10 planemo upload
oinizan
parents:
diff changeset
226 self.prefix = prefix
da4101033e10 planemo upload
oinizan
parents:
diff changeset
227
da4101033e10 planemo upload
oinizan
parents:
diff changeset
228 def add(self, filename, prefix=None, dir=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
229 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
230 @summary: Add a temporary file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
231 @param filename: The filename without prefix.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
232 @param prefix: The prefix added [default: TmpFiles.prefix].
da4101033e10 planemo upload
oinizan
parents:
diff changeset
233 @param dir: The directory path [default: TmpFiles.tmp_dir].
da4101033e10 planemo upload
oinizan
parents:
diff changeset
234 @return: [str] The filepath.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
235 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
236 # Default
da4101033e10 planemo upload
oinizan
parents:
diff changeset
237 if prefix is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
238 prefix = self.prefix
da4101033e10 planemo upload
oinizan
parents:
diff changeset
239 if dir is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
240 dir = self.tmp_dir
da4101033e10 planemo upload
oinizan
parents:
diff changeset
241 # Process
da4101033e10 planemo upload
oinizan
parents:
diff changeset
242 filepath = os.path.join(dir, prefix + "_" + filename)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
243 self.files.append(filepath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
244 return filepath
da4101033e10 planemo upload
oinizan
parents:
diff changeset
245
da4101033e10 planemo upload
oinizan
parents:
diff changeset
246 def add_dir(self, dirname, prefix=None, dir=None):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
247 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
248 @summary: Add a temporary dir.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
249 @param filename: The dirname without prefix.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
250 @param prefix: The prefix added [default: TmpFiles.prefix].
da4101033e10 planemo upload
oinizan
parents:
diff changeset
251 @param dir: The directory path [default: TmpFiles.tmp_dir].
da4101033e10 planemo upload
oinizan
parents:
diff changeset
252 @return: [str] The filepath.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
253 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
254 # Default
da4101033e10 planemo upload
oinizan
parents:
diff changeset
255 if prefix is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
256 prefix = self.prefix
da4101033e10 planemo upload
oinizan
parents:
diff changeset
257 if dir is None:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
258 dir = self.tmp_dir
da4101033e10 planemo upload
oinizan
parents:
diff changeset
259 # Process
da4101033e10 planemo upload
oinizan
parents:
diff changeset
260 dirpath = os.path.join(dir, prefix + "_" + dirname)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
261 self.dirs.append(dirpath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
262 return dirpath
da4101033e10 planemo upload
oinizan
parents:
diff changeset
263
da4101033e10 planemo upload
oinizan
parents:
diff changeset
264 def delete(self, filepath):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
265 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
266 @summary: Deletes the specified temporary file.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
267 @param filepath: [str] The file path to delete.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
268 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
269 self.files.remove(filepath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
270 if os.path.exists(filepath): os.remove(filepath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
271
da4101033e10 planemo upload
oinizan
parents:
diff changeset
272 def delete_dir(self, dirpath):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
273 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
274 @summary: Deletes the specified temporary dir.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
275 @param filepath: [str] The file path to delete.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
276 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
277 if dirpath in self.dirs: self.dirs.remove(dirpath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
278
da4101033e10 planemo upload
oinizan
parents:
diff changeset
279 if os.path.exists(dirpath):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
280 for root, dirnames,filenames in os.walk(dirpath):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
281 for f in filenames:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
282 if f in self.files: self.files.remove(os.path.join(dirpath,f))
da4101033e10 planemo upload
oinizan
parents:
diff changeset
283 if os.path.exists(os.path.join(dirpath,f)): os.remove(os.path.join(dirpath,f))
da4101033e10 planemo upload
oinizan
parents:
diff changeset
284 for d in dirnames:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
285 if d in self.dirs: self.dirs.remove(os.path.join(dirpath,d))
da4101033e10 planemo upload
oinizan
parents:
diff changeset
286 if os.path.exists(os.path.join(dirpath,d)): self.delete_dir(os.path.join(dirpath,d))
da4101033e10 planemo upload
oinizan
parents:
diff changeset
287 os.rmdir(dirpath)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
288
da4101033e10 planemo upload
oinizan
parents:
diff changeset
289 def deleteAll(self):
da4101033e10 planemo upload
oinizan
parents:
diff changeset
290 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
291 @summary: Deletes all temporary files.
da4101033e10 planemo upload
oinizan
parents:
diff changeset
292 """
da4101033e10 planemo upload
oinizan
parents:
diff changeset
293 all_tmp_files = [tmp_file for tmp_file in self.files]
da4101033e10 planemo upload
oinizan
parents:
diff changeset
294 for tmp_file in all_tmp_files:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
295 self.delete(tmp_file)
da4101033e10 planemo upload
oinizan
parents:
diff changeset
296
da4101033e10 planemo upload
oinizan
parents:
diff changeset
297 all_tmp_dirs=[tmp_dir for tmp_dir in self.dirs]
da4101033e10 planemo upload
oinizan
parents:
diff changeset
298 for tmp_dir in all_tmp_dirs:
da4101033e10 planemo upload
oinizan
parents:
diff changeset
299 self.delete_dir(tmp_dir)