Skip to content

Commit f1d4a2c

Browse files
committed
Preserve order of dependencies when deduping
1 parent 67b203e commit f1d4a2c

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

htmltools/_core.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,19 +1215,24 @@ def _static_extract_serialized_html_deps(
12151215
# HTMLdependency.get_tag_representation()
12161216
pattern = r'<script type="application/json" data-html-dependency="">((?:.|\r|\n)*?)</script>'
12171217
dep_strs = re.findall(pattern, html)
1218-
# Deduplicate dependencies. htmltools normally would dedupe dependencies, but
1219-
# with HTMLTextDocuments, the input HTML would usually have been generated by
1220-
# something else (like Quarto) and may not have the dependencies deduped.
1221-
dep_strs = list(set(dep_strs))
12221218

12231219
# Remove the serialized HTML dependencies from the HTML string
12241220
html = re.sub(pattern, "", html)
12251221

1222+
# Reconstitute the HTMLDependency objects
1223+
#
1224+
# Note: htmltools normally would dedupe dependencies, but
1225+
# with HTMLTextDocuments, the input HTML would usually have been generated by
1226+
# something else (like Quarto) and may not have the dependencies deduped.
1227+
seen_deps: set[str] = set()
12261228
deps: list[HTMLDependency] = []
12271229
for dep_str in dep_strs:
1230+
if dep_str in seen_deps:
1231+
continue
12281232
args = json.loads(dep_str)
12291233
dep = HTMLDependency(**args)
12301234
deps.append(dep)
1235+
seen_deps.add(dep_str)
12311236

12321237
return (html, deps)
12331238

0 commit comments

Comments
 (0)