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
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)
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