Skip to content

Commit

Permalink
Add a field for additional Wikidata items in a media item
Browse files Browse the repository at this point in the history
  • Loading branch information
dseomn committed Nov 6, 2023
1 parent fc5e307 commit beed784
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
18 changes: 16 additions & 2 deletions rock_paper_sand/media_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ class MediaItem:
custom_data: Parsed proto.custom_data field, or None.
done: Parsed proto.done field.
wikidata_item: Wikidata item, or None.
all_wikidata_items_recursive: Wikidata items from this and all parts.
all_wikidata_items: wikidata_item and also any items in the
proto.wikidata_additional field.
all_wikidata_items_recursive: Wikidata items from this and all parts,
including ones from wikidata_additional.
wikidata_ignore_items_recursive: Wikidata items to ignore from this and
all parts.
wikidata_classes_ignore_recursive: Wikidata classes to ignore from this
Expand All @@ -62,6 +65,7 @@ class MediaItem:
custom_data: Any
done: multi_level_set.MultiLevelSet
wikidata_item: wikidata_value.Item | None
all_wikidata_items: Set[wikidata_value.Item]
all_wikidata_items_recursive: Set[wikidata_value.Item]
wikidata_ignore_items_recursive: Set[wikidata_value.Item]
wikidata_classes_ignore_recursive: Set[wikidata_value.Item]
Expand Down Expand Up @@ -117,9 +121,18 @@ def from_config(
if proto.wikidata
else None
)
all_wikidata_items_recursive = frozenset(
all_wikidata_items = frozenset(
itertools.chain(
() if wikidata_item is None else (wikidata_item,),
map(
wikidata_value.Item.from_string,
proto.wikidata_additional,
),
)
)
all_wikidata_items_recursive = frozenset(
itertools.chain(
all_wikidata_items,
*(part.all_wikidata_items_recursive for part in parts),
)
)
Expand Down Expand Up @@ -160,6 +173,7 @@ def from_config(
),
done=multi_level_set.MultiLevelSet.from_string(proto.done),
wikidata_item=wikidata_item,
all_wikidata_items=all_wikidata_items,
all_wikidata_items_recursive=all_wikidata_items_recursive,
wikidata_ignore_items_recursive=wikidata_ignore_items_recursive,
wikidata_classes_ignore_recursive=(
Expand Down
9 changes: 9 additions & 0 deletions rock_paper_sand/media_item_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def test_from_config(self) -> None:
other_part = {
"name": "other-part",
"wikidata": "Q2",
"wikidataAdditional": ["Q20"],
"wikidataIgnore": ["Q21", "Q22"],
"wikidataClassesIgnore": ["Q23", "Q24"],
}
Expand Down Expand Up @@ -65,9 +66,11 @@ def test_from_config(self) -> None:
custom_data={"a": "b"},
done=mock.ANY,
wikidata_item=wikidata_value.Item("Q1"),
all_wikidata_items={wikidata_value.Item("Q1")},
all_wikidata_items_recursive={
wikidata_value.Item("Q1"),
wikidata_value.Item("Q2"),
wikidata_value.Item("Q20"),
},
wikidata_ignore_items_recursive={
wikidata_value.Item("Q11"),
Expand All @@ -91,6 +94,7 @@ def test_from_config(self) -> None:
custom_data=None,
done=mock.ANY,
wikidata_item=None,
all_wikidata_items=frozenset(),
all_wikidata_items_recursive=frozenset(),
wikidata_ignore_items_recursive=frozenset(),
wikidata_classes_ignore_recursive=frozenset(),
Expand All @@ -107,8 +111,13 @@ def test_from_config(self) -> None:
custom_data=None,
done=mock.ANY,
wikidata_item=wikidata_value.Item("Q2"),
all_wikidata_items={
wikidata_value.Item("Q2"),
wikidata_value.Item("Q20"),
},
all_wikidata_items_recursive={
wikidata_value.Item("Q2"),
wikidata_value.Item("Q20"),
},
wikidata_ignore_items_recursive={
wikidata_value.Item("Q21"),
Expand Down
9 changes: 7 additions & 2 deletions rock_paper_sand/proto/config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,15 @@ message MediaItem {
// URL.
string custom_availability = 4;

// Wikidata item URL or QID, e.g., "https://www.wikidata.org/wiki/Q3107329" or
// "Q3107329".
// Primary Wikidata item URL or QID, e.g.,
// "https://www.wikidata.org/wiki/Q3107329" or "Q3107329".
string wikidata = 9;

// Additional Wikidata items. E.g., a media item with parts might have both a
// Wikidata item for a fictional universe and a Wikidata item for a media
// franchise.
repeated string wikidata_additional = 13;

// Wikidata items to ignore when checking for related media.
repeated string wikidata_ignore = 11;

Expand Down

0 comments on commit beed784

Please sign in to comment.