Skip to content

Commit

Permalink
On keyword select page, sort thesauri.
Browse files Browse the repository at this point in the history
  • Loading branch information
jon-ide committed Jan 10, 2024
1 parent 2eab204 commit 59c1b00
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
4 changes: 3 additions & 1 deletion webapp/home/utils/import_nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,10 @@ def consolidate_keyword_sets(eml_node):
keyword_list.append(keyword)
keyword_dict[thesaurus] = keyword_list
# For each thesaurus, create a new keywordSet node and add it to the dataset node.
sorted_thesauri = sorted(keyword_dict.keys(), key=lambda s: s.lower())
# Avoid duplication of keywords within a keywordSet node.
for thesaurus, keyword_list in keyword_dict.items():
for thesaurus in sorted_thesauri:
keyword_list = keyword_dict[thesaurus]
keywordSet_node = new_child_node(names.KEYWORDSET, dataset_node)
already_added = []
keywordSet_node.parent = dataset_node
Expand Down
23 changes: 20 additions & 3 deletions webapp/home/utils/lists.py
Original file line number Diff line number Diff line change
Expand Up @@ -787,14 +787,31 @@ def get_downval(kw_node):
downval = NO_OP
return downval

def get_sorted_keywords(eml_node):
keywords = []
keyword_nodes = eml_node.find_all_nodes_by_path([names.DATASET, names.KEYWORDSET, names.KEYWORD])
for keyword_node in keyword_nodes:
keyword_set = keyword_node.parent
thesaurus_node = keyword_set.find_child(names.KEYWORDTHESAURUS)
if thesaurus_node:
thesaurus = thesaurus_node.content
else:
thesaurus = ''
keywords.append((keyword_node, keyword_node.content, thesaurus))
# We want to sort the thesauri, but not the keywords within a thesaurus, because we want the user to have
# control over the order of the keywords within a thesaurus.
sorted_keywords = sorted(keywords, key=lambda x: (x[2].lower()))
return [x[0] for x in sorted_keywords]

"""
Returns a list of namedtuples of type KW_Entry for the keywords for a dataset, across all keywordSets.
"""
kw_list = []
if eml_node:
kw_nodes = eml_node.find_all_nodes_by_path([
names.DATASET, names.KEYWORDSET, names.KEYWORD
])
# kw_nodes = eml_node.find_all_nodes_by_path([
# names.DATASET, names.KEYWORDSET, names.KEYWORD
# ])
kw_nodes = get_sorted_keywords(eml_node)
if kw_nodes:
KW_Entry = collections.namedtuple(
'KW_Entry',
Expand Down

0 comments on commit 59c1b00

Please sign in to comment.