Skip to content

Commit

Permalink
Return count in series navigation
Browse files Browse the repository at this point in the history
  • Loading branch information
amercader committed Jan 28, 2025
1 parent bf434ad commit 44a15df
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 17 deletions.
39 changes: 22 additions & 17 deletions ckanext/dataset_series/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,39 +108,44 @@ def _add_series_navigation(series_dict: dict) -> dict:
if not series_dict.get("series_order_field"):
return series_dict

first, last = _get_series_first_and_last(
first, last, count = _get_series_first_last_and_count(
series_dict["id"], series_dict["series_order_field"]
)
if first and last:
series_dict["series_navigation"] = {
"first": {
"id": first["id"],
"name": first["name"],
"title": first["title"],
},
"last": {
"id": last["id"],
"name": last["name"],
"title": last["title"],
},

series_dict["series_navigation"] = {
"count": count,
"first": None,
"last": None,
}
if first:
series_dict["series_navigation"]["first"] = {
"id": first["id"],
"name": first["name"],
"title": first["title"],
}
if last:
series_dict["series_navigation"]["last"] = {
"id": last["id"],
"name": last["name"],
"title": last["title"],
}

return series_dict


def _get_series_first_and_last(series_id, order_field):
def _get_series_first_last_and_count(series_id, order_field):
search_params = {"fq": f"vocab_in_series:{series_id}", "rows": 1}
first_result = toolkit.get_action("package_search")(
{}, dict(search_params, sort=f"{order_field} asc")
)

if not first_result["results"]:
return None, None
return None, None, 0

if first_result["count"] == 1:
return first_result["results"][0], first_result["results"][0]
return first_result["results"][0], first_result["results"][0], 1

last_result = toolkit.get_action("package_search")(
{}, dict(search_params, sort=f"{order_field} desc")
)
return first_result["results"][0], last_result["results"][0]
return first_result["results"][0], last_result["results"][0], last_result["count"]
20 changes: 20 additions & 0 deletions ckanext/dataset_series/tests/test_action.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ def test_series_navigation(series_fixtures):

assert "series_navigation" in series_dict

assert series_dict["series_navigation"]["count"] == 3

fields = ("id", "name", "title")
for item, dataset in [("first", "dataset1"), ("last", "dataset3")]:
for field in fields:
Expand All @@ -50,6 +52,24 @@ def test_series_navigation(series_fixtures):
), (item, dataset, field)


@pytest.mark.usefixtures("with_plugins", "clean_db")
@pytest.mark.ckan_config("ckan.plugins", "dataset_series scheming_datasets")
@pytest.mark.ckan_config(
"scheming.dataset_schemas",
"ckanext.dataset_series.schemas:dataset_series.yaml "
"ckanext.dataset_series.schemas:dataset_in_series.yaml",
)
def test_empty_series_navigation(series_fixtures):

dataset_series = factories.Dataset(type="dataset-series", series_order_field="name")
series_dict = call_action("package_show", id=dataset_series["id"])

assert series_dict["series_navigation"]["count"] == 0

assert series_dict["series_navigation"]["first"] is None
assert series_dict["series_navigation"]["last"] is None


@pytest.mark.usefixtures("with_plugins", "clean_db")
@pytest.mark.ckan_config("ckan.plugins", "dataset_series scheming_datasets")
@pytest.mark.ckan_config(
Expand Down

0 comments on commit 44a15df

Please sign in to comment.