2013-10-22 179 views
1

我對Spyne's hello world examples可以,但是當涉及到更復雜的事情時,我面臨缺乏文檔和高級示例的問題。在我的情況我有一個接受身體這樣如何用Spyne描述元素屬性

<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> 

服務方法,你可以幫我實現接受此類請求的服務?

回答

3

關閉我的頭頂:

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) 
+0

好吧,我知道了。現在看起來很清楚,請求定義除了一件事外。 'OTA_HotelAvailRQ'屬性是強制性的。我將它們描述爲'XmlAttribute(Mandatory.Unicode)'。但是當我發佈一個沒有這些參數驗證意外傳遞的請求時。 –

+1

這可能是一個錯誤。請在http://github.com/arskom/spyne發送一個拉取請求,用一個測試用例來檢查預期的xml模式輸出。 –

+0

這裏是我的拉測試請求,用以說明問題https://github.com/arskom/spyne/pull/297 –