Esempio n. 1
0
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)
Esempio n. 2
0
 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))
Esempio n. 3
0
    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))
Esempio n. 4
0
    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))
Esempio n. 5
0
    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
Esempio n. 6
0
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()
Esempio n. 7
0
    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'
Esempio n. 8
0
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)