Как описать атрибуты элемента с помощью Spyne

Я согласен с примерами приветствия 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>

Можете ли вы помочь мне реализовать службу, которая принимает такие запросы?


person Anton Egorov    schedule 22.10.2013    source источник


Ответы (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)
person Burak Arslan    schedule 22.10.2013
comment
Ладно, я понял. Теперь с определением запроса все ясно, за исключением одного. Атрибуты The OTA_HotelAvailRQ являются обязательными. Я описал их как XmlAttribute(Mandatory.Unicode). Но когда я отправляю запрос без этих аргументов, проверка неожиданно прошла. - person Anton Egorov; 22.10.2013
comment
Скорее всего это баг. Отправьте запрос на вытягивание по адресу github.com/arskom/spyne с тестовым примером, который проверяет ожидаемые вывод схемы xml. - person Burak Arslan; 23.10.2013
comment
Вот мой пул-реквест с тестами для иллюстрации проблемы github.com/arskom/spyne/pull/297 - person Anton Egorov; 23.10.2013
comment
Ошибка исправлена. Обходной путь — использовать XmlAttribute(..., use='required') - person Burak Arslan; 24.10.2013
comment
Не могли бы вы помочь с этим, пожалуйста, stackoverflow.com/questions/19536282/ - person Anton Egorov; 24.10.2013