コード例 #1
0
ファイル: test_utils.py プロジェクト: crawley/mytardis
    def testRemoveExperimentData(self):
        # First with no sharing
        self._build()
        archive_location = Location.get_location('archtest')
        try:
            nos_experiments = Experiment.objects.count()
            nos_datasets = Dataset.objects.count()
            nos_datafiles = Dataset_File.objects.count()
            nos_replicas = Replica.objects.count()
            self.assertTrue(exists(self.replica.get_absolute_filepath()))
            remove_experiment_data(self.experiment, 
                                   'http://example.com/some.tar.gz',
                                   archive_location)
            self.assertEquals(nos_experiments, Experiment.objects.count())
            self.assertEquals(nos_datasets, Dataset.objects.count())
            self.assertEquals(nos_datafiles, Dataset_File.objects.count())
            self.assertEquals(nos_replicas, Replica.objects.count())
            new_replica = self.datafile.get_preferred_replica()
            self.assertTrue(self.replica.id != new_replica.id)
            self.assertFalse(new_replica.stay_remote)
            self.assertTrue(new_replica.verified)
            self.assertEqual(self.replica.protocol, new_replica.protocol)
            self.assertEqual(archive_location.id, new_replica.location.id)
            self.assertEqual('http://example.com/some.tar.gz#1/1/1',
                             new_replica.url)
            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:
            nos_experiments = Experiment.objects.count()
            nos_datasets = Dataset.objects.count()
            nos_datafiles = Dataset_File.objects.count()
            nos_replicas = Replica.objects.count()
            self.assertTrue(exists(self.replica.get_absolute_filepath()))
            remove_experiment_data(self.experiment, 
                                   'http://example.com/some.tar.gz',
                                   archive_location)
            self.assertEquals(nos_experiments, Experiment.objects.count())
            self.assertEquals(nos_datasets, Dataset.objects.count())
            self.assertEquals(nos_datafiles, Dataset_File.objects.count())
            self.assertEquals(nos_replicas, 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()
コード例 #2
0
ファイル: archive.py プロジェクト: crawley/mytardis
    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)