получить данные из файла wsdl, используя zeep в python - PullRequest
1 голос
/ 03 мая 2020

У меня есть доступ к wsdl-файлу, и мне нужно получить в ответ список лекарств

, но я застрял с ним, и вот моя попытка


from zeep import Client
from requests.auth import HTTPBasicAuth  
from requests import Session
from zeep.transports import Transport

username = 'username'
password = 'password'
wsdl = 'wsdl link'

session = Session()
session.auth = HTTPBasicAuth(username, password)
cl = Client(wsdl,transport=Transport(session=session))
r = cl.service.getDrugList('DRUGSTATUS')
print(r['DRUGSTATUS'])

дает мне эту ошибку

zeep.exceptions.Fault: 80210

и когда я удаляю параметр из

r = cl.service.getDrugList()

, это выдает мне эту ошибку

raise exceptions.ValidationError(
zeep.exceptions.ValidationError: Missing element DRUGSTATUS (DrugListServiceRequest.DRUGSTATUS)

update

-

после запроса Mr. @ Tarique

по этой ссылке https://github.com/mvantellingen/python-zeep/issues/297#issuecomment -271803117 я использую ту же команду и выдаю мне тот же вывод для mzssp wsdl linke, потому что я нахожу проблема с аутентификацией и вот результат


Prefixes:
    xsd: http://www.w3.org/2001/XMLSchema
    ns0: http://org linke/DrugListService

Global elements:
    ns0:DrugListServiceRequest(ns0:drugListServiceRequest)
    ns0:DrugListServiceRequestType(ns0:drugListServiceRequest)
    ns0:DrugListServiceResponse(ns0:drugListServiceResponse)
    ns0:DrugListServiceResponseType(ns0:drugListServiceResponse)
    ns0:ServiceError(ns0:faultBean)
    ns0:drug(ns0:drug)
    ns0:supplier(ns0:supplier)


Global types:
    xsd:anyType
    ns0:drug(GTIN: xsd:string, DRUGNAME: xsd:string, DOMAINID: xsd:short, LEGALSTATUS: xsd:short, MARKETINGSTATUS: xsd:short, DRUGSTATUS: xsd:short, SUPPLIERLIST: {SUPPLIER: ns0:supplier[]}, ISIMPORTABLE: xsd:short, ISEXPORTABLE: xsd:short, REGISTRATIONNUMBER: xsd:string, GENERICNAME: xsd:string, PRICE: xsd:decimal, DOSAGEFORM: xsd:string, PACKAGESIZE: xsd:string, PACKAGETYPE: xsd:string, STRENGTHVALUE: xsd:string, STRENGTHVALUEUNIT: xsd:string, VOLUME: xsd:string, UNITOFVOLUME: xsd:string)
    ns0:drugListServiceRequest(DRUGSTATUS: xsd:string)
    ns0:drugListServiceResponse(DRUGLIST: {DRUG: ns0:drug[]})
    ns0:faultBean(FC: xsd:string)
    ns0:supplier(GLN: xsd:string, SUPPLIERNAME: xsd:string)
    xsd:ENTITIES
    xsd:ENTITY
    xsd:ID
    xsd:IDREF
    xsd:IDREFS
    xsd:NCName
    xsd:NMTOKEN
    xsd:NMTOKENS
    xsd:NOTATION
    xsd:Name
    xsd:QName
    xsd:anySimpleType
    xsd:anyURI
    xsd:base64Binary
    xsd:boolean
    xsd:byte
    xsd:date
    xsd:dateTime
    xsd:decimal
    xsd:double
    xsd:duration
    xsd:float
    xsd:gDay
    xsd:gMonth
    xsd:gMonthDay
    xsd:gYear
    xsd:gYearMonth
    xsd:hexBinary
    xsd:int
    xsd:integer
    xsd:language
    xsd:long
    xsd:negativeInteger
    xsd:nonNegativeInteger
    xsd:nonPositiveInteger
    xsd:normalizedString
    xsd:positiveInteger
    xsd:short
    xsd:string
    xsd:time
    xsd:token
    xsd:unsignedByte
    xsd:unsignedInt
    xsd:unsignedLong
    xsd:unsignedShort

Bindings:
    Soap11Binding: {http://org linke/DrugListService}DrugListServiceBinding

Service: DrugListService
    Port: DrugListService (Soap11Binding: {http://org linke/DrugListService}DrugListServiceBinding)
        Operations:
           getDrugList(DRUGSTATUS: xsd:string) -> DRUGLIST: {DRUG: ns0:drug[]}

None



1 Ответ

1 голос
/ 04 мая 2020

Спасибо за запрошенный вывод.

из определения: getDrugList(DRUGSTATUS: xsd:string) -> DRUGLIST: {DRUG: ns0:drug[]} похоже, что метод getDrugList принимает только 1 аргумент типа string и возвращает список drug элементов.

вы передаете аргумент 'DRUGSTATUS', который, я не уверен, является допустимым допустимым статусом для службы:

r = cl.service.getDrugList('DRUGSTATUS')

Вы должны вызвать метод следующим образом:

r = cl.service.getDrugList(DRUGSTATUS='some_status')
# where some_status is valid DRUGSTATUS string. It could be found in service docs or examples.

# then check the response status & content:
print(r.status_code)
print(r.content)

далее, если response является действительным ответом, тогда DRUGLIST можно распечатать, используя for l oop.

надеюсь, что это поможет

...