def test_generate_ro_manifest_overwrite(self): logger.info( self.getTestHeader( 'create bag with auto-generation of RO manifest in overwrite mode' )) try: bdb.make_bag(self.test_data_dir, algs=['md5', 'sha1', 'sha256', 'sha512'], remote_file_manifest=ospj(self.test_config_dir, 'test-fetch-manifest.json')) bdb.generate_ro_manifest(self.test_data_dir, overwrite=True) ro = bdbro.read_bag_ro_metadata(self.test_data_dir) agg_dict = dict() for entry in ro.get("aggregates", []): agg_dict[entry["uri"]] = entry for test_entry in self.ro_test_aggregates: self.assertTrue(test_entry["uri"] in agg_dict) entry = agg_dict[test_entry["uri"]] bundled_as = entry.get("bundledAs") if bundled_as: if "filename" in bundled_as: self.assertTrue(test_entry["bundledAs"]["filename"] == bundled_as["filename"]) if "folder" in bundled_as: self.assertTrue(test_entry["bundledAs"]["folder"] == bundled_as["folder"]) except Exception as e: self.fail(get_typed_exception(e))
def test_generate_ro_manifest_update(self): logger.info( self.getTestHeader( 'create bag with auto-generation of RO manifest in update mode' )) try: bdb.make_bag(self.test_data_dir, algs=['md5', 'sha1', 'sha256', 'sha512'], remote_file_manifest=ospj(self.test_config_dir, 'test-fetch-manifest.json')) bdb.generate_ro_manifest(self.test_data_dir, overwrite=True) ro = bdbro.read_bag_ro_metadata(self.test_data_dir) old_agg_dict = dict() for entry in ro.get("aggregates", []): old_agg_dict[entry["uri"]] = entry bdbro.add_file_metadata(ro, local_path="../data/FAKE.txt", bundled_as=bdbro.make_bundled_as()) bdbro.write_bag_ro_metadata(ro, self.test_data_dir) bdb.generate_ro_manifest(self.test_data_dir, overwrite=False) ro = bdbro.read_bag_ro_metadata(self.test_data_dir) for entry in ro.get("aggregates", []): if entry["uri"] in old_agg_dict: self.assertTrue(entry["bundledAs"]["uri"] == old_agg_dict[ entry["uri"]]["bundledAs"]["uri"]) except Exception as e: self.fail(get_typed_exception(e))
def main(): args, is_bag, is_file = parse_cli() path = os.path.abspath(args.path) archive = None temp_path = None error = None result = 0 if not args.quiet: sys.stderr.write('\n') try: if not is_file: # do not try to create or update the bag if the user just wants to validate or complete an existing bag if not ( (args.validate or args.validate_profile or args.resolve_fetch) and not (args.update and bdb.is_bag(path))): if args.checksum and 'all' in args.checksum: args.checksum = ['md5', 'sha1', 'sha256', 'sha512'] # create or update the bag depending on the input arguments bdb.make_bag(path, algs=args.checksum, update=args.update, save_manifests=not args.skip_manifests, prune_manifests=args.prune_manifests, metadata=BAG_METADATA if BAG_METADATA else None, metadata_file=args.metadata_file, remote_file_manifest=args.remote_file_manifest, config_file=args.config_file, ro_metadata_file=args.ro_metadata_file) # otherwise just extract the bag if it is an archive and no other conflicting options specified elif not (args.validate or args.validate_profile or args.resolve_fetch): bdb.extract_bag(path) if not args.quiet: sys.stderr.write('\n') return result if args.ro_manifest_generate: bdb.generate_ro_manifest( path, True if args.ro_manifest_generate == "overwrite" else False, config_file=args.config_file) if args.resolve_fetch: if args.validate == 'full': sys.stderr.write(ASYNC_TRANSFER_VALIDATION_WARNING) bdb.resolve_fetch( path, force=True if args.resolve_fetch == 'all' else False, keychain_file=args.keychain_file, config_file=args.config_file, filter_expr=args.fetch_filter) if args.validate: if is_file: temp_path = bdb.extract_bag(path, temp=True) if args.validate == 'structure': bdb.validate_bag_structure(temp_path if temp_path else path) else: bdb.validate_bag( temp_path if temp_path else path, fast=True if args.validate == 'fast' else False, config_file=args.config_file) if args.archiver: archive = bdb.archive_bag(path, args.archiver) if archive is None and is_file: archive = path if args.validate_profile: if is_file: if not temp_path: temp_path = bdb.extract_bag(path, temp=True) profile = bdb.validate_bag_profile( temp_path if temp_path else path) bdb.validate_bag_serialization(archive if archive else path, profile) if args.revert: bdb.revert_bag(path) except Exception as e: result = 1 error = "Error: %s" % get_typed_exception(e) finally: if temp_path: bdb.cleanup_bag(os.path.dirname(temp_path)) if result != 0: sys.stderr.write("\n%s" % error) if not args.quiet: sys.stderr.write('\n') return result