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 testRemoveExperiment(self): # First with no sharing self._build() archive_location = Location.get_location('archtest') try: self.assertTrue(exists(self.replica.get_absolute_filepath())) remove_experiment(self.experiment) self.assertEquals(1, Experiment.objects.count()) self.assertEquals(0, Dataset.objects.count()) self.assertEquals(0, Dataset_File.objects.count()) self.assertEquals(0, Replica.objects.count()) self.assertFalse(exists(self.replica.get_absolute_filepath())) finally: self._clear() # (Check that the deletes cascaded ... ) self.assertEquals(0, Dataset_File.objects.count()) self.assertEquals(0, Replica.objects.count()) # Repeat, but with the first dataset in 2 experiments. self._build() self.dataset.experiments.add(self.experiment2) archive_location = Location.get_location('archtest') try: self.assertTrue(exists(self.replica.get_absolute_filepath())) remove_experiment(self.experiment) self.assertEquals(1, Experiment.objects.count()) self.assertEquals(1, Dataset.objects.count()) self.assertEquals(1, Dataset_File.objects.count()) self.assertEquals(1, Replica.objects.count()) new_replica = self.datafile.get_preferred_replica() self.assertTrue(self.replica.id == new_replica.id) self.assertTrue(exists(self.replica.get_absolute_filepath())) self.assertFalse(exists(self.replica2.get_absolute_filepath())) finally: self._clear()