Skip to content
36 changes: 19 additions & 17 deletions src/pydata_sphinx_theme/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,12 @@ def update_config(app):
)

# Validate icon links
if not isinstance(theme_options.get("icon_links", []), list):
raise ExtensionError(
"`icon_links` must be a list of dictionaries, you provided "
f"type {type(theme_options.get('icon_links'))}."
)
if theme_options.get("icon_links") is not None:
if not isinstance(theme_options.get("icon_links", []), list):
Copy link
Member

@drammock drammock Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see why on current main, setting icon_links = None in your conf.py would cause an error here. But if you don't want icon links, why not just leave icon_links undefined? Genuinely curious if there's a reason you need this.

raise ExtensionError(
"`icon_links` must be a list of dictionaries, you provided "
f"type {type(theme_options.get('icon_links'))}."
)

# Set the anchor link default to be # if the user hasn't provided their own
if not utils.config_provided_by_user(app, "html_permalinks_icon"):
Expand Down Expand Up @@ -140,18 +141,19 @@ def update_config(app):
# Add extra icon links entries if there were shortcuts present
# TODO: Deprecate this at some point in the future?
icon_links = theme_options.get("icon_links", [])
for url, icon, name in shortcuts:
if theme_options.get(url):
# This defaults to an empty list so we can always insert
icon_links.insert(
0,
{
"url": theme_options.get(url),
"icon": icon,
"name": name,
"type": "fontawesome",
},
)
if icon_links is not None:
for url, icon, name in shortcuts:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question as above: the code on main is fine if icon_links is not defined, it only errors if you explicitly set icon_links=None in the html_theme_options dictionary of conf.py. So why do that?

if theme_options.get(url):
# This defaults to an empty list so we can always insert
icon_links.insert(
0,
{
"url": theme_options.get(url),
"icon": icon,
"name": name,
"type": "fontawesome",
},
)
theme_options["icon_links"] = icon_links

# Prepare the logo config dictionary
Expand Down