Skip to content

Commit

Permalink
Merge pull request #322 from OP-TED/feature/TED-833
Browse files Browse the repository at this point in the history
Feature/ted 833
  • Loading branch information
CaptainOfHacks committed Oct 26, 2022
2 parents d294b38 + 993b8a6 commit 536201c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
"""
This module implements functionality to load a given notice into a triple store.
"""
from ted_sws.data_manager.adapters.repository_abc import NoticeRepositoryABC
from ted_sws.data_manager.adapters.triple_store import TripleStoreEndpointABC, RDF_MIME_TYPES
from ted_sws.core.model.manifestation import RDFManifestation
from ted_sws.data_manager.adapters.triple_store import TripleStoreABC, RDF_MIME_TYPES

DEFAULT_NOTICE_REPOSITORY_NAME = "notices"
DEFAULT_NOTICE_RDF_MANIFESTATION_MIME_TYPE = RDF_MIME_TYPES["turtle"]


def load_notice_into_triple_store(notice_id: str, notice_repository: NoticeRepositoryABC,
triple_store_repository: TripleStoreEndpointABC,
repository_name: str = DEFAULT_NOTICE_REPOSITORY_NAME):
def load_rdf_manifestation_into_triple_store(rdf_manifestation: RDFManifestation,
triple_store_repository: TripleStoreABC,
repository_name: str= DEFAULT_NOTICE_REPOSITORY_NAME,
mime_type: str = DEFAULT_NOTICE_RDF_MANIFESTATION_MIME_TYPE
):
"""
Method to create a repository in the Fuseki triple store and load rdf manifestation of an transformed complete notice.
Name of the repository is given by default.
:param rdf_manifestation:
:param triple_store_repository:
:param repository_name:
:param mime_type:
:return:
"""
notice = notice_repository.get(reference=notice_id)
if notice is None:
raise ValueError('Notice, with "%s" notice_id, was not found' % notice_id)
mime_type = RDF_MIME_TYPES
rdf_manifestation_string = notice.rdf_manifestation.object_data
triple_store_repository.add_data_to_repository(file_content=rdf_manifestation_string, repository_name=repository_name, mime_type=mime_type)
if rdf_manifestation is None:
raise Exception("RDF Manifestation is None!")
if rdf_manifestation.object_data is None:
raise Exception("RDF Manifestation object data is None!")
rdf_manifestation_string = rdf_manifestation.object_data
if repository_name not in triple_store_repository.list_repositories():
triple_store_repository.create_repository(repository_name=repository_name)
triple_store_repository.add_data_to_repository(file_content=rdf_manifestation_string.encode(encoding='utf-8'),
repository_name=repository_name, mime_type=mime_type)

Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
from ted_sws.notice_publisher_triple_store.services.load_transformed_notice_into_triple_store import \
load_notice_into_triple_store, DEFAULT_NOTICE_REPOSITORY_NAME
from tests.fakes.fake_repository import FakeNoticeRepository
import pytest
load_rdf_manifestation_into_triple_store

SPARQL_QUERY_TRIPLES = "select * {?s ?p ?o}"
SPARQL_QUERY_GRAPH = "SELECT ?g { GRAPH ?g { ?s ?p ?o } }"
SPARQL_QUERY_FIXED_URI = "select * { <http://data.europa.eu/a4g/resource/ReviewerOrganisationIdentifier/2018-S-175-396207/de2507f9-ae25-37c8-809c-0109efe10669> ?p ?o .} "
TMP_FUSEKI_DATASET_NAME = "tmp_dataset_for_tests"


def test_load_notice_into_triple_store(transformed_complete_notice, allegro_triple_store):
fake_notice_repo = FakeNoticeRepository()
fake_notice_repo.add(transformed_complete_notice)
load_notice_into_triple_store(notice_id=transformed_complete_notice.ted_id, notice_repository=fake_notice_repo,
triple_store_repository=allegro_triple_store)
def test_load_notice_into_triple_store(transformed_complete_notice, fuseki_triple_store):
fuseki_triple_store.create_repository(repository_name=TMP_FUSEKI_DATASET_NAME)
load_rdf_manifestation_into_triple_store(rdf_manifestation=transformed_complete_notice.distilled_rdf_manifestation,
triple_store_repository=fuseki_triple_store,
repository_name=TMP_FUSEKI_DATASET_NAME)

sparql_endpoint = allegro_triple_store.get_sparql_triple_store_endpoint(DEFAULT_NOTICE_REPOSITORY_NAME)
sparql_endpoint = fuseki_triple_store.get_sparql_triple_store_endpoint(TMP_FUSEKI_DATASET_NAME)
assert sparql_endpoint is not None

df_query_result = sparql_endpoint.with_query(sparql_query=SPARQL_QUERY_TRIPLES).fetch_tabular()
Expand All @@ -29,6 +28,4 @@ def test_load_notice_into_triple_store(transformed_complete_notice, allegro_trip
assert df_query_result is not None
assert len(df_query_result) > 0

with pytest.raises(ValueError):
load_notice_into_triple_store(notice_id="invalid_notice_id", notice_repository=fake_notice_repo,
triple_store_repository=allegro_triple_store)
fuseki_triple_store.delete_repository(repository_name=TMP_FUSEKI_DATASET_NAME)

0 comments on commit 536201c

Please sign in to comment.