Skip to content

Commit 0741270

Browse files
committed
Implement load_urls_into_new_dataset() convenience task
1 parent 87e4b8d commit 0741270

File tree

4 files changed

+38
-5
lines changed

4 files changed

+38
-5
lines changed

src/omnipy/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@
138138
from omnipy.modules.remote.models import HttpUrlModel, QueryParamsModel, UrlPathModel
139139
from omnipy.modules.remote.tasks import (get_bytes_from_api_endpoint,
140140
get_json_from_api_endpoint,
141-
get_str_from_api_endpoint)
141+
get_str_from_api_endpoint,
142+
load_urls_into_new_dataset)
142143
from omnipy.modules.tables.datasets import (TableDictOfDictsOfJsonScalarsDataset,
143144
TableDictOfListsOfJsonScalarsDataset,
144145
TableListOfDictsOfJsonScalarsDataset,
@@ -318,6 +319,7 @@
318319
'get_bytes_from_api_endpoint',
319320
'get_json_from_api_endpoint',
320321
'get_str_from_api_endpoint',
322+
'load_urls_into_new_dataset',
321323
'create_row_index_from_column',
322324
'remove_columns',
323325
'rename_col_names',

src/omnipy/modules/remote/tasks.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
from aiohttp import ClientResponse, ClientSession
44
from aiohttp_retry import ExponentialRetry, FibonacciRetry, JitterRetry, RandomRetry, RetryClient
5+
from typing_extensions import TypeVar
56

67
from omnipy.api.enums import BackoffStrategy
78
from omnipy.compute.task import TaskTemplate
9+
from omnipy.data.dataset import Dataset
810

911
from ..json.datasets import JsonDataset
1012
from ..json.models import JsonModel
1113
from ..raw.datasets import BytesDataset, StrDataset
1214
from ..raw.models import BytesModel, StrModel
15+
from .datasets import HttpUrlDataset
1316
from .models import HttpUrlModel
1417

1518
DEFAULT_RETRIES = 5
@@ -126,3 +129,16 @@ async def get_bytes_from_api_endpoint(
126129
):
127130
async for response in _call_get(url, cast(ClientSession, retry_session)):
128131
return BytesModel(await response.read())
132+
133+
134+
JsonDatasetT = TypeVar('JsonDatasetT', bound=Dataset)
135+
136+
137+
@TaskTemplate()
138+
async def load_urls_into_new_dataset(
139+
urls: HttpUrlDataset,
140+
dataset_cls: type[JsonDatasetT] = JsonDataset,
141+
) -> JsonDatasetT:
142+
dataset = dataset_cls()
143+
await dataset.load(urls)
144+
return dataset

tests/modules/remote/cases/request_types.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22

33
import pytest_cases as pc
44

5-
from omnipy import BytesDataset, Dataset, JsonDataset, StrDataset, TaskTemplate
5+
from omnipy import BytesDataset, Dataset, JsonDataset, JsonDictDataset, StrDataset, TaskTemplate
66
from omnipy.modules.remote.tasks import (get_bytes_from_api_endpoint,
77
get_json_from_api_endpoint,
8-
get_str_from_api_endpoint)
8+
get_str_from_api_endpoint,
9+
load_urls_into_new_dataset)
910

1011

1112
@dataclass
1213
class RequestTypeCase:
1314
job: TaskTemplate
14-
kwargs: dict[str, str]
15+
kwargs: dict[str, object]
1516
dataset_cls: type[Dataset]
1617

1718

@@ -28,3 +29,17 @@ def case_get_str_from_api_endpoint() -> RequestTypeCase:
2829
@pc.case
2930
def case_get_bytes_from_api_endpoint() -> RequestTypeCase:
3031
return RequestTypeCase(get_bytes_from_api_endpoint, dict(), BytesDataset)
32+
33+
34+
@pc.case
35+
def case_load_urls_into_new_dataset_default_json() -> RequestTypeCase:
36+
return RequestTypeCase(load_urls_into_new_dataset, dict(), JsonDataset)
37+
38+
39+
@pc.case
40+
def case_load_urls_into_new_dataset_other_dataset_cls() -> RequestTypeCase:
41+
return RequestTypeCase(
42+
load_urls_into_new_dataset,
43+
dict(dataset_cls=JsonDictDataset),
44+
JsonDictDataset,
45+
)

tests/modules/remote/test_tasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def _assert_query_results(assert_model_if_dyn_conv_else_val, case: RequestTypeCa
133133
case omnipy.StrDataset | omnipy.BytesDataset:
134134
json_data = JsonDataset()
135135
json_data.from_json(data.to_data())
136-
case omnipy.JsonDataset:
136+
case omnipy.JsonDataset | omnipy.JsonDictDataset:
137137
json_data = data
138138
case _:
139139
raise ShouldNotOccurException()

0 commit comments

Comments
 (0)