Skip to content

Commit

Permalink
feat: discontinue use of SPARQLWrapper library
Browse files Browse the repository at this point in the history
  • Loading branch information
lu-pl committed Jan 29, 2025
1 parent 02110ba commit 1f65fa5
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 77 deletions.
6 changes: 1 addition & 5 deletions rdfproxy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
from rdfproxy.adapter import SPARQLModelAdapter # noqa: F401
from rdfproxy.sparql_strategies import (
SPARQLStrategy, # noqa: F401
SPARQLWrapperStrategy, # noqa: F401
HttpxStrategy, # noqa: F401
)
from rdfproxy.sparqlwrapper import SPARQLWrapper # noqa: F401
from rdfproxy.utils._types import ConfigDict, SPARQLBinding # noqa: F401
from rdfproxy.utils.models import Page, QueryParameters # noqa: F401
9 changes: 4 additions & 5 deletions rdfproxy/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from rdfproxy.constructor import _QueryConstructor
from rdfproxy.mapper import _ModelBindingsMapper
from rdfproxy.sparql_strategies import HttpxStrategy, SPARQLStrategy
from rdfproxy.sparqlwrapper import SPARQLWrapper
from rdfproxy.utils._types import _TModelInstance
from rdfproxy.utils.checkers.query_checker import check_query
from rdfproxy.utils.models import Page, QueryParameters
Expand Down Expand Up @@ -38,13 +38,12 @@ def __init__(
target: str,
query: str,
model: type[_TModelInstance],
sparql_strategy: type[SPARQLStrategy] = HttpxStrategy,
) -> None:
self._target = target
self._query = check_query(query)
self._model = model

self.sparql_strategy = sparql_strategy(self._target)
self.sparqlwrapper = SPARQLWrapper(self._target)

logger.info("Initialized SPARQLModelAdapter.")
logger.debug("Endpoint: %s", self._target)
Expand All @@ -70,13 +69,13 @@ def query(

logger.debug("Running items query: \n%s", items_query)

items_query_bindings: Iterator[dict] = self.sparql_strategy.query(items_query)
items_query_bindings: Iterator[dict] = self.sparqlwrapper.query(items_query)
mapper = _ModelBindingsMapper(self._model, items_query_bindings)
items: list[_TModelInstance] = mapper.get_models()

logger.debug("Running count query: \n%s", count_query)

count_query_bindings: Iterator[dict] = self.sparql_strategy.query(count_query)
count_query_bindings: Iterator[dict] = self.sparqlwrapper.query(count_query)
total: int = int(next(count_query_bindings)["cnt"])
pages: int = math.ceil(total / query_parameters.size)

Expand Down
61 changes: 0 additions & 61 deletions rdfproxy/sparql_strategies.py

This file was deleted.

37 changes: 37 additions & 0 deletions rdfproxy/sparqlwrapper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from collections.abc import Iterator

import httpx


class SPARQLWrapper:
"""Simple httpx-based SPARQLWrapper implementaton for RDFProxy."""

def __init__(self, endpoint: str):
self.endpoint = endpoint

def query(self, query: str) -> Iterator[dict[str, str]]:
"""Run a SPARQL query against endpoint and return an Iterator of flat result mappings."""
result: httpx.Response = self._httpx_run_sparql_query(query)
return self._get_bindings_from_bindings_dict(result.json())

@staticmethod
def _get_bindings_from_bindings_dict(bindings_dict: dict) -> Iterator[dict]:
bindings = map(
lambda binding: {k: v["value"] for k, v in binding.items()},
bindings_dict["results"]["bindings"],
)
return bindings

def _httpx_run_sparql_query(self, query: str) -> httpx.Response:
data = {"output": "json", "query": query}
headers = {
"Accept": "application/sparql-results+json",
}

response = httpx.post(
self.endpoint,
headers=headers,
data=data,
)

return response
10 changes: 4 additions & 6 deletions tests/tests_adapter/test_adapter_grouped_pagination.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

from typing import Annotated, Any, NamedTuple

import pytest

from pydantic import BaseModel
import pytest
from rdfproxy import (
ConfigDict,
HttpxStrategy,
Page,
QueryParameters,
SPARQLBinding,
SPARQLModelAdapter,
SPARQLWrapperStrategy,
)


Expand Down Expand Up @@ -59,7 +57,7 @@ class Parent(BaseModel):
children: list[Child]


@pytest.fixture(params=[HttpxStrategy, SPARQLWrapperStrategy])
@pytest.fixture(params=[HttpxStrategy])
def adapter(request):
return SPARQLModelAdapter(
target="https://graphdb.r11.eu/repositories/RELEVEN",
Expand All @@ -69,7 +67,7 @@ def adapter(request):
)


@pytest.fixture(params=[HttpxStrategy, SPARQLWrapperStrategy])
@pytest.fixture(params=[HttpxStrategy])
def binding_adapter(request):
return SPARQLModelAdapter(
target="https://graphdb.r11.eu/repositories/RELEVEN",
Expand All @@ -79,7 +77,7 @@ def binding_adapter(request):
)


@pytest.fixture(params=[HttpxStrategy, SPARQLWrapperStrategy])
@pytest.fixture(params=[HttpxStrategy])
def ungrouped_adapter(request):
return SPARQLModelAdapter(
target="https://graphdb.r11.eu/repositories/RELEVEN",
Expand Down

0 comments on commit 1f65fa5

Please sign in to comment.