jethrocarr / namedmanager

AGPL web-based DNS management interface in PHP
349 stars 125 forks source link

SOAP Service Cannot used in python #67

Closed senseab closed 2 years ago

senseab commented 7 years ago

here is my code using suds with python

#!/usr/bin/env python2

from suds.client import Client

c = Client('http://localhost/namedmanager/api/namedmanager.wsdl')

print c

it cannot work with exception

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    c = Client('http://localhost/namedmanager/api/namedmanager.wsdl')
  File "/usr/lib/python2.6/site-packages/suds/client.py", line 112, in __init__
    self.wsdl = reader.open(url)
  File "/usr/lib/python2.6/site-packages/suds/reader.py", line 152, in open
    d = self.fn(url, self.options)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 151, in __init__
    self.add_children(self.root)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 177, in add_children
    child = Factory.create(c, self)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 920, in create
    return fn(root, definitions)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 435, in __init__
    part = Part(p, definitions)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 407, in __init__
    self.type = self.__getref('type', tns)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 415, in __getref
    return qualify(s, self.root, tns)
  File "/usr/lib/python2.6/site-packages/suds/xsd/__init__.py", line 56, in qualify
    raise Exception('prefix (%s) not resolved' % p)
Exception: prefix (xsd1) not resolved

So is there any way to solve this?

blackher commented 2 years ago

here is my code using suds with python

#!/usr/bin/env python2

from suds.client import Client

c = Client('http://localhost/namedmanager/api/namedmanager.wsdl')

print c

it cannot work with exception

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    c = Client('http://localhost/namedmanager/api/namedmanager.wsdl')
  File "/usr/lib/python2.6/site-packages/suds/client.py", line 112, in __init__
    self.wsdl = reader.open(url)
  File "/usr/lib/python2.6/site-packages/suds/reader.py", line 152, in open
    d = self.fn(url, self.options)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 151, in __init__
    self.add_children(self.root)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 177, in add_children
    child = Factory.create(c, self)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 920, in create
    return fn(root, definitions)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 435, in __init__
    part = Part(p, definitions)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 407, in __init__
    self.type = self.__getref('type', tns)
  File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 415, in __getref
    return qualify(s, self.root, tns)
  File "/usr/lib/python2.6/site-packages/suds/xsd/__init__.py", line 56, in qualify
    raise Exception('prefix (%s) not resolved' % p)
Exception: prefix (xsd1) not resolved

So is there any way to solve this?

I try to rewrite the wsdl file: add xmlns:xsd1="http://example.com/stockquote/schemas" to the definitions part & rewrite the fetch_domains fetch_records part

<?xml version='1.0' encoding='UTF-8'?> <definitions name="namedmanager" targetNamespace="https://target/namedmanager/api/namedmanager.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="https://target/namedmanager/api/namedmanager.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://example.com/stockquote/schemas"

<types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="https://target/namedmanager/api/namedmanager.wsdl"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
        <complexType name="fetch_domains_rows">
            <all>
                <element name="id" type="xsd:int"/>
                <element name="domain_name" type="xsd:string"/>
                <element name="domain_description" type="xsd:string"/>
                <element name="soa_hostmaster" type="xsd:string"/>
                <element name="soa_serial" type="xsd:int"/>
                <element name="soa_refresh" type="xsd:int"/>
                <element name="soa_retry" type="xsd:int"/>
                <element name="soa_expire" type="xsd:int"/>
                <element name="soa_default_ttl" type="xsd:int"/>
                <element name="soa_ns_primary" type="xsd:string"/>
            </all>
        </complexType>
        <complexType name="fetch_domains">
            <sequence>
                <element name="rows" type="tns:fetch_domains_rows" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
        <complexType name="fetch_records_rows">
            <all>
                <element name="id_record" type="xsd:int"/>
                <element name="record_name" type="xsd:string"/>
                <element name="record_type" type="xsd:string"/>
                <element name="record_content" type="xsd:string"/>
                <element name="record_ttl" type="xsd:int"/>
                <element name="record_prio" type="xsd:int"/>
            </all>
        </complexType>

        <complexType name="fetch_records">

                <sequence>
                    <element name="rows" type="tns:fetch_records_rows" minOccurs="0" maxOccurs="unbounded"/>
                </sequence>

        </complexType>

    </schema>
</types>

<message name='authenticate_request'>
    <part name='server_name' type='xsd:string'/>
    <part name='api_auth_key' type='xsd:string'/>
</message>

<message name='authenticate_response'>
    <part name='return' type='xsd:int'/>
</message>

<message name='log_write_request'>
    <part name='timestamp' type='xsd:int'/>
    <part name='log_type' type='xsd:string'/>
    <part name='log_content' type='xsd:string'/>
</message>

<message name='log_write_response'>
    <part name='return' type='xsd:int'/>
</message>

<message name='check_update_version_response'>
    <part name='version' type='xsd:int'/>
</message>

<message name='set_update_version_request'>
    <part name='version' type='xsd:int'/>
</message>

<message name='set_update_version_response'>
    <part name='return' type='xsd:int'/>
</message>

<message name='update_record_request'>
    <part name="id_domain" type="xsd:int"/>
    <part name="id_record" type="xsd:int"/>
    <part name="record_name" type="xsd:string"/>
    <part name="record_type" type="xsd:string"/>
    <part name="record_content" type="xsd:string"/>
    <part name="record_ttl" type="xsd:int"/>
    <part name="record_prio" type="xsd:int"/>
</message>

<message name='update_record_response'>
    <part name='return' type='xsd:int'/>
</message>

<message name='update_serial_request'>
    <part name='id_domain' type='xsd:int'/>
</message>

<message name='update_serial_response'>
    <part name='soa_serial' type='xsd:int'/>
</message>

<message name='fetch_domains_response'>
    <part name='return' element='xsd1:fetch_domains'/>
</message>

<message name='fetch_records_request'>
    <part name='domain_id' type='xsd:int'/>
</message>

<message name='fetch_records_response'>
    <part name='return' element='xsd1:fetch_records'/>
</message>

<portType name='namedmanager_porttype'>
    <operation name='authenticate'>
        <input message='tns:authenticate_request'/>
        <output message='tns:authenticate_response'/>
    </operation>

    <operation name='log_write'>
        <input message='tns:log_write_request'/>
        <output message='tns:log_write_response'/>
    </operation>

    <operation name='check_update_version'>
        <output message='tns:check_update_version_response'/>
    </operation>

    <operation name='set_update_version'>
        <input message='tns:set_update_version_request'/>
        <output message='tns:set_update_version_response'/>
    </operation>

    <operation name='update_record'>
        <input message='tns:update_record_request'/>
        <output message='tns:update_record_response'/>
    </operation>

    <operation name='update_serial'>
        <input message='tns:update_serial_request'/>
        <output message='tns:update_serial_response'/>
    </operation>

    <operation name='fetch_domains'>
        <output message='tns:fetch_domains_response'/>
    </operation>

    <operation name='fetch_records'>
        <input message='tns:fetch_records_request'/>
        <output message='tns:fetch_records_response'/>
    </operation>

</portType>

<binding name='namedmanager_binding' type='tns:namedmanager_porttype'>
    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>

    <operation name='authenticate'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>

        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='log_write'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>

        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='check_update_version'>
        <soap:operation soapAction='namedmanager'/>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='set_update_version'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='update_serial'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='update_record'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='fetch_domains'>
        <soap:operation soapAction='namedmanager'/>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

    <operation name='fetch_records'>
        <soap:operation soapAction='namedmanager'/>
        <input>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>
        <output>
            <soap:body use='encoded' namespace='urn:amberdms:namedmanager' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>

</binding>