Exemplo n.º 1
0
 def test11_update(self):
     """Test update method."""
     tempdir = tempfile.mkdtemp(prefix='test_update')
     oo = Object()
     # First create and object
     oo.id = 'uri:wumpus'
     objdir = os.path.join(tempdir, '1')
     oo.digest_algorithm = 'sha256'
     oo.create(srcdir='fixtures/1.0/content/spec-ex-minimal/v1',
               metadata=VersionMetadata(),
               objdir=objdir)
     self.assertEqual(
         set(os.listdir(objdir)),
         set([
             '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha256',
             'v1'
         ]))
     # Now update
     oo.digest_algorithm = 'sha512'
     oo.update(objdir=objdir, metadata=VersionMetadata())
     self.assertEqual(
         set(os.listdir(objdir)),
         set([
             '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512',
             'v1', 'v2'
         ]))
Exemplo n.º 2
0
 def test_bag_extracted_version(self):
     """Test bag_extracted_version method."""
     # Write bag with no metadata
     tempdir = tempfile.mkdtemp(prefix='test_bag1')
     with open(os.path.join(tempdir, 'my_file'), 'w') as fh:
         fh.write("Something\n")
     metadata = VersionMetadata()
     bag_extracted_version(tempdir, metadata)
     with open(os.path.join(tempdir, 'bag-info.txt'), 'r') as fh:
         info = fh.read()
     self.assertNotIn('Contact-Email', info)
     self.assertNotIn('Contact-Name', info)
     self.assertNotIn('External-Description', info)
     self.assertNotIn('External-Identifier', info)
     self.assertIn('Payload-Oxum', info)
     # Write bag with all metadata
     tempdir = tempfile.mkdtemp(prefix='test_bag2')
     with open(os.path.join(tempdir, 'my_file2'), 'w') as fh:
         fh.write("Something else\n")
     metadata = VersionMetadata()
     metadata.message = "hello"
     metadata.name = "A Person"
     metadata.address = "mailto:[email protected]"
     metadata.id = 'info:a-bag-2'
     bag_extracted_version(tempdir, metadata)
     with open(os.path.join(tempdir, 'bag-info.txt'), 'r') as fh:
         info = fh.read()
     self.assertIn('Contact-Email: [email protected]', info)
     self.assertIn('Contact-Name: A Person', info)
     self.assertIn('External-Description: hello', info)
     self.assertIn('External-Identifier: info:a-bag-2', info)
     self.assertIn('Payload-Oxum', info)
Exemplo n.º 3
0
 def test02_VersionMetedata_init(self):
     """Test VersionMetadata class."""
     args = argparse.Namespace(created='a',
                               message='b',
                               name='c',
                               address='d')
     m = VersionMetadata(args=args)
     d = m.as_dict(extra='x')
     self.assertEqual(d['created'], 'a')
     self.assertEqual(d['message'], 'b')
     self.assertEqual(d['user'], {'name': 'c', 'address': 'd'})
     self.assertEqual(d['extra'], 'x')
     # with load from file
     m = VersionMetadata(inventory_file='tests/testdata/inventories/inv_1_good.json')
     self.assertEqual(m.version, 'v1')
Exemplo n.º 4
0
 def test06_build_inventory(self):
     """Test build_inventory."""
     oo = Object(digest_algorithm="md5")
     for (vdir, inventory, manifest_to_srcfile) in oo.build_inventory(
             'fixtures/1.0/content/spec-ex-full',
             metadata=VersionMetadata()):
         pass
     self.assertEqual(inventory['type'],
                      'https://ocfl.io/1.0/spec/#inventory')
     self.assertEqual(inventory['head'], 'v3')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(len(inventory['versions']), 3)
     # test skips by skipping 'v3'
     oo = Object(digest_algorithm="md5", skips=['v3'])
     for (vdir, inventory, manifest_to_srcfile) in oo.build_inventory(
             'fixtures/1.0/content/spec-ex-full',
             metadata=VersionMetadata()):
         if vdir == 'v1':
             self.assertEqual(
                 manifest_to_srcfile, {
                     'v1/content/image.tiff':
                     'fixtures/1.0/content/spec-ex-full/v1/image.tiff',
                     'v1/content/empty.txt':
                     'fixtures/1.0/content/spec-ex-full/v1/empty.txt',
                     'v1/content/foo/bar.xml':
                     'fixtures/1.0/content/spec-ex-full/v1/foo/bar.xml'
                 })
         else:
             self.assertEqual(
                 manifest_to_srcfile, {
                     'v2/content/foo/bar.xml':
                     'fixtures/1.0/content/spec-ex-full/v2/foo/bar.xml'
                 })
     self.assertEqual(inventory['head'], 'v2')
     self.assertEqual(len(inventory['versions']), 2)
