def GeneratePremis(self): generate_premis(self.get_information_package()) ip = self.get_information_package() data = fill_specification_data(ip=ip) path = parseContent(ip.get_premis_file_path(), data) msg = 'Generated {xml}'.format(xml=path) self.create_success_event(msg)
def get_content_type_file(self): ctsdir, ctsfile = find_destination('content_type_specification', self.get_structure()) if ctsdir is None: return None return parseContent(os.path.join(ctsdir, ctsfile), fill_specification_data(ip=self))
def get_premis_file_path(self): premis_dir, premis_name = find_destination( "preservation_description_file", self.get_structure()) if premis_dir is not None: path = os.path.join(premis_dir, premis_name) path = parseContent(path, fill_specification_data(ip=self)) else: path = 'metadata/premis.xml' return normalize_path(os.path.join(self.object_path, path))
def get_content_mets_file_path(self): mets_dir, mets_name = find_destination("mets_file", self.get_structure()) if mets_dir is not None: path = os.path.join(mets_dir, mets_name) path = parseContent(path, fill_specification_data(ip=self)) else: path = 'mets.xml' return normalize_path(os.path.join(self.object_path, path))
def get_dirs(self, structure, data, root=""): for content in structure: if content.get('type') == 'folder': name = content.get('name') dirname = os.path.join(root, name) dirname = parseContent(dirname, data) if not content.get('create', True): continue yield dirname for x in self.get_dirs(content.get('children', []), data, dirname): yield x
def generate_content_metadata(ip): files_to_create = {} generate_premis = ip.profile_locked('preservation_metadata') if generate_premis: premis_profile_type = 'preservation_metadata' premis_profile_rel = ip.get_profile_rel(premis_profile_type) premis_profile_data = ip.get_profile_data(premis_profile_type) data = fill_specification_data(premis_profile_data, ip=ip) premis_path = parseContent(ip.get_premis_file_path(), data) full_premis_path = os.path.join(ip.object_path, premis_path) files_to_create[full_premis_path] = { 'spec': premis_profile_rel.profile.specification, 'data': data, } mets_path = ip.get_content_mets_file_path() full_mets_path = os.path.join(ip.object_path, mets_path) profile_type = ip.get_package_type_display().lower() profile_rel = ip.get_profile_rel(profile_type) profile_data = ip.get_profile_data(profile_type) files_to_create[full_mets_path] = { 'spec': profile_rel.profile.specification, 'data': fill_specification_data(profile_data, ip=ip), } parsed_files = profile_rel.data.parsed_files extra_paths_to_parse = profile_rel.data.extra_paths_to_parse algorithm = ip.get_checksum_algorithm() allow_unknown_file_types = ip.get_allow_unknown_file_types() allow_encrypted_files = ip.get_allow_encrypted_files() generator = XMLGenerator( allow_unknown_file_types=allow_unknown_file_types, allow_encrypted_files=allow_encrypted_files, ) generator.generate(files_to_create, folderToParse=ip.object_path, algorithm=algorithm, parsed_files=parsed_files, extra_paths_to_parse=extra_paths_to_parse) ip.content_mets_path = mets_path ip.content_mets_create_date = timestamp_to_datetime( creation_date(full_mets_path)).isoformat() ip.content_mets_size = os.path.getsize(full_mets_path) ip.content_mets_digest_algorithm = MESSAGE_DIGEST_ALGORITHM_CHOICES_DICT[ algorithm.upper()] ip.content_mets_digest = calculate_checksum(full_mets_path, algorithm=algorithm) ip.save()
def get_events_file_path(self, from_container=False): if not from_container and os.path.isfile(self.object_path): return os.path.splitext(self.object_path)[0] + '_ipevents.xml' ip_profile = self.get_profile(self.get_package_type_display().lower()) structure = ip_profile.structure events_dir, events_file = find_destination('events_file', structure) if events_dir is not None: full_path = os.path.join(events_dir, events_file) return normalize_path( parseContent(full_path, fill_specification_data(ip=self))) return 'ipevents.xml'
def generate_premis(ip): premis_profile_rel = ip.get_profile_rel('preservation_metadata') premis_profile_data = ip.get_profile_data('preservation_metadata') data = fill_specification_data(premis_profile_data, ip=ip) premis_path = parseContent(ip.get_premis_file_path(), data) files_to_create = { premis_path: { 'spec': premis_profile_rel.profile.specification, 'data': data, } } algorithm = ip.get_checksum_algorithm() allow_unknown_file_types = ip.get_allow_unknown_file_types() allow_encrypted_files = ip.get_allow_encrypted_files() generator = XMLGenerator( allow_unknown_file_types=allow_unknown_file_types, allow_encrypted_files=allow_encrypted_files, ) generator.generate(files_to_create, folderToParse=ip.object_path, algorithm=algorithm)