'Return a list of distinct \'user_tname:user_value\' strings that the
given user has used.'

def tags_used(self, user, tag_models=None):

    if self.is_anonymous(user):
        return []
    if (not tag_models):
        tag_models = [v.tag_assoc_class for v in self.app.tag_handler.item_tag_assoc_info.values()]
    all_tags_query = None
    for tag_model in tag_models:
        subq = self.session().query(tag_model.user_tname, tag_model.user_value).filter((tag_model.user == user))
        all_tags_query = (subq if (all_tags_query is None) else all_tags_query.union(subq))
    if (all_tags_query is None):
        return []
    tags = all_tags_query.distinct().all()
    tags = [(((name + ':') + val) if val else name) for (name, val) in tags]
    return sorted(tags)
