Skip to content

Commit e1e1031

Browse files
authored
Merge pull request #21 from LinkedEarth/add-skip-param
Adding `skip` param for pagination support. Fixes #18
2 parents e8f6abc + 766a0bf commit e1e1031

3 files changed

Lines changed: 32 additions & 6 deletions

File tree

examples/Usage_NOAAStudyWrapper.ipynb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,15 @@
250250
"metadata": {},
251251
"outputs": [],
252252
"source": [
253-
"dataset.search_studies(min_lat=68, max_lat=69, limit=1000)"
253+
"from pyleotups import Dataset\n",
254+
"\n",
255+
"dataset = Dataset()\n",
256+
"ds1 = dataset.search_studies(min_lat=68, max_lat=69, limit=10)\n",
257+
"print(dataset.studies)\n",
258+
"ds2 = dataset.search_studies(min_lat=68, max_lat=69, limit=10, skip=10)\n",
259+
"print(dataset.studies)\n",
260+
"ds3 = dataset.search_studies(min_lat=68, max_lat=69, limit=20)\n",
261+
"print(dataset.studies)\n"
254262
]
255263
},
256264
{

pyleotups/core/Dataset.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,11 @@ def search_studies(self, **kwargs):
230230
display : bool, default False
231231
If True, render a small preview after parsing.
232232
233+
234+
skip : int, optional
235+
Number of studies to skip (for pagination). Use with ``limit`` to page through results.
236+
Example: ``limit=10, skip=10`` returns items 11–20.
237+
233238
Returns
234239
-------
235240
pandas.DataFrame
@@ -383,12 +388,23 @@ def search_studies(self, **kwargs):
383388
384389
df_recent = ds.search_studies(recent=True, limit=25)
385390
df_recent.head()
391+
392+
Limit and Skipping (for pagination)
393+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
394+
.. jupyter-execute::
395+
396+
# Limit up to first 10 results
397+
df_limit = ds.search_studies(earliest_year=12000, time_format="BP", time_method="overAny", limit=10)
398+
df_limit.head()
399+
400+
# Skip the first 10 results (i.e., get results 11-20)
401+
df_skip = ds.search_studies(earliest_year=12000, time_format="BP", time_method="overAny", limit=10, skip=10)
402+
df_skip.head()
386403
"""
387404

388-
for param in ("headerheaders_only", "skip"):
389-
if param in kwargs:
390-
log.warning("%s is not supported and will be ignored.", param)
391-
kwargs.pop(param, None)
405+
if "headers_only" in kwargs:
406+
log.warning("%s is not supported and will be ignored.", param)
407+
kwargs.pop("headers_only", None)
392408

393409
if not any([
394410
kwargs.get("xml_id"), kwargs.get("noaa_id"),
@@ -402,7 +418,7 @@ def search_studies(self, **kwargs):
402418
kwargs.get("cv_whats"), kwargs.get("min_elevation"),
403419
kwargs.get("max_elevation"), kwargs.get("time_format"),
404420
kwargs.get("time_method"), kwargs.get("reconstruction"),
405-
kwargs.get("species"), kwargs.get("recent"),
421+
kwargs.get("species"), kwargs.get("recent"), kwargs.get("skip")
406422
]):
407423
raise ValueError(
408424
"At least one search parameter must be specified to initiate a query. "

pyleotups/utils/api/query_builder.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ def build_payload(**kwargs) -> Tuple[dict, List[str]]:
5151
notes.append(f"Limit set to {payload['limit']}.")
5252
else:
5353
notes.append(f"Limit defaulted to {DEFAULT_LIMIT} (PyleoTUPS).")
54+
if (v := kwargs.get("skip")) is not None:
55+
payload["skip"] = validate_int("skip", v)
5456

5557
# search_text
5658
st = kwargs.get("search_text")

0 commit comments

Comments
 (0)