Commit 45d38bfff7c7e7d2dc2e4b22002273ec0bf11e93
1 parent
4bef21e3
Exists in
master
and in
67 other branches
ENH: reduced the number of temp files needed to save an InVesalius 3 project wha…
…t make it a little faster
Showing
1 changed file
with
26 additions
and
14 deletions
Show diff stats
invesalius/project.py
| ... | ... | @@ -205,6 +205,7 @@ class Project(object): |
| 205 | 205 | def SavePlistProject(self, dir_, filename): |
| 206 | 206 | dir_temp = tempfile.mkdtemp() |
| 207 | 207 | filename_tmp = os.path.join(dir_temp, 'matrix.dat') |
| 208 | + filelist = {} | |
| 208 | 209 | |
| 209 | 210 | project = { |
| 210 | 211 | # Format info |
| ... | ... | @@ -228,40 +229,51 @@ class Project(object): |
| 228 | 229 | 'dtype': self.matrix_dtype, |
| 229 | 230 | } |
| 230 | 231 | project['matrix'] = matrix |
| 231 | - shutil.copyfile(self.matrix_filename, filename_tmp) | |
| 232 | + filelist[self.matrix_filename] = 'matrix.dat' | |
| 233 | + #shutil.copyfile(self.matrix_filename, filename_tmp) | |
| 232 | 234 | |
| 233 | 235 | # Saving the masks |
| 234 | 236 | masks = {} |
| 235 | 237 | for index in self.mask_dict: |
| 236 | - masks[str(index)] = self.mask_dict[index].SavePlist(dir_temp) | |
| 238 | + masks[str(index)] = self.mask_dict[index].SavePlist(dir_temp, | |
| 239 | + filelist) | |
| 237 | 240 | project['masks'] = masks |
| 238 | 241 | |
| 239 | 242 | # Saving the surfaces |
| 240 | 243 | surfaces = {} |
| 241 | 244 | for index in self.surface_dict: |
| 242 | - surfaces[str(index)] = self.surface_dict[index].SavePlist(dir_temp) | |
| 245 | + surfaces[str(index)] = self.surface_dict[index].SavePlist(dir_temp, | |
| 246 | + filelist) | |
| 243 | 247 | project['surfaces'] = surfaces |
| 244 | 248 | |
| 245 | 249 | # Saving the measurements |
| 246 | 250 | measurements = self.GetMeasuresDict() |
| 247 | 251 | measurements_filename = 'measurements.plist' |
| 252 | + temp_mplist = tempfile.mktemp() | |
| 248 | 253 | plistlib.writePlist(measurements, |
| 249 | - os.path.join(dir_temp, measurements_filename)) | |
| 254 | + temp_mplist) | |
| 255 | + filelist[temp_mplist] = measurements_filename | |
| 250 | 256 | project['measurements'] = measurements_filename |
| 251 | 257 | |
| 252 | 258 | # Saving the annotations (empty in this version) |
| 253 | 259 | project['annotations'] = {} |
| 254 | 260 | |
| 255 | 261 | # Saving the main plist |
| 256 | - plistlib.writePlist(project, os.path.join(dir_temp, 'main.plist')) | |
| 262 | + temp_plist = tempfile.mktemp() | |
| 263 | + plistlib.writePlist(project, temp_plist) | |
| 264 | + filelist[temp_plist] = 'main.plist' | |
| 257 | 265 | |
| 258 | 266 | # Compressing and generating the .inv3 file |
| 259 | 267 | path = os.path.join(dir_,filename) |
| 260 | - Compress(dir_temp, path) | |
| 268 | + Compress(dir_temp, path, filelist) | |
| 261 | 269 | |
| 262 | 270 | # Removing the temp folder. |
| 263 | 271 | shutil.rmtree(dir_temp) |
| 264 | 272 | |
| 273 | + for f in filelist: | |
| 274 | + if filelist[f].endswith('.plist'): | |
| 275 | + print f | |
| 276 | + os.remove(f) | |
| 265 | 277 | |
| 266 | 278 | def OpenPlistProject(self, filename): |
| 267 | 279 | import data.measures as ms |
| ... | ... | @@ -322,18 +334,18 @@ class Project(object): |
| 322 | 334 | measure.Load(measurements[index]) |
| 323 | 335 | self.measurement_dict[int(index)] = measure |
| 324 | 336 | |
| 325 | -def Compress(folder, filename): | |
| 337 | +def Compress(folder, filename, filelist): | |
| 326 | 338 | tmpdir, tmpdir_ = os.path.split(folder) |
| 327 | 339 | current_dir = os.path.abspath(".") |
| 328 | - os.chdir(tmpdir) | |
| 329 | - file_list = glob.glob(os.path.join(tmpdir_,"*")) | |
| 340 | + #os.chdir(tmpdir) | |
| 341 | + #file_list = glob.glob(os.path.join(tmpdir_,"*")) | |
| 330 | 342 | tar_filename = tmpdir_ + ".inv3" |
| 331 | - tar = tarfile.open(tar_filename.encode(wx.GetDefaultPyEncoding()), "w:gz") | |
| 332 | - for name in file_list: | |
| 333 | - tar.add(name) | |
| 343 | + tar = tarfile.open(filename.encode(wx.GetDefaultPyEncoding()), "w:gz") | |
| 344 | + for name in filelist: | |
| 345 | + tar.add(name, arcname=os.path.join(tmpdir_, filelist[name])) | |
| 334 | 346 | tar.close() |
| 335 | - shutil.move(tmpdir_+ ".inv3", filename) | |
| 336 | - os.chdir(current_dir) | |
| 347 | + #shutil.move(tmpdir_+ ".inv3", filename) | |
| 348 | + #os.chdir(current_dir) | |
| 337 | 349 | |
| 338 | 350 | def Extract(filename, folder): |
| 339 | 351 | tar = tarfile.open(filename, "r:gz") | ... | ... |