Exemplo n.º 5
0
 def test_bag_as_source(self):
     """Test bag_as_source method."""
     metadata = VersionMetadata()
     self.assertRaises(bagit.BagError, bag_as_source,
                       'tests/testdata/files/hello_out_there.txt', metadata)
     self.assertRaises(BaggerError, bag_as_source,
                       'tests/testdata/bags/invalid_bag', metadata)
     # Check metadata update
     metadata = VersionMetadata()
     bag_as_source('tests/testdata/bags/uaa_v1', metadata)
     self.assertEqual(metadata.created, '2020-01-01T00:00:00Z')
     self.assertEqual(metadata.address,
                      'mailto:[email protected]')
     self.assertEqual(metadata.name, 'Yog-Sothoth')
     self.assertEqual(metadata.message, 'First version')
     self.assertEqual(metadata.id, 'info:bb123cd4567')
     # Check metedata still None when not in bag
     metadata = VersionMetadata()
     bag_as_source('tests/testdata/bags/bag_no_metadata', metadata)
     self.assertEqual(metadata.created, None)
     self.assertEqual(metadata.address, None)
     self.assertEqual(metadata.name, None)
     self.assertEqual(metadata.message, None)
     self.assertEqual(metadata.id, None)
Exemplo n.º 6
0
 def test10_create(self):
     """Test create method."""
     tempdir = tempfile.mkdtemp(prefix='test_create')
     oo = Object()
     self.assertRaises(ObjectException,
                       oo.create,
                       srcdir='fixtures/1.0/content/spec-ex-full/v1')
     oo.identifier = 'uri:kliderkin'
     objdir = os.path.join(tempdir, '1')
     oo.create(srcdir='fixtures/1.0/content/spec-ex-full/v1',
               metadata=VersionMetadata(),
               objdir=objdir)
     self.assertEqual(
         set(os.listdir(objdir)),
         set([
             '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512',
             'v1'
         ]))
Exemplo n.º 7
0
 def test09_build(self):
     """Test write method."""
     tempdir = tempfile.mkdtemp(prefix='test_write')
     oo = Object()
     self.assertRaises(ObjectException,
                       oo.build,
                       srcdir='fixtures/1.0/content/spec-ex-full')
     oo.id = 'uri:firkin'
     objdir = os.path.join(tempdir, '1')
     oo.build(srcdir='fixtures/1.0/content/spec-ex-full',
              metadata=VersionMetadata(),
              objdir=objdir)
     self.assertEqual(
         set(os.listdir(objdir)),
         set([
             '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512',
             'v1', 'v2', 'v3'
         ]))
Exemplo n.º 8
0
 def test03_VersionMetedata_from_inventory_file(self):
     """Test VersionMetadata from_inventory_file."""
     m = VersionMetadata()
     m.from_inventory_file('tests/testdata/inventories/inv_1_good.json')
     self.assertEqual(m.created, '2018-10-02T12:00:00Z')
     # Failures
     m = VersionMetadata()
     self.assertRaises(Exception, m.from_inventory,
                       inventory={})
     self.assertRaises(Exception, m.from_inventory,
                       inventory={'versions': {}})
     self.assertRaises(Exception, m.from_inventory,
                       inventory={'versions': {}}, vdir='v1')
     self.assertRaises(Exception, m.from_inventory,
                       inventory={'head': 'v1', 'versions': {}}, vdir='v1')
Exemplo n.º 9
0
 def test05_add_version(self):
     """Test add_version method."""
     self.maxDiff = None
     oo = Object(digest_algorithm="md5")
     inventory = {'manifest': {}, 'versions': {}}
     oo.add_version(inventory,
                    'fixtures/1.0/content/spec-ex-full/v1',
                    vdir='v1',
                    metadata=VersionMetadata())
     self.assertEqual(inventory['head'], 'v1')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions'], {
             "v1": {
                 'created': '2018-01-01T01:01:01Z',
                 'message': 'Initial import',
                 'state': {
                     '184f84e28cbe75e050e9c25ea7f2e939': ['foo/bar.xml'],
                     'c289c8ccd4bab6e385f5afdd89b5bda2': ['image.tiff'],
                     'd41d8cd98f00b204e9800998ecf8427e': ['empty.txt']
                 },
                 'user': {
                     'address': '*****@*****.**',
                     'name': 'Alice'
                 }
             }
         })
     self.assertNotIn('fixity', inventory)
     # Now add second version to check forward delta
     oo.add_version(inventory,
                    'fixtures/1.0/content/spec-ex-full/v2',
                    vdir='v2',
                    metadata=VersionMetadata())
     self.assertEqual(inventory['head'], 'v2')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions']['v2'], {
             'created': '2018-02-02T02:02:02Z',
             'message': 'Fix bar.xml, remove image.tiff, add empty2.txt',
             'state': {
                 '2673a7b11a70bc7ff960ad8127b4adeb': ['foo/bar.xml'],
                 'd41d8cd98f00b204e9800998ecf8427e':
                 ['empty.txt', 'empty2.txt']
             },
             'user': {
                 'address': '*****@*****.**',
                 'name': 'Bob'
             }
         })
     # Now with fixity
     oo = Object(digest_algorithm="md5", fixity=['sha1'])
     inventory = {'manifest': {}, 'versions': {}, 'fixity': {'sha1': {}}}
     manifest_to_srcfile = oo.add_version(
         inventory,
         'fixtures/1.0/content/spec-ex-full/v1',
         vdir='v1',
         metadata=VersionMetadata())
     self.assertEqual(
         manifest_to_srcfile, {
             'v1/content/image.tiff':
             'fixtures/1.0/content/spec-ex-full/v1/image.tiff',
             'v1/content/empty.txt':
             'fixtures/1.0/content/spec-ex-full/v1/empty.txt',
             'v1/content/foo/bar.xml':
             'fixtures/1.0/content/spec-ex-full/v1/foo/bar.xml'
         })