#!/usr/bin/python

from elementtree.ElementTree import XML, tostring
from pdis.xpath import compile as xcompile
from sys import argv

outputmode = argv[1]
attr = argv[2]

#this will need to be extrapolated from the bcfg2.conf file
#but for testing it can stay as is

xmlfile="testing.xml"
file=open(xmlfile, 'r').readlines()
myxmlfile=""
for line in file:
    myxmlfile+=line
metadata=XML(myxmlfile)
nodelist=[]

(level,searchterm)=attr.split("=")

if level.lower() == 'image':
    xexpression="/*/Client[@image='%s']"%searchterm
    path = xcompile(xexpression)
    nodelist += [ element.attrib['name'] for element in path.evaluate(metadata) ]
else:
    profilelist=[]
    if level.lower() == "profile":
        profilelist.append(searchterm)
    else:
        classlist=[]
        xexpression="/*/Profile"
        path=xcompile(xexpression)
        for profile in path.evaluate(metadata):
            if level.lower() == 'class':
                xexpression="/*/Class[@name='%s']"%searchterm
                path=xcompile(xexpression)
                if path.evaluate(profile) and profile.attrib['name'] not in profilelist:
                    profilelist.append(profile.attrib['name'])
            else:
                xexpression="/*/Class"
                path=xcompile(xexpression)
                for profclass in path.evaluate(profile):
                    xepression="/*/Class[@name='%s']"%profclass.attrib['name']
                    path = xcompile(xexpression)
                    for myclass in path.evaluate(metadata):
                        xexpression="/*/Bundle[@name='%s']"%searchterm
                        path=xcompile(xexpression)
                        if path.evaluate(myclass) and myclass.attrib['name'] not in classlist:
                            classlist.append(myclass.attrib['name'])
                xexpression="/*/Profile"
                path=xcompile(xexpression)
                for profile in path.evaluate(metadata):
                    for myclass in classlist:
                        xexpression="/*/Class[@name='%s']"%myclass
                        path=xcompile(xexpression)
                        if path.evaluate(profile) and profile.attrib['name'] not in profilelist:
                            profilelist.append(profile.attrib['name'])
                            
        for profile in profilelist:
            xexpression="/*/Client[@profile='%s']"%profile
            path = xcompile(xexpression)
            nodelist += [ element.attrib['name'] for element in path.evaluate(metadata) ]

if outputmode == '-c':
    print ",".join(nodelist)
if outputmode == '-n':
    for node in nodelist:
        print node
if outputmode == '-s':
    print "not yet implemented"



syntax highlighted by Code2HTML, v. 0.9.1