def test_create_premis(self):

        premisgen = PremisGenerator(TestPremisCreation.tmp_ip_dir)
        premisgen.createPremis()
        self.validate_xml(TestPremisCreation.premis_file_path,
                          TestPremisCreation.premis_schema_file)
Exemple #2
0
def create_sip(package_dir: str,
               package_name: str,
               identifier: str,
               generate_premis: bool = True,
               generate_package: bool = True,
               custom_logger=None) -> bool:

    logger = custom_logger if custom_logger else LOGGER

    # PREMIS
    premis_path = os.path.join(package_dir, 'metadata/preservation/premis.xml')
    if generate_premis:
        premisgen = PremisGenerator(package_dir)

        premisgen.createPremis()
        premisinfo = {
            'outcome': 'success',
            'task_name': 'create_sip',
            'event_type': 'Package initialisation',
            'linked_object': None
        }

        logger.info("Creating PREMIS file %s" % premis_path)
        premisgen.addEvent('metadata/preservation/premis.xml', premisinfo)

    reps_path = os.path.join(package_dir, 'representations')
    for name in os.listdir(reps_path):
        rep_path = os.path.join(reps_path, name)
        if os.path.isdir(rep_path):
            if generate_premis:
                # representation PREMIS
                logger.info(
                    "Creating representation PREMIS file %s" %
                    os.path.join(rep_path, 'metadata/preservation/premis.xml'))
                premisgen = PremisGenerator(rep_path)
                premisgen.createPremis()
            # representation METS
            logger.info("Creating representation METS file: %s" %
                        os.path.join(rep_path, "METS.xml"))
            mets_data = {
                'packageid': identifier,
                'type': 'SIP',
                'schemas': os.path.join(package_dir, 'schemas'),
                'parent': ''
            }
            metsgen = MetsGenerator(rep_path)

            metsgen.createMets(mets_data)
    if generate_premis:
        # PREMIS
        premisgen = PremisGenerator(package_dir)
        premisgen.createPremis()

    # METS
    mets_data = {
        'packageid': identifier,
        'type': 'SIP',
        'schemas': os.path.join(package_dir, 'schemas'),
        'parent': ''
    }
    mets_path = os.path.join(package_dir, "METS.xml")
    logger.info("Creating METS file %s" % mets_path)
    metsgen = MetsGenerator(package_dir)
    metsgen.createMets(mets_data)

    # packaging
    input_path = Path(package_dir)
    storage_tar_file = os.path.join(input_path.parent, package_name + '.tar')
    if generate_package:
        logger.info("Creating package: %s" % storage_tar_file)
        create_package(package_dir, package_name)

    if not os.path.exists(mets_path):
        logger.error("Error creating METS file %s" % mets_path)
    premis_success = (not generate_package or os.path.exists(premis_path))
    if not premis_success:
        logger.error("Error creating PREMIS file %s" % premis_path)
    package_success = (not generate_package
                       or os.path.exists(storage_tar_file))
    if not package_success:
        logger.error("Error creating package %s" % storage_tar_file)

    return (os.path.exists(mets_path) and premis_success and package_success)