Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 0 additions & 33 deletions dataconnect/service/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import pandas as pd

from dataconnect.exceptions import ErrorDetail
from dataconnect.models import Dataset, DatasetVersion, PaginatedResponse, Pagination, StudiesResult
from dataconnect.service.base import DataConnectService
from dataconnect.service.error_handler import translate_error
Expand All @@ -16,7 +15,6 @@
resource_to_fetched_data,
resource_to_study,
)
from dataconnect.service.validators import validate_positive_int, validate_uuid
from dataconnect.transport.base import Transport
from dataconnect.transport.errors import TransportError
from dataconnect.transport.models import DatasetTicket, ResourceQuery
Expand Down Expand Up @@ -89,37 +87,6 @@ def get_dataset_versions(self, dataset_uuid: UUID) -> list[DatasetVersion]:
def fetch_data(self, dataset_uuid: UUID, first_n_rows: int | None = None) -> pd.DataFrame:
"""Fetch data for a dataset"""

validate_uuid(
dataset_uuid,
field_name="dataset_uuid",
error_code="VAL_C_DATASET_UUID",
message="Invalid dataset_uuid.",
details=[
ErrorDetail(
field="dataset_uuid",
message="dataset_uuid must be a valid UUID.",
expected="Review and provide the correct dataset_uuid.",
)
],
)

if first_n_rows is not None:
validate_positive_int(
first_n_rows,
field_name="first_n_rows",
error_code="VAL_C_FIRST_N_ROWS",
message="Invalid first_n_rows.",
details=[
ErrorDetail(
field="first_n_rows",
message=(f"Received {first_n_rows} for first_n_rows, which is not a positive integer."),
expected=(
"Set first_n_rows to 1 or greater, or omit the parameter to retrieve the full dataset"
),
)
],
)

ticket = DatasetTicket(
dataset_uuid=str(dataset_uuid),
limit=first_n_rows,
Expand Down
81 changes: 0 additions & 81 deletions tests/test_fetch_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
AuthorizationError,
NotFoundError,
ServerError,
ValidationError,
)
from dataconnect.service.default import DefaultDataConnectService
from dataconnect.transport.errors import (
Expand Down Expand Up @@ -120,86 +119,6 @@ def test_fetch_data_returns_empty_dataframe_for_empty_table() -> None:
assert "col" in result.columns


# ---------------------------------------------------------------------------
# Validation — dataset_uuid
# ---------------------------------------------------------------------------


def test_fetch_data_raises_validation_error_on_none_uuid() -> None:
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data(None) # type: ignore[arg-type]

assert exc_info.value.error_code == "VAL_C_DATASET_UUID"


def test_fetch_data_raises_validation_error_on_zero_uuid() -> None:
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data(UUID(int=0))

assert exc_info.value.error_code == "VAL_C_DATASET_UUID"


def test_fetch_data_raises_validation_error_on_string_uuid() -> None:
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data("073410b6-79be-3e7d-ae37-92f6e054013e") # type: ignore[arg-type]

assert exc_info.value.error_code == "VAL_C_DATASET_UUID"


# ---------------------------------------------------------------------------
# Validation — first_n_rows
# ---------------------------------------------------------------------------


def test_fetch_data_raises_validation_error_on_zero_first_n_rows() -> None:
dataset_uuid = UUID("073410b6-79be-3e7d-ae37-92f6e054013e")
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data(dataset_uuid, first_n_rows=0)

assert exc_info.value.error_code == "VAL_C_FIRST_N_ROWS"
assert exc_info.value.details is not None
assert exc_info.value.details[0].field == "first_n_rows"


def test_fetch_data_raises_validation_error_on_negative_first_n_rows() -> None:
dataset_uuid = UUID("073410b6-79be-3e7d-ae37-92f6e054013e")
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data(dataset_uuid, first_n_rows=-5)

assert exc_info.value.error_code == "VAL_C_FIRST_N_ROWS"


def test_fetch_data_raises_validation_error_on_non_int_first_n_rows() -> None:
dataset_uuid = UUID("073410b6-79be-3e7d-ae37-92f6e054013e")
transport = _FakeTransport(data_table=_make_ipc_table({"x": [1]}))
service = DefaultDataConnectService(transport)

with pytest.raises(ValidationError) as exc_info:
service.fetch_data(dataset_uuid, first_n_rows="abc") # type: ignore[arg-type]

assert exc_info.value.error_code == "VAL_C_FIRST_N_ROWS"


# ---------------------------------------------------------------------------
# Transport-error translation
# ---------------------------------------------------------------------------


def test_fetch_data_translates_authentication_error() -> None:
dataset_uuid = UUID("073410b6-79be-3e7d-ae37-92f6e054013e")
transport = _FakeTransport(
Expand Down
Loading