Skip to content

Commit

Permalink
COPDS-1901 - prevent hidden datasets to te references by others
Browse files Browse the repository at this point in the history
  • Loading branch information
keul committed Jul 18, 2024
1 parent a8f2b68 commit d52956a
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
14 changes: 12 additions & 2 deletions cads_catalogue/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ def find_related_resources(
Links from a resource A to resource B created this way:
- B has a (not empty) list of "keywords" metadata completely included in A's keywords
- B has at least one common element in the "related_resources_keywords"
Also: B should not be hidden.
Parameters
----------
Expand All @@ -594,12 +595,21 @@ def find_related_resources(
continue
res1_keywords = set([r.keyword_name for r in res1.keywords])
res2_keywords = set([r.keyword_name for r in res2.keywords])
if res1_keywords.issubset(res2_keywords) and len(res1_keywords) > 0:
if (
res1_keywords.issubset(res2_keywords)
and len(res1_keywords) > 0
# Never create references to hidden resources
and not res2.hidden
):
relationships_found.append((res1, res2))
continue
res1_rel_res_kws = set(res1.related_resources_keywords)
res2_rel_res_kws = set(res2.related_resources_keywords)
if res1_rel_res_kws & res2_rel_res_kws:
if (
res1_rel_res_kws & res2_rel_res_kws
# Never create references to hidden resources
and not res2.hidden
):
relationships_found.append((res1, res2))
return relationships_found

Expand Down
77 changes: 77 additions & 0 deletions tests/test_40_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -1823,3 +1823,80 @@ def test_resource_sync(
assert session.execute(sa.text("select resource_uid from resources")).all() == [
("reanalysis-era5-land",),
]


def test_find_related_resources():
def _to_testable_structure(raw_related):
return [[r.resource_uid for r in t] for t in raw_related]

res1 = database.Resource(
resource_id=1, resource_uid="res1", related_resources_keywords=["aaa"]
)
res2 = database.Resource(
resource_id=2, resource_uid="res2", related_resources_keywords=["aaa", "bbb"]
)
res3 = database.Resource(
resource_id=3, resource_uid="res3", related_resources_keywords=["ccc"]
)
res4 = database.Resource(
resource_id=4,
resource_uid="res4",
related_resources_keywords=["aaa"],
hidden=True,
)
related = manager.find_related_resources([res1, res2, res3, res4])

assert _to_testable_structure(related) == [
["res1", "res2"],
["res2", "res1"],
["res4", "res1"],
["res4", "res2"],
]

res2.hidden = True
related = manager.find_related_resources([res1, res2, res3, res4])

assert _to_testable_structure(related) == [
["res2", "res1"],
["res4", "res1"],
]

res1 = database.Resource(
resource_id=1,
resource_uid="res1",
related_resources_keywords=[],
keywords=[
database.Keyword(keyword_id=1, keyword_name="aaa"),
database.Keyword(keyword_id=2, keyword_name="bbb"),
],
)
res2 = database.Resource(
resource_id=2,
resource_uid="res2",
related_resources_keywords=[],
keywords=[
database.Keyword(keyword_id=1, keyword_name="aaa"),
database.Keyword(keyword_id=2, keyword_name="bbb"),
database.Keyword(keyword_id=2, keyword_name="ccc"),
],
)
res3 = database.Resource(
resource_id=1,
resource_uid="res3",
related_resources_keywords=[],
keywords=[
database.Keyword(keyword_id=1, keyword_name="aaa"),
database.Keyword(keyword_id=2, keyword_name="bbb"),
database.Keyword(keyword_id=2, keyword_name="ddd"),
],
)
related = manager.find_related_resources([res1, res2])

assert _to_testable_structure(related) == [
["res1", "res2"],
]

res2.hidden = True
related = manager.find_related_resources([res1, res2])

assert _to_testable_structure(related) == []

0 comments on commit d52956a

Please sign in to comment.