def _process_experiment(self, exp): if self.dryRun: self.stdout.write('Would have archived experiment %s\n' % exp.id) return tmp_file = None try: if self.directory: pathname = os.path.join(self.directory, '%s-archive.tar.gz' % exp.id) else: tmp_file = NamedTemporaryFile(prefix='mytardis_tmp_ar', suffix='.tar.gz', delete=False) create_experiment_archive(exp, tmp_file) if not self.directory: archive_url = self.location.provider.put_archive( tmp_file.name, exp) create_archive_record(exp, archive_url) if self.verbosity > 0: self.stdout.write('Archived experiment %s to %s\n' % (exp.id, archive_url)) else: archive_url = None if self.verbosity > 0: self.stdout.write('Archived experiment %s to %s\n' % (exp.id, pathname)) self.transfer_count += 1 if self.remove_all: remove_experiment(exp) elif self.remove_data: remove_experiment_data(exp, archive_url, location) except ArchivingError as e: self.stderr.write( 'archiving failed for experiment %s : %s\n' % \ (exp.id, e.args[0])) self.error_count += 1 except TransferError as e: self.stderr.write( 'archive export failed experiment %s : %s\n' % \ (exp.id, e.args[0])) self.error_count += 1 finally: if tmp_file: os.unlink(tmp_file.name)
def testCreateExperimentArchive(self): datafile, replica = generate_datafile(None, self.dataset, "Hi mum") try: tmp = NamedTemporaryFile(delete=False) create_experiment_archive(self.experiment, tmp) self.assertTrue(os.path.exists(tmp.name)) self.assertTrue(os.path.getsize(tmp.name) > 0) try: tf = tarfile.open(name=tmp.name, mode='r') members = tf.getmembers() self.assertEqual(len(members), 2) # manifest + one data file. self.assertEqual(members[0].name, '%s/Manifest' % self.experiment.id) self.assertTrue(members[0].size > 0) self.assertEqual(members[1].name, '%s/%s/%s' % (self.experiment.id, self.dataset.id, datafile.filename)) self.assertEqual(members[1].size, int(datafile.size)) finally: tf.close() finally: os.unlink(tmp.name)