Как реализовать абстрактную модель в Spyne

Мне нужно реализовать абстрактную модель с помощью Spyne.

На самом деле, скажем - в качестве простого примера - что я хочу управлять гаражным бизнесом.

У меня тогда есть следующие классы:

class Vehicle(ComplexModel):
     ''' this class is abstract '''
     _type_info = [
         ('owner',Unicode)
     ]

class Car(Vehicle):
    _type_info = [
        ('color',Unicode),
        ('speed',Integer)
    ]

class Bike(Vehicle):
    _type_info = [
        ('size',Integer)
    ]

class Garage(ComplexModel):

    _type_info = [
        ('vehicles',Array(Vehicle))
    ]

Когда я захочу, чтобы все транспортные средства управлялись моим гаражом, я получу только их свойства автомобиля (он же здесь владелец), а не другие.

Есть ли способ управлять абстрактными объектами с помощью Spyne?

Конечно, простой подход будет иметь:

class Garage(ComplexModel):

    _type_info = [
        ('bikes',Array(Bike)),
        ('cars',Array(Car))
    ]

но мне это не нравится: если я это сделаю, мне придется менять свой класс "Гараж" каждый раз, когда я создаю новый класс "Автомобиль"... Я хочу, чтобы мой класс "Гараж" управлял транспортными средствами, независимо от того, какой это тип транспортных средств. является. Является ли это возможным?

1 ответ

Решение

В Spyne 2.12.1-бета выходной полиморфизм должен работать (если он включен для выходного протокола) с Array(Vehicle) синтаксис.

Пожалуйста, посмотрите рабочий пример здесь: https://github.com/arskom/spyne/blob/a2d0edd3be5bc0385548f5212b7b4b6d674fd610/examples/xml/polymorphic_array.py

Другие вопросы по тегам