# GetUniqueValues.py
'''
	This macro shows a list of unique definition values from pages
		a) whose names match the given regular expression and
		b) who contain a definition with a certain heading

Usage: [[GetUniqueValues(PageRE,DefinitionTermRE)]]

Examples:
	[[GetUniqueVals(.*Service,Host)]] might output the following:
	Host	SomeHost
			AnotherHost
			TestSystem

TODO:

History:
	1.0 First version, adapted from GetVals.py - MarkusMaier
	1.1 Outputs key/values as a definition list - MarkusMaier
'''

Dependencies = [1]

import re, sets
from MoinMoin.wikidicts import Dict

def execute(macro,args):
	page_re, key_re = args.split(",")

	isdict = re.compile(page_re, re.UNICODE).search
	iskey = re.compile(key_re, re.UNICODE).search

	keys = {}
	dictpages = macro.request.rootpage.getPageList(user='', filter=isdict)
	for pagename in dictpages:
		dict = Dict(macro.request, pagename)
		for key in dict.keys():
			k = key.strip()
			if iskey(k):
				if keys.has_key(k):
					keys[k] = keys[k] + [dict.get(key,"")]
				else:
					keys[k] = [dict.get(key,"")]

	result = "<dl>"
	
	all_keys = list(keys.keys())
	all_keys.sort()
	for k in all_keys:
		# iterate over keys in order
		result += "<dt>" + k + "<dd>"
		values = list(sets.Set(keys[k]))
		values.sort()
		for v in values:
			# iterate over values for this key in order
			result += v + "<br>"
		result += "</dd>"

	result += "</dl>"
	return macro.formatter.rawHTML(result)
