Beispiel #1
0
def packing_assets(asset_replacements, pkg_path, bad_pkg_path, pkg_name):
    """
    Retorna o caminho do pacote (pkg_path ou bad_pkg_path)
    """
    errors = []
    if not os.path.isdir(pkg_path):
        files.make_empty_dir(pkg_path)

    for old_path, new_fname in asset_replacements:
        error = download_asset(old_path, new_fname, pkg_path)
        if error:
            errors.append((old_path, new_fname, error))

    if len(errors) > 0:
        # garante que existe pastas diferentes para
        # pacotes completos e incompletos
        if pkg_path == bad_pkg_path:
            bad_pkg_path += "_INCOMPLETE"
        # move pacote incompleto para a pasta de pacotes incompletos
        files.make_empty_dir(bad_pkg_path)
        for item in os.listdir(pkg_path):
            shutil.move(os.path.join(pkg_path, item), bad_pkg_path)
        shutil.rmtree(pkg_path)
        # gera relatorio de erros
        errors_filename = os.path.join(bad_pkg_path, "%s.err" % pkg_name)
        if len(errors) > 0:
            error_messages = "\n".join(["%s %s %s" % _err for _err in errors])
            files.write_file(errors_filename, error_messages)
        return bad_pkg_path
    return pkg_path
Beispiel #2
0
def pack_article_xml(file_xml_path):
    original_filename, ign = files.extract_filename_ext_by_path(file_xml_path)

    obj_xml = xml.file2objXML(file_xml_path)

    sps_package = SPS_Package(obj_xml, original_filename)

    SPS_PKG_PATH = config.get("SPS_PKG_PATH")
    INCOMPLETE_SPS_PKG_PATH = config.get("INCOMPLETE_SPS_PKG_PATH")

    pkg_path = os.path.join(SPS_PKG_PATH, original_filename)
    bad_pkg_path = os.path.join(INCOMPLETE_SPS_PKG_PATH, original_filename)

    files.make_empty_dir(pkg_path)

    asset_replacements = list(set(sps_package.replace_assets_names()))
    logger.info("%s possui %s ativos digitais", file_xml_path,
                len(asset_replacements))

    package_path = packing_assets(asset_replacements, pkg_path, bad_pkg_path,
                                  sps_package.package_name)

    xml.objXML2file(
        os.path.join(package_path, "%s.xml" % (sps_package.package_name)),
        obj_xml)
Beispiel #3
0
def packing_assets(asset_replacements, pkg_path, incomplete_pkg_path, pkg_name,
                   scielo_pid_v2):
    """Tem a responsabilidade de ``empacotar`` os ativos digitais e retorna o
    path do pacote.

    Args:
        asset_replacements: lista com os ativos
        pkg_path: caminho do pacote
        incomplete_pkg_path: caminho para os pacotes incompletos
        pkg_name: nome do pacote
        scielo_pid_v2: PID v2

    Retornos:
        retorna o caminho ``pkg_path`` ou incomplete_pkg_path

    Exceções:
        Não lança exceções.
    """
    errors = []
    if not os.path.isdir(pkg_path):
        files.make_empty_dir(pkg_path)

    for old_path, new_fname in asset_replacements:
        try:
            get_asset(old_path, new_fname, pkg_path)
        except AssetNotFoundError as e:
            logger.error(
                "%s", {
                    "pid": scielo_pid_v2,
                    "pkg_name": pkg_name,
                    "old_path": old_path,
                    "new_fname": new_fname,
                    "msg": str(e),
                })
            errors.append((old_path, new_fname, str(e)))

    if len(errors) > 0:
        # garante que existe pastas diferentes para
        # pacotes completos e incompletos
        if pkg_path == incomplete_pkg_path:
            incomplete_pkg_path += "_INCOMPLETE"
        # move pacote incompleto para a pasta de pacotes incompletos
        files.make_empty_dir(incomplete_pkg_path)
        for item in os.listdir(pkg_path):
            shutil.move(os.path.join(pkg_path, item), incomplete_pkg_path)
        shutil.rmtree(pkg_path)
        # gera relatorio de erros
        errors_filename = os.path.join(incomplete_pkg_path,
                                       "%s.err" % pkg_name)
        error_messages = "\n".join(["%s %s %s" % _err for _err in errors])
        files.write_file(errors_filename, error_messages)
        return incomplete_pkg_path
    return pkg_path