代码之家  ›  专栏  ›  技术社区  ›  Adam

Zeep:通过类型检查预先验证

  •  0
  • Adam  · 技术社区  · 4 年前

    例如,我有元素:

    <element name="order_date" type="dateTime" minOccurs="1" maxOccurs="1"/>
    

    '1.0' 对于那个领域,泽普仍然接受。以后我会明白 zeep.exceptions.Fault 因为SOAP服务器拒绝我的请求是因为这个错误的类型,因为它必须是ISO格式的日期

    wsdl 归档 lxml 图书馆。这个很好用,但我不确定我是否正在使用 zeep 泽普

    我目前的处理方法是:

    # There are some missing variables, don't want to CP everything
    from lxml import etree as ET
    
    def get_xmlschema():
        wsdl_file = ...
        wsdl_tree = ET.fromstring(wsdl_file)
        return ET.XMLSchema(wsdl_tree.find('.//schema:schema', namespaces=NAMESPACES))
    
    
    def prevalidate_soap_message(client, operation, *args, **kwargs):
        # zeep checks only required elements and doesn't perform type checking
        msg = client.create_message(client.service, operation, *args, **kwargs)
        payload = msg.find('*/')
        get_xmlschema().assertValid(payload)
    

    这就是我发送有效载荷的方式:

    client = zeep.Client(wsdl)
    operation = client.service[operation_name]
    payload = ... # this is python object with structure as in wsdl schema for that operation
    result = operation(payload) # it raises ValidationError if elements are missing but not for types
    
    0 回复  |  直到 4 年前