【问题标题】:How to describe element attributes with Spyne如何用 Spyne 描述元素属性
【发布时间】:2013-10-22 09:31:04
【问题描述】:

Spyne's hello world examples 我没问题,但是当涉及到更复杂的事情时,我面临缺乏文档和高级示例的问题。就我而言,我有一个接受这样的主体的服务方法

<OTA_HotelAvailRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0" TimeStamp="2005-08-01T09:30:47+02:00" EchoToken="fb57388d" AvailRatesOnly="true">
  <AvailRequestSegments>
    <AvailRequestSegment AvailReqType="Room">
      <HotelSearchCriteria>
        <Criterion>
          <HotelRef HotelCode="HOTEL1"/>
        </Criterion>
      </HotelSearchCriteria>
    </AvailRequestSegment>
  </AvailRequestSegments>
</OTA_HotelAvailRQ>

你能帮我实现一个接受这种请求的服务吗?

【问题讨论】:

    标签: python xml soap spyne


    【解决方案1】:

    在我的头顶:

    class HotelReference(ComplexModel):
        __namespace__ = 'http://www.opentravel.org/OTA/2003/05'
    
        HotelCode = XmlAttribute(Unicode)
    
    class Criterion(ComplexModel):
        __namespace__ = 'http://www.opentravel.org/OTA/2003/05'
    
        HotelRef = HotelReference
    
    class AvailRequestSegment(ComplexModel):
        __namespace__ = 'http://www.opentravel.org/OTA/2003/05'
    
        AvailReqType = XmlAttribute(Unicode(values=["Room", "House", "Condo", "Castle"]))
        HotelSearchCriteria = Criterion.customize(max_occurs='unbounded')
    
    class HotelAvailRQ(ComplexModel):
        __namespace__ = 'http://www.opentravel.org/OTA/2003/05'
    
        Version = XmlAttribute(Unicode)
        TimeStamp = XmlAttribute(DateTime)
        EchoToken = XmlAttribute(ByteArray)
        AvailRatesOnly XmlAttribute(Boolean)
    
        AvailRequestSegments = Array(AvailRequestSegment)
    

    【讨论】:

    • 好的,我知道了。现在,请求定义似乎很清楚,除了一件事。 The OTA_HotelAvailRQ 属性是必需的。我将它们描述为XmlAttribute(Mandatory.Unicode)。但是当我发布一个没有这些参数的请求时,验证意外通过了。
    • 这很可能是一个错误。请在github.com/arskom/spyne 发送一个拉取请求,其中包含一个检查预期 xml 架构输出的测试用例。
    • 这是我的拉取请求,通过测试来说明问题github.com/arskom/spyne/pull/297
    • 该错误已修复。解决方法是使用XmlAttribute(..., use='required')
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多