示例#1
0
 def test_documents_to_delete_raises_error_if_SPS_Package_error(
         self, MockLogger, MockXML, MockSPS_Package):
     MockSPS_Package.side_effect = TypeError("XML error")
     MockZipFile = MagicMock()
     with self.assertRaises(DocumentToDeleteException) as exc_info:
         is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     self.assertEqual(str(exc_info.exception), "XML error")
示例#2
0
 def test_document_to_delete_creates_etree_parser(self, mk_etree,
                                                  MockSPS_Package):
     MockSPS_Package.return_value.is_document_deletion = False
     MockZipFile = MagicMock()
     MockZipFile.read.return_value = XML_FILE_CONTENT
     is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     mk_etree.XMLParser.assert_called_once_with(remove_blank_text=True,
                                                no_network=True)
示例#3
0
 def test_document_to_delete_creates_etree_xml(self, mk_etree, MockSPS_Package):
     MockParser = Mock()
     mk_etree.XMLParser.return_value = MockParser
     MockSPS_Package.return_value.is_document_deletion = False
     MockZipFile = MagicMock()
     MockZipFile.read.return_value = XML_FILE_CONTENT
     is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     mk_etree.XML.assert_called_once_with(XML_FILE_CONTENT, MockParser)
示例#4
0
 def test_document_to_delete_raises_error_if_read_from_zip_error(
     self, MockXML, MockSPS_Package
 ):
     MockZipFile = MagicMock()
     MockZipFile.read.side_effect = KeyError("File not found in the archive")
     with self.assertRaises(DocumentToDeleteException) as exc_info:
         is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     self.assertEqual(str(exc_info.exception), "'File not found in the archive'")
示例#5
0
 def test_document_to_delete_creates_SPS_Package_instance(
         self, mk_etree, MockSPS_Package):
     MockXML = Mock()
     mk_etree.XML.return_value = MockXML
     MockSPS_Package.return_value.is_document_deletion = False
     MockZipFile = MagicMock()
     is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     MockSPS_Package.assert_called_once_with(MockXML,
                                             "1806-907X-rba-53-01-1-8.xml")
示例#6
0
 def test_documents_to_delete_returns_documents_id_to_delete_and_xmls_to_delete(
         self):
     article_id = etree.Element("article-id")
     article_id.set("specific-use", "delete")
     xml_file = etree.XML(XML_FILE_CONTENT)
     am_tag = xml_file.find(".//article-meta")
     am_tag.append(article_id)
     deleted_xml_file = etree.tostring(xml_file)
     MockZipFile = MagicMock()
     MockZipFile.read.return_value = deleted_xml_file
     is_doc_to_delete, doc_scielo_pid = is_document_to_delete(
         MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     self.assertTrue(is_doc_to_delete)
     self.assertEqual(
         doc_scielo_pid,
         "FX6F3cbyYmmwvtGmMB7WCgr")  # SciELO ID de XML_FILE_CONTENT
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)
示例#8
0
 def test_document_to_delete_reads_xml_from_zip(self, mk_etree,
                                                MockSPS_Package):
     MockSPS_Package.return_value.is_document_deletion = False
     MockZipFile = MagicMock()
     is_document_to_delete(MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     MockZipFile.read.assert_any_call("1806-907X-rba-53-01-1-8.xml")
示例#9
0
 def test_documents_to_delete_returns_false_if_xml_is_not_to_delete(self):
     MockZipFile = MagicMock()
     MockZipFile.read.return_value = XML_FILE_CONTENT
     is_doc_to_delete, __ = is_document_to_delete(
         MockZipFile, "1806-907X-rba-53-01-1-8.xml")
     self.assertFalse(is_doc_to_delete)