def test_delete_documents_raises_error_if_kernel_connect_error(
         self, mk_hooks):
     mk_hooks.kernel_connect.side_effect = requests.exceptions.HTTPError(
         "Not Found")
     with self.assertRaises(DeleteDocFromKernelException) as exc_info:
         delete_doc_from_kernel("FX6F3cbyYmmwvtGmMB7WCgr")
     self.assertEqual(str(exc_info.exception), "Not Found")
def delete_documents(sps_package, xmls_filenames):
    """
    Deleta documentos informados do Kernel

    dict sps_packages_xmls: dict com os paths dos pacotes SPS e os respectivos nomes dos
        arquivos XML.
    """
    Logger.debug("delete_documents IN")
    Logger.info("Reading sps_package: %s" % sps_package)
    xmls_to_delete = []
    with ZipFile(sps_package) as zipfile:
        for i, sps_xml_file in enumerate(xmls_filenames, 1):
            Logger.info(
                'Reading XML file "%s" from ZIP file "%s" [%s/%s]',
                sps_xml_file,
                sps_package,
                i,
                len(xmls_filenames),
            )
            try:
                doc_to_delete = document_to_delete(zipfile, sps_xml_file)
            except DocumentToDeleteException as exc:
                Logger.info('Could not delete document "%s": %s', sps_xml_file,
                            str(exc))
            else:
                if doc_to_delete:
                    xmls_to_delete.append(sps_xml_file)
                    try:
                        delete_doc_from_kernel(doc_to_delete)
                    except DeleteDocFromKernelException as exc:
                        Logger.info(
                            'Could not delete "%s" (scielo_id: "%s") from kernel: %s',
                            sps_xml_file, doc_to_delete, str(exc))
                    else:
                        Logger.info(
                            'Document "%s" (scielo_id: "%s") deleted from kernel',
                            sps_xml_file, doc_to_delete)
    Logger.debug("delete_documents OUT")
    return list(set(xmls_filenames) - set(xmls_to_delete))
def delete_documents(
    sps_package: str, xmls_filenames: list
) -> Tuple[List[str], List[dict]]:
    """
    Deleta documentos informados do Kernel

    dict sps_packages_xmls: dict com os paths dos pacotes SPS e os respectivos nomes dos
        arquivos XML.
    """
    Logger.debug("delete_documents IN")
    Logger.info("Reading sps_package: %s" % sps_package)
    xmls_to_delete = []
    executions = []

    with ZipFile(sps_package) as zipfile:
        for i, sps_xml_file in enumerate(xmls_filenames, 1):
            Logger.info(
                'Reading XML file "%s" from ZIP file "%s" [%s/%s]',
                sps_xml_file,
                sps_package,
                i,
                len(xmls_filenames),
            )
            execution = {"file_name": sps_xml_file, "deletion": True}
            try:
                is_doc_to_delete, doc_id = is_document_to_delete(zipfile, sps_xml_file)
            except DocumentToDeleteException as exc:
                Logger.error('Error reading document "%s": %s', sps_xml_file, str(exc))
                execution.update({"failed": True, "error": str(exc)})
                executions.append(execution)
            else:
                if is_doc_to_delete:
                    xmls_to_delete.append(sps_xml_file)
                    if doc_id is None:
                        Logger.error(
                            'Document "%s" will not be deleted because SciELO PID is None',
                            sps_xml_file,
                        )
                        execution.update(
                            {"failed": True, "error": "SciELO PID V3 is None"}
                        )
                        executions.append(execution)
                        continue
                    try:
                        delete_doc_from_kernel(doc_id)
                    except DeleteDocFromKernelException as exc:
                        Logger.info(
                            'Could not delete "%s" (scielo_id: "%s") from kernel: %s',
                            sps_xml_file,
                            doc_id,
                            str(exc),
                        )
                        execution.update(
                            {"pid": doc_id, "failed": True, "error": str(exc)}
                        )
                    else:
                        Logger.info(
                            'Document "%s" (scielo_id: "%s") deleted from kernel',
                            sps_xml_file,
                            doc_id,
                        )
                        execution.update({"pid": doc_id, "file_name": sps_xml_file})
                    executions.append(execution)

    Logger.debug("delete_documents OUT")
    return (list(set(xmls_filenames) - set(xmls_to_delete)), executions)
 def test_delete_doc_from_kernel_calls_kernel_connect(self, mk_hooks):
     delete_doc_from_kernel("FX6F3cbyYmmwvtGmMB7WCgr")
     mk_hooks.kernel_connect.assert_called_once_with(
         "/documents/FX6F3cbyYmmwvtGmMB7WCgr", "DELETE")