from __future__ import (absolute_import, division, print_function) __metaclass__ = type from ansible.plugins.lookup import LookupBase from ansible.errors import AnsibleError class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """ Group the given cards into categorized and uncategorized lists based on the tags from menu_categories. Categories are sorted alphabetically before returning. """ if len(terms) < 2: raise AnsibleError("Missing required arguments") cards = terms[0] menu_categories = terms[1] categorized = {} uncategorized = [] # Categorize cards for card in cards: found = False for category, data in menu_categories.items(): if any(tag in data.get('tags', []) for tag in card.get('tags', [])): categorized.setdefault(category, []).append(card) found = True break if not found: uncategorized.append(card) # Sort categories alphabetically sorted_categorized = { k: categorized[k] for k in sorted(categorized.keys(), key=str.lower) } return [ { 'categorized': sorted_categorized, 'uncategorized': uncategorized, } ]