4

Python suds を使用して Cisco AXL ライブラリを操作しています。名前制限のある文字列の特別なインスタンスである simpleType を使用する必要がある関数を呼び出そうとしています。

WSDL を正常に解析した後、ファクトリを使用してオブジェクトを作成します。

 uuid = client.factory.create('ns0:XUUID')

これは、WSDL に付随する XSD で次のように定義されている次の XUUID オブジェクトのインスタンスです。

 <xsd:simpleType name="XUUID">
 <xsd:restriction base="xsd:string">
 <xsd:pattern value="\{........-....-....-....-............\}"/>
 </xsd:restriction>
 </xsd:simpleType>

uuid オブジェクトの値を設定したいので、次のすべてを試しましたが成功しませんでした:

 uuid.setText('{900AAAAC-E454-0B7E-07FD-FD67D48FF50E}')
 uuid.set('{900AAAAC-E454-0B7E-07FD-FD67D48FF50E}')

これがサブ要素を持つ complexType である場合、それらを設定できることは明らかです。たとえば、suds ドキュメントの Person.name です。このオブジェクトの値を設定する方法がわかりません。

オブジェクトの print dir(uuid) は、これについて間違った方法で行っている可能性があることを示唆しています。

 ['__contains__', '__delattr__', '__doc__', '__getitem__', '__init__', '__iter__', '__keylist__', '__len__', '__metadata__', '__module__', '__printer__', '__repr__', '__setattr__', '__setitem__', '__str__', '__unicode__']

何か基本的なことが抜けている場合や、suds の使い方が完全に間違っている場合に備えて、以下でもう少しコンテキストを説明します。

WSDL から次の関数を呼び出そうとしています。

 <operation name="getDevicePool">
   <input message="s0:getDevicePoolIn"/>
   <output message="s0:getDevicePoolOut"/>
 </operation>
 <message name="getDevicePoolIn">
   <part element="xsd1:getDevicePool" name="axlParams"/>
 </message>

次に、次の XSD 要素を参照します。

 <xsd:element name='getDevicePool' type='axlapi:GetDevicePoolReq'></xsd:element>

 <xsd:complexType name='GetDevicePoolReq'>
 <xsd:sequence>
 <xsd:choice>
 <xsd:element name='name' type='axlapi:String100'></xsd:element>
 <xsd:element name='uuid' type='axlapi:XUUID'></xsd:element></xsd:choice>
 <xsd:element name='returnedTags' type='axlapi:RDevicePool' minOccurs='0'></xsd:element></xsd:sequence><xsd:attribute use='optional' name='sequence' type='xsd:unsignedLong'></xsd:attribute></xsd:complexType>

私は、WSDL の別の関数でうまく機能するアプローチを試みました。

 searchCriteria = {
         'callManagerGroupName':'Default'
 }
 devicePools = client.service.listDevicePool(searchCriteria)

しかし、ここではうまくいきませんでした.UUID検索文字列をXUUIDタイプにする必要があるためだと思います.

4

1 に答える 1

1

ファクトリで作成されたオブジェクトには、オブジェクト属性を介して値が割り当てられます。私自身のコードの例として:

>>> api = gcs.provider.get_api()
>>> client = api.get_client(api.API_DOMAIN)
>>> ident = client.factory.create('ns0:Identification')
>>> ident
(Identification){
   token = None
   user = None
   userPasswd = None
   oper = None
   operPasswd = None
   language = None
 }
>>> ident.user = 'Jeremy'
>>> ident
(Identification){
   token = None
   user = "Jeremy"
   userPasswd = None
   oper = None
   operPasswd = None
   language = None
 }
>>> setattr(ident, 'user', 'Lewis')
>>> ident
(Identification){
   token = None
   user = "Lewis"
   userPasswd = None
   oper = None
   operPasswd = None
   language = None
 }

uuid オブジェクトを出力して属性の名前を確認し、値を割り当てるだけでよいはずです。

于 2013-03-09T01:56:25.310 に答える