#!/usr/bin/env python
import clusto
from clusto import script_helper
import os
import sys

# Connect to clusto
conf = script_helper.load_config(
    os.environ.get('CLUSTOCONFIG', '/etc/clusto/clusto.conf'))
clusto.connect(conf)


def print_obj(x, indent=0, attrs=['name']):
    txt = ''
    for attr in attrs:
        value = None
        if attr.startswith('.'):
            attr = attr.lstrip('.')

        method = getattr(x, attr, None)
        if method and callable(method):
            value = method()

        if not value:
            try:
                value = eval('%s(x)' % attr)
            except:
                value = None

        if not value:
            value = getattr(x, attr, None)

        if not value:
            value = [i.value for i in x.attr_query(key=attr)]
            if len(value) == 1:
                value = value[0]

        if not value:
            value = None
        txt += '%s: %s\t' % (attr, value)
    print '%s%s' % ('\t' * indent, txt)

def print_tree(root, indent=0, attrs=['name']):
    for x in root.contents():
        print_obj(x, indent, attrs)
        print_tree(x, indent=(indent + 1), attrs=attrs)

def main():
    if len(sys.argv) < 2:
        print 'Usage: %s <object name> [attributes...]' % sys.argv[0]
        sys.exit(0)

    if len(sys.argv) > 2:
        attrs = sys.argv[2:]
    else:
        attrs = ['name']

    root = clusto.get_by_name(sys.argv[1])
    print_obj(root, indent=0, attrs=attrs)
    print_tree(root, indent=1, attrs=attrs)

if __name__ == '__main__':
    main()
