У меня есть эта функция с именем zms_add_bridge
, которая вызывает функцию с именем xmlbuilder
.xmlbuilder
создает глобальную переменную с именем xml
и заполняет ее материалом.
Когда вызывается zms_add_bridge
, он печатает «здесь», чтобы сказать, что он по крайней мере так далеко в сценарии.Затем он вызывает xmlbuilder
, который печатает «xml1» вместе с выводом xml, чтобы сказать, что он по крайней мере зашел так далеко в скрипте.
Проблема в том, что как только xmlbuilder завершает работу и возвращается к zms_add_bridgeсценарий, кажется, умирает.xml
- глобальная переменная, поэтому она должна печатать «да», но она даже не печатает «нет».
Я даже пытался return xml
в конце xmlbuilder
, чтобы посмотреть, будет ли этоработает, но это не сработало (и даже до сих пор, это было бы излишним, поскольку xml
было объявлено глобально, не так ли?)
Есть какие-нибудь подсказки?Я потерян.
def xmlbuilder(requestType,xbra):
global xmlbuild
global xmlbuild__request
global xmlbuild__requestElement
global xmlbuild__requestElementAttribute
global xml
xmlbuild = etree.Element("OSS", attrib={"{"+xsi+"}schemaLocation":schema}, nsmap={'xsi':xsi, None:xmlns})
xmlbuild__request = etree.SubElement(xmlbuild, "Request")
etree.SubElement(xmlbuild__request, "RequestType").text = requestType
etree.SubElement(xmlbuild__request, "RequestMode").text = "online"
etree.SubElement(xmlbuild__request, "SessionID").text = session_id
etree.SubElement(xmlbuild__request, "operName").text = apiUser
etree.SubElement(xmlbuild__request, "Version").text = version
etree.SubElement(xmlbuild__request, "Overwrite").text = "false"
xmlbuild__requestElement = etree.SubElement(xmlbuild, "RequestElement")
for index, data in xbra.items():
for key in data:
xmlbuild__requestElementAttribute = etree.SubElement(xmlbuild__requestElement, "Attribute")
etree.SubElement(xmlbuild__requestElementAttribute, "Name").text = "%s" % key
etree.SubElement(xmlbuild__requestElementAttribute, "Value").text = "%s" % data[key]
xml = etree.tostring(xmlbuild, encoding="UTF-8", pretty_print=True, xml_declaration=True)
if debug >= 1:
print "\nDEBUG: Generated XML for transmission\n"
print xml
print "xml1: " + xml
def zms_add_bridge(fsan,vlanId,maxUnicast,secure):
if debug >= 3:
print "\nDEBUG: Function: zms_add_bridge\n"
print "\nDEBUG: Get GPON parameters of ONT\n"
xbra = defaultdict(list)
xbra[1] = {'Filter_Type': 'GponOnuPhysical'}
xbra[2] = {'Filter_Condition': 'Device_Id=' + device_Handle_Id}
xbra[3] = {'Filter_Condition': 'serialNoVendorId=ZNTS'}
xbra[4] = {'Filter_Condition': 'serialNoVendorSpecificHex=' + fsan}
if debug >= 4:
print "\nDEBUG: Dictionary\n"
for index, data in xbra.items():
for key in data:
print "Index: %s: Key: %s, Value: %s" % (index, key,data[key])
print "here"
xmlbuilder("list",xbra)
if xml:
print "yes"
else:
print "no"
Вывод:
here
xml1: <?xml version='1.0' encoding='UTF-8'?>
<OSS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zhone.com/OSSXML" xsi:schemaLocation="http://www.zhone.com/OSSXML ossxml.xsd">
<Request>
<RequestType>list</RequestType>
<RequestMode>online</RequestMode>
<SessionID>0.379081153249641</SessionID>
<operName>boss</operName>
<Version>2.5.1</Version>
<Overwrite>false</Overwrite>
</Request>
<RequestElement>
<Attribute>
<Name>Filter_Type</Name>
<Value>GponOnuPhysical</Value>
</Attribute>
<Attribute>
<Name>Filter_Condition</Name>
<Value>Device_Id=2</Value>
</Attribute>
<Attribute>
<Name>Filter_Condition</Name>
<Value>serialNoVendorId=ZNTS</Value>
</Attribute>
<Attribute>
<Name>Filter_Condition</Name>
<Value>serialNoVendorSpecificHex=03739175</Value>
</Attribute>
</RequestElement>
</OSS>