Skip to content

Commit 6d4ae0f

Browse files
committed
Fix collection parsing to not return None for many stats
1 parent a14b482 commit 6d4ae0f

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

boardgamegeek/loaders/collection.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,31 @@ def add_collection_items_from_xml(collection: Collection, xml_root: ET.Element,
4242
if stats is None:
4343
raise BGGApiError("missing 'stats'")
4444

45+
rating = stats.find("rating")
4546
stat_data = {
46-
"usersrated": xml_subelement_attr(stats, "usersrated", convert=int, quiet=True),
47-
"average": xml_subelement_attr(stats, "average", convert=float, quiet=True),
48-
"bayesaverage": xml_subelement_attr(stats, "bayesaverage", convert=float, quiet=True),
49-
"stddev": xml_subelement_attr(stats, "stddev", convert=float, quiet=True),
50-
"median": xml_subelement_attr(stats, "median", convert=float, quiet=True),
47+
"usersrated": xml_subelement_attr(rating, "usersrated", convert=int, quiet=True),
48+
"average": xml_subelement_attr(rating, "average", convert=float, quiet=True),
49+
"bayesaverage": xml_subelement_attr(rating, "bayesaverage", convert=float, quiet=True),
50+
"stddev": xml_subelement_attr(rating, "stddev", convert=float, quiet=True),
51+
"median": xml_subelement_attr(rating, "median", convert=float, quiet=True),
5152
"ranks": [],
5253
}
5354

54-
for rank in stats.findall("ranks/rank"):
55-
stat_data["ranks"].append(
56-
{
55+
if rating is not None:
56+
for rank in rating.findall("ranks/rank"):
57+
rank_data = {
5758
"type": rank.attrib.get("type"),
5859
"id": rank.attrib["id"],
5960
"name": rank.attrib["name"],
6061
"friendlyname": rank.attrib["friendlyname"],
6162
"value": rank.attrib.get("value"),
62-
"bayesaverage": float(rank.attrib.get("bayesaverage", 0.0)),
63+
"bayesaverage": rank.attrib.get("bayesaverage"),
6364
}
64-
)
65+
66+
for field in ["value", "bayesaverage"]:
67+
if rank_data[field] in ["Not Ranked", "N/A"]:
68+
rank_data[field] = None
69+
stat_data["ranks"].append(rank_data)
6570

6671
data.update(
6772
{

boardgamegeek/objects/games.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def __init__(self, data: dict[str, Any]):
7272
if rank.get("name") == "boardgame":
7373
try:
7474
self._bgg_rank = int(rank["value"])
75-
except (KeyError, TypeError):
75+
except (KeyError, TypeError, ValueError):
7676
pass
7777
self._ranks.append(BoardGameRank(rank))
7878

0 commit comments

Comments
 (0)