예제 #1
0
 def test_get_documents_bundle_success(self):
     session_db = Session()
     bundle = DocumentsBundle(manifest=SAMPLE_ISSUES_KERNEL[0])
     session_db.documents_bundles.add(bundle)
     result = inserting.get_documents_bundle(session_db, bundle.id(), True,
                                             "0987-0987")
     self.assertIsInstance(result, DocumentsBundle)
     self.assertEqual(result.id(), "0001-3714-1998-v29-n3")
예제 #2
0
def create_aop_bundle(session_db, issn):
    journal = session_db.journals.fetch(issn)
    bundle_id = scielo_ids_generator.aops_bundle_id(issn)
    bundle = DocumentsBundle(
        manifest=manifest.get_document_bundle_manifest(bundle_id, utcnow())
    )
    add_bundle(session_db, bundle)
    journal.ahead_of_print_bundle = bundle.id()
    update_journal(session_db, journal)
    return session_db.documents_bundles.fetch(bundle.id())
예제 #3
0
def link_documents_bundles_with_documents(
    documents_bundle: DocumentsBundle, documents: List[str], session: Session
):
    """Função responsável por atualizar o relacionamento entre
    documents bundles e documents no nível de banco de dados"""
    for document in documents:
        try:
            documents_bundle.add_document(document)
        except AlreadyExists:
            logger.info(
                "Document %s already exists in documents bundle %s"
                % (document, documents_bundle)
            )

    update_bundle(session, documents_bundle)
def link_documents_bundles_with_documents(documents_bundle: DocumentsBundle,
                                          documents: List[str],
                                          session: Session):
    """Função responsável por atualizar o relacionamento entre
    documents bundles e documents no nível de banco de dados"""

    for document in documents:
        try:
            documents_bundle.add_document(document)
        except AlreadyExists:
            logger.info("Document %s already exists in documents bundle %s" %
                        (document, documents_bundle))

    session.documents_bundles.update(documents_bundle)

    session.changes.add({
        "timestamp": utcnow(),
        "entity": "DocumentsBundle",
        "id": documents_bundle.id(),
    })
예제 #5
0
def import_issues(json_file: str, session: Session):
    """Fachada com passo a passo de processamento e carga de fascículo
    em formato JSON para a base Kernel"""

    issues_as_json = reading.read_json_file(json_file)
    issues_as_xylose = conversion.conversion_issues_to_xylose(issues_as_json)
    issues_as_xylose = filter_issues(issues_as_xylose)
    manifests = conversion.conversion_issues_to_kernel(issues_as_xylose)

    for manifest in manifests:
        issue = DocumentsBundle(manifest=manifest)
        try:
            add_bundle(session, issue)
        except AlreadyExists as exc:
            logger.info(exc)
예제 #6
0
    def test_register_documents_in_documents_bundle_issn_with_spaces(
            self, mk_read_json_file, mk_open):
        documents = [
            {
                "pid_v3": "JwqGdMDrdcV3Z7MFHgtKvVk",
                "acron": "aiss",
                "eissn": None,
                "issn": "0036-3634  ",
                "number": "4",
                "order": "00349",
                "pid": "S0021-25712009000400001",
                "pissn": "0036-3634",
                "supplement": None,
                "volume": "45",
                "year": "2009",
            },
        ]
        journals = [SAMPLES_JOURNAL]
        mk_read_json_file.return_value = journals
        mock_file = MagicMock()
        mock_file.readlines.return_value = [
            json.dumps(document) for document in documents
        ]
        mk_open.return_value.__enter__.return_value = mock_file
        mk_open.return_value.__exit__.return_value = Mock(return_value=False)

        session_db = Session()
        manifest = DocumentsBundle(SAMPLE_ISSUES_KERNEL[0])
        session_db.documents_bundles.add(manifest)

        inserting.register_documents_in_documents_bundle(
            session_db, "/tmp/documents.json", "/tmp/journals.json")

        err_filename = os.path.join(config.get("ERRORS_PATH"),
                                    "insert_documents_in_bundle.err")
        self.assertEqual(os.path.isfile(err_filename), True)
        expected = (
            '{"issue": "0036-3634-2009-v45-n4", '
            '"items": [{"id": "JwqGdMDrdcV3Z7MFHgtKvVk", "order": "00349"}]}\n'
        )
        with open(err_filename) as fp:
            content = fp.read()
            self.assertEqual(content, expected)
예제 #7
0
 def setUp(self):
     self.session = Session()
     self.documents_bundle = DocumentsBundle(SAMPLE_ISSUES_KERNEL[0])
     self.session.documents_bundles.add(self.documents_bundle)
예제 #8
0
class TestLinkDocumentsBundleWithDocuments(unittest.TestCase):
    def setUp(self):
        self.session = Session()
        self.documents_bundle = DocumentsBundle(SAMPLE_ISSUES_KERNEL[0])
        self.session.documents_bundles.add(self.documents_bundle)

    def fetch_documents_bundle(self):
        return self.session.documents_bundles.fetch(self.documents_bundle.id())

    def test_should_link_documents_bundle_with_documents(self):
        inserting.link_documents_bundles_with_documents(
            self.documents_bundle,
            [{
                "id": "doc-1",
                "order": "0001"
            }, {
                "id": "doc-2",
                "order": "0002"
            }],
            self.session,
        )

        self.assertEqual(
            [{
                "id": "doc-1",
                "order": "0001"
            }, {
                "id": "doc-2",
                "order": "0002"
            }],
            self.fetch_documents_bundle().documents,
        )

    def test_should_not_insert_duplicated_documents(self):
        inserting.link_documents_bundles_with_documents(
            self.documents_bundle,
            [{
                "id": "doc-1",
                "order": "0001"
            }, {
                "id": "doc-1",
                "order": "0001"
            }],
            self.session,
        )

        self.assertEqual([{
            "id": "doc-1",
            "order": "0001"
        }],
                         self.fetch_documents_bundle().documents)

    def test_should_register_changes(self):
        inserting.link_documents_bundles_with_documents(
            self.documents_bundle,
            [{
                "id": "doc-1",
                "order": "0001"
            }, {
                "id": "doc-2",
                "order": "0002"
            }],
            self.session,
        )

        _changes = self.session.changes.filter()

        self.assertEqual(1, len(_changes))
        self.assertEqual(self.documents_bundle.id(), _changes[0]["id"])
        self.assertEqual("DocumentsBundle", _changes[0]["entity"])