Hello,
This is Sandeep H S working in Green Turtles Technologies, B'lore.
I am trying to execute a python program but unable to do so .
Every time i execute that python program , I am getting error as
File "ind.py", line 280
dom = parseString(xmldata)
^
IndentationError: expected an indented block
I am very new to Python.I think that error is occuring due mismatch of
colon ( : ) or parameter xmldata fails.How to overcome this problem ?
Here by i am attaching ind_test.py ie python program file.
Please find the attachment and kindly solve this issue...
Thanks
Sandeep H S
#!/usr/bin/python
# Copyright IBM Corp. 2007
#
# indication_tester.py - Tool for testing indication subscription and
# delivery against a CIMOM
# Author: Dan Smith <[email protected]>
import sys
from optparse import OptionParser
import BaseHTTPServer
import httplib
import base64
from xml.dom.minidom import parse, parseString
def filter_xml(name, type, ns, sysname):
return """
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="CreateInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="PG_InterOp"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="NewInstance">
<INSTANCE CLASSNAME="CIM_IndicationFilter">
<PROPERTY NAME="SystemCreationClassName" TYPE="string">
<VALUE>CIM_ComputerSystem</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemName" TYPE="string">
<VALUE>%s</VALUE>
</PROPERTY>
<PROPERTY NAME="CreationClassName" TYPE="string">
<VALUE>CIM_IndicationFilter</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string">
<VALUE>%sFilter</VALUE>
</PROPERTY>
<PROPERTY NAME="Query" TYPE="string">
<VALUE> SELECT * FROM %s
</VALUE>
</PROPERTY>
<PROPERTY NAME="QueryLanguage" TYPE="string">
<VALUE>WQL</VALUE>
</PROPERTY>
<PROPERTY NAME="SourceNamespace" TYPE="string">
<VALUE>%s</VALUE>
</PROPERTY>
</INSTANCE>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
""" % (sysname, name, type, ns)
def handler_xml(name, port, sysname):
return """
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="CreateInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="PG_InterOp"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="NewInstance">
<INSTANCE CLASSNAME="CIM_IndicationHandlerCIMXML">
<PROPERTY NAME="SystemCreationClassName" TYPE="string">
<VALUE>CIM_ComputerSystem</VALUE>
</PROPERTY>
<PROPERTY NAME="SystemName" TYPE="string">
<VALUE>%s</VALUE>
</PROPERTY>
<PROPERTY NAME="CreationClassName" TYPE="string">
<VALUE>CIM_IndicationHandlerCIMXML</VALUE>
</PROPERTY>
<PROPERTY NAME="Name" TYPE="string">
<VALUE>%sHandler</VALUE>
</PROPERTY>
<PROPERTY NAME="Destination" TYPE="string">
<VALUE>http://localhost:%i</VALUE>
</PROPERTY>
</INSTANCE>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
""" % (sysname, name, port)
def subscription_xml(name, sysname):
return """
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="CreateInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="PG_InterOp"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="NewInstance">
<INSTANCE CLASSNAME="CIM_IndicationSubscription">
<PROPERTY.REFERENCE NAME="Filter"
REFERENCECLASS="CIM_IndicationFilter">
<VALUE.REFERENCE>
<INSTANCENAME CLASSNAME="CIM_IndicationFilter">
<KEYBINDING NAME="SystemCreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_ComputerSystem
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="SystemName">
<KEYVALUE VALUETYPE="string">
%s
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="CreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_IndicationFilter
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="Name">
<KEYVALUE VALUETYPE="string">
%sFilter
</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</VALUE.REFERENCE>
</PROPERTY.REFERENCE>
<PROPERTY.REFERENCE NAME="Handler"
REFERENCECLASS="CIM_IndicationHandler">
<VALUE.REFERENCE>
<INSTANCENAME CLASSNAME="CIM_IndicationHandlerCIMXML">
<KEYBINDING NAME="SystemCreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_ComputerSystem
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="SystemName">
<KEYVALUE VALUETYPE="string">
%s
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="CreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_IndicationHandlerCIMXML
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="Name">
<KEYVALUE VALUETYPE="string">
%sHandler
</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</VALUE.REFERENCE>
</PROPERTY.REFERENCE>
<PROPERTY NAME="SubscriptionState" TYPE="uint16">
<VALUE> 2 </VALUE>
</PROPERTY>
</INSTANCE>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>
""" % (sysname, name, sysname, name)
def delete_inst_xml(name, type, sysname, inst_name):
return """
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="DeleteInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="PG_InterOp"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="InstanceName">
<INSTANCENAME CLASSNAME="CIM_Indication%s">
<KEYBINDING NAME="SystemCreationClassName">
<KEYVALUE>CIM_ComputerSystem</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="SystemName">
<KEYVALUE>%s</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="CreationClassName">
<KEYVALUE>CIM_Indication%s</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="Name">
<KEYVALUE>%s</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>;
""" % (type, sysname, type, inst_name);
def delete_sub_xml(name, sysname):
return """
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="DeleteInstance">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="PG_InterOp"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="InstanceName">
<INSTANCENAME CLASSNAME="CIM_IndicationSubscription">
<KEYBINDING NAME="Filter">
<VALUE.REFERENCE>
<INSTANCENAME CLASSNAME="CIM_IndicationFilter">
<KEYBINDING NAME="SystemCreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_ComputerSystem
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="SystemName">
<KEYVALUE VALUETYPE="string">
%s
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="CreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_IndicationFilter
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="Name">
<KEYVALUE VALUETYPE="string">
%sFilter
</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</VALUE.REFERENCE>
</KEYBINDING>
<KEYBINDING NAME="Handler">
<VALUE.REFERENCE>
<INSTANCENAME CLASSNAME="CIM_IndicationHandlerCIMXML">
<KEYBINDING NAME="SystemCreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_ComputerSystem
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="SystemName">
<KEYVALUE VALUETYPE="string">
%s
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="CreationClassName">
<KEYVALUE VALUETYPE="string">
CIM_IndicationHandlerCIMXML
</KEYVALUE>
</KEYBINDING>
<KEYBINDING NAME="Name">
<KEYVALUE VALUETYPE="string">
%sHandler
</KEYVALUE>
</KEYBINDING>
</INSTANCENAME>
</VALUE.REFERENCE>
</KEYBINDING>
</INSTANCENAME>
</IPARAMVALUE>
</IMETHODCALL>
</SIMPLEREQ>
</MESSAGE>
</CIM>;
""" % (sysname, name, sysname, name)
class CIMIndication:
def __init__(self, xmldata):
dom = parseString(xmldata)
instances = dom.getElementsByTagName("INSTANCE")
attrs = instances[0].attributes.items()
self.name = attrs[0][1]
def __str__(self):
return self.name
class CIMSocketHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_POST(self):
length = self.headers.getheader('content-length')
data = self.rfile.read(int(length))
indication = CIMIndication(data)
print "Got indication: %s" % indication
if self.server.print_ind:
print "%s\n\n" % data
self.server.indications.append(indication)
class CIMIndicationSubscription:
def __init__(self, name, typ, ns, print_ind, sysname, port=0):
self.name = name
self.type = typ
self.ns = ns
self.sysname = sysname
self.port = 8000 + port
self.server = BaseHTTPServer.HTTPServer(('', self.port),
CIMSocketHandler)
self.server.print_ind = print_ind
self.server.indications = []
self.filter_xml = filter_xml(name, typ, ns, sysname)
self.handler_xml = handler_xml(name, self.port, sysname)
self.subscription_xml = subscription_xml(name, sysname)
def __do_cimpost(self, conn, body, method, auth_hdr=None):
headers = {"CIMOperation" : "MethodCall",
"CIMMethod" : method,
"CIMObject" : "root/PG_Interop",
"Content-Type" : 'application/xml; charset="utf-8"'}
if auth_hdr:
headers["Authorization"] = "Basic %s" % auth_hdr
conn.request("POST", "/cimom", body, headers)
resp = conn.getresponse()
if not resp.getheader("content-length"):
raise Exception("Request Failed: %d %s" %
(resp.status, resp.reason))
resp.read()
def subscribe(self, url, cred=None):
self.conn = httplib.HTTPConnection(url)
if cred:
(u, p) = cred
auth_hdr = base64.b64encode("%s:%s" % (u, p))
else:
auth_hdr = None
self.__do_cimpost(self.conn, self.filter_xml,
"CreateInstance", auth_hdr)
self.__do_cimpost(self.conn, self.handler_xml,
"CreateInstance", auth_hdr)
self.__do_cimpost(self.conn, self.subscription_xml,
"CreateInstance", auth_hdr)
def unsubscribe(self, cred=None):
if cred:
(u, p) = cred
auth_hdr = base64.b64encode("%s:%s" % (u, p))
else:
auth_hdr = None
xml = delete_sub_xml(self.name, self.sysname)
self.__do_cimpost(self.conn, xml,
"DeleteInstance", auth_hdr)
xml = delete_inst_xml(self.name, "HandlerCIMXML", self.sysname,
"%sHandler" % self.name)
self.__do_cimpost(self.conn, xml,
"DeleteInstance", auth_hdr)
xml = delete_inst_xml(self.name, "Filter", self.sysname,
"%sFilter" % self.name)
self.__do_cimpost(self.conn, xml,
"DeleteInstance", auth_hdr)
def dump_xml(name, typ, ns, sysname):
filter_str = filter_xml(name, typ, ns, sysname)
handler_str = handler_xml(name, 8000, sysname)
subscript_str = subscription_xml(name, sysname)
del_filter_str = delete_inst_xml(name, "Filter", sysname, "%sFilter" % name)
del_handler_str = delete_inst_xml(name, "HandlerCIMXML", sysname,
"%sHandler" % name)
del_subscript_str = delete_sub_xml(name, sysname)
print "CreateFilter:\n%s\n" % filter_str
print "DeleteFilter:\n%s\n" % del_filter_str
print "CreateHandler:\n%s\n" % handler_str
print "DeleteHandler:\n%s\n" % del_handler_str
print "CreateSubscription:\n%s\n" % subscript_str
print "DeleteSubscription:\n%s\n" % del_subscript_str
def main():
usage = "usage: %prog [options] provider\nex: %prog CIM_InstModification"
parser = OptionParser(usage)
parser.add_option("-u", "--url", dest="url", default="localhost:5988",
help="URL of CIMOM to connect to (host:port)")
parser.add_option("-N", "--ns", dest="ns", default="root/virt",
help="Namespace (default is root/virt)")
parser.add_option("-n", "--name", dest="name", default="Test",
help="Name for filter, handler, subscription \
(default: Test)")
parser.add_option("-d", "--dump-xml", dest="dump", default=False,
action="store_true",
help="Dump the xml that would be used and quit.")
parser.add_option("-p", "--print-ind", dest="print_ind", default=False,
action="store_true",
help="Print received indications to stdout.")
parser.add_option("-U", "--user", dest="username", default=None,
help="HTTP Auth username")
parser.add_option("-P", "--pass", dest="password", default=None,
help="HTTP Auth password")
parser.add_option("--port", dest="port", default=0, type=int,
help="Port increment value (server default: 8000)")
(options, args) = parser.parse_args()
if len(args) == 0:
print "Fatal: no indication type provided."
sys.exit(1)
if options.username:
auth = (options.username, options.password)
else:
auth = None
if ":" in options.url:
(sysname, port) = options.url.split(":")
else:
sysname = options.url
if options.dump:
dump_xml(options.name, args[0], options.ns, sysname)
sys.exit(0)
sub = CIMIndicationSubscription(options.name, args[0], options.ns,
options.print_ind, sysname, options.port)
sub.subscribe(options.url, auth)
print "Watching for %s" % args[0]
try:
sub.server.serve_forever()
except KeyboardInterrupt,e:
sub.unsubscribe(auth)
print "Cancelling subscription for %s" % args[0]
if __name__=="__main__":
sys.exit(main())
_______________________________________________
BangPypers mailing list
[email protected]
http://mail.python.org/mailman/listinfo/bangpypers