示例#1
0
    def test_apply_iter_nopass(self):
        manifest1 = {
            'contents':
            set("about.txt metadata/pod.json metadata/trial3".split()),
            'name': "goob_1.bag"
        }
        self.plan._manifests.append(manifest1)

        manifest2 = {
            'contents':
            set("data/trial1.json data/trial2.json data/trial3/trial3a.json".
                split()),
            'name':
            "goob_2.bag"
        }
        self.plan._manifests.append(manifest2)

        iter = self.plan.apply_iter(self.tempdir,
                                    info_nopass=['Bagging-Date', 'Bag-Size'])
        mbag = next(iter)
        mbagdir = os.path.join(self.tempdir, "goob_1.bag")
        self.assertEqual(mbag, mbagdir)
        for member in manifest1['contents']:
            self.assertTrue(os.path.exists(os.path.join(mbagdir, member)))
        self.assertTrue(os.path.exists(os.path.join(mbagdir, "bagit.txt")))
        self.assertTrue(os.path.exists(os.path.join(mbagdir, "bag-info.txt")))
        self.assertTrue(
            os.path.exists(os.path.join(mbagdir, "manifest-sha256.txt")))

        bag = Bag(mbagdir)
        self.assertTrue(bag.validate())
        self.assertTrue(bag.is_valid())
        self.assertNotIn('Bag-Size', bag.info)
        self.assertNotIn('Multibag-Source-Bag-Size', bag.info)
        self.assertNotIn('Bagging-Date', bag.info)
示例#2
0
    def test_nonstandard(self):
        tempdir = tempfile.mkdtemp()
        try:
            self.bagdir = os.path.join(tempdir, "samplebag")
            shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir)
            os.mkdir(os.path.join(self.bagdir, "metadata", "trial3"))

            self.bag = xtend.as_extended(Bag(self.bagdir))

            contents = list(self.bag.nonstandard())
            self.assertIn("about.txt", contents)
            self.assertIn(os.path.join("metadata", "pod.json"), contents)
            self.assertIn(os.path.join("metadata", "trial3"), contents)
            self.assertIn(os.path.join("data", "trial1.json"), contents)
            self.assertIn(os.path.join("data", "trial2.json"), contents)
            self.assertIn(os.path.join("data", "trial3/trial3a.json"),
                          contents)
            self.assertIn(os.path.join("multibag", "member-bags.tsv"),
                          contents)
            self.assertIn(os.path.join("multibag", "file-lookup.tsv"),
                          contents)
            self.assertEqual(len(contents), 8)

        finally:
            shutil.rmtree(tempdir)
示例#3
0
    def setUp(self):
        self.tempdir = tempfile.mkdtemp()
        self.bagdir = os.path.join(self.tempdir, "samplebag")
        shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir)
        shutil.rmtree(os.path.join(self.bagdir, "multibag"))
        os.mkdir(os.path.join(self.bagdir, "metadata", "trial3"))

        # add a line to the bag-info.txt that will require encoding
        with io.open(os.path.join(self.bagdir, "bag-info.txt"),
                     'a',
                     encoding='utf-8') as fd:
            fd.write(u"Funny-Characters: ")
            fd.write('ß')
            fd.write(u"\n")

        self.bag = split.asProgenitor(Bag(self.bagdir))
        self.plan = split.SplitPlan(self.bag)
示例#4
0
    def test_replicate_withlink(self):
        tempdir = tempfile.mkdtemp()
        try:
            self.bagdir = os.path.join(tempdir, "samplebag")
            shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir)
            os.mkdir(os.path.join(self.bagdir, "metadata", "trial3"))

            self.bag = xtend.as_extended(Bag(self.bagdir))
            self.bag.replicate_with_hardlink = True
            self.assertTrue(
                os.path.exists(os.path.join(self.bag._bagdir, "bagit.txt")))
            outdir = os.path.join(tempdir, "otherbag")
            self.assertFalse(os.path.exists(os.path.join(outdir, "bagit.txt")))

            self.bag.replicate("bagit.txt", outdir)
            self.assertTrue(os.path.exists(os.path.join(outdir, "bagit.txt")))
            self.assertTrue(ishardlink(os.path.join(outdir, "bagit.txt")))

        finally:
            shutil.rmtree(tempdir)
示例#5
0
    def test_update_info(self):
        bag = Bag(self.bagdir)
        rmtag = []
        for tag in bag.info:
            if tag.startswith('Multibag-'):
                rmtag.append(tag)
        for tag in rmtag:
            del bag.info[tag]
        bag.save()
        self.clear_multibag()

        # test assumptions
        for tag in bag.info:
            self.assertFalse(tag.startswith('Multibag-'))

        self.bag.update_info()
        bag = Bag(self.bagdir)
        self.assertEqual(bag.info.get('Multibag-Version'),
                         CURRENT_VERSION)
        self.assertEqual(bag.info.get('Multibag-Head-Version'), "1")
        self.assertEqual(bag.info.get('Multibag-Reference'),
                         CURRENT_REFERENCE)
        self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag")

        self.assertTrue(isinstance(bag.info.get('Internal-Sender-Description'), list))
        self.assertEqual(len(bag.info.get('Internal-Sender-Description')),2)
        self.assertIn("Multibag-Reference",
                      bag.info.get('Internal-Sender-Description')[1])

        self.assertEqual(bag.info['Bag-Size'], "4.875 kB")

        self.bag.update_info("1.0", "1.1")
        bag = Bag(self.bagdir)

        self.assertEqual(bag.info.get('Multibag-Version'), "1.1")
        self.assertEqual(bag.info.get('Multibag-Head-Version'), "1.0")
        self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag")
        self.assertEqual(bag.info.get('Multibag-Reference'), CURRENT_REFERENCE)

        del bag.info['Internal-Sender-Description']
        bag.save()
        self.clear_multibag()
        self.bag.update_info()
        bag = Bag(self.bagdir)
        
        self.assertEqual(bag.info.get('Multibag-Head-Version'), "1.0")
        self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag")
        
        self.assertFalse(isinstance(bag.info.get('Internal-Sender-Description'),
                                    list))
        self.assertIn("Multibag-Reference",
                      bag.info.get('Internal-Sender-Description'))