def get_spyne_type(v): """This function maps sqlalchemy types to spyne types.""" rpc_type = None if isinstance(v.type, sqlalchemy.Enum): if v.type.convert_unicode: rpc_type = Unicode(values=v.type.enums) else: rpc_type = Enum(*v.type.enums, **{'type_name': v.type.name}) elif isinstance(v.type, sqlalchemy.Unicode): rpc_type = Unicode(v.type.length) elif isinstance(v.type, sqlalchemy.String): rpc_type = String(v.type.length) elif isinstance(v.type, sqlalchemy.UnicodeText): rpc_type = Unicode elif isinstance(v.type, sqlalchemy.Text): rpc_type = String elif isinstance(v.type, (sqlalchemy.Numeric)): rpc_type = Decimal(v.type.precision, v.type.scale) elif type(v.type) in _sq2sp_type_map: rpc_type = _sq2sp_type_map[type(v.type)] else: raise Exception("soap_type was not found. maybe _type_map needs a " "new entry. %r" % v) return rpc_type
class InteropMisc(ServiceBase): @srpc(_returns=[ Integer, String, Integer, Array(Enum("MEMBER", type_name="RoleEnum")) ], _out_variable_names=[ 'resultCode', 'resultDescription', 'transactionId', 'roles' ]) def complex_return(): return [1, "Test", 123, ["MEMBER"]] @srpc(_returns=Integer) def huge_number(): return 2**int(1e5) @srpc(_returns=String) def long_string(): return ('0123456789abcdef' * 16384) @srpc() def test_empty(): pass @srpc(String, Integer, DateTime) def multi_param(s, i, dt): pass @srpc(NonNillableClass, _returns=String) def non_nillable(n): return "OK" @srpc(String, _returns=String, _operation_name="do_something") def do_something_else(s): return s @srpc(Integer, _returns=Array(OtherClass)) def return_other_class_array(num): for i in range(num): yield OtherClass(dt=datetime(2010, 12, 6), d=3.0, b=True) @srpc(_returns=Attachment) def return_binary_data(): return Attachment(data=''.join([chr(i) for i in range(256)])) @srpc(_returns=Integer) def return_invalid_data(): return 'a' @srpc( String, # FIXME: find out why this could be needed # _public_name="urn:#getCustomMessages", _in_message_name="getCustomMessagesMsgIn", _out_message_name="getCustomMessagesMsgOut", _out_variable_name="CustomMessages", _returns=String) def custom_messages(s): return s
vals = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', ] DaysOfWeekEnum = Enum( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', type_name='DaysOfWeekEnum', ) class SomeService(Service): @rpc(DaysOfWeekEnum, _returns=DaysOfWeekEnum) def get_the_day(self, day): return DaysOfWeekEnum.Sunday class SomeClass(ComplexModel): days = DaysOfWeekEnum(max_occurs=7)
u'Начало интересующего периода. Если не указан, принимается равным текущей дате' ) endDate = Date( doc=u'Окончание интересующего периода. ' u'Если не указано, то интерпретируется в зависимости от значения параметра startDate: ' u'если startDate находится в прошлом, то endDate принимается равным сегодняшней дате, ' u'в противном случае его значение определяется настройками МИС и временем, ' u'на которое планируется расписание.') hospitalUidFrom = String(doc=u'Идентификатор отправителя') def __init__(self): super(GetScheduleInfoRequest, self).__init__( doc=u'Получение обобщённой информации о расписании врача') Timeslot_Statuses = Enum("free", "locked", "unavailable", type_name="Statuses") class TimeslotStatus(ComplexModel): __namespace__ = SOAP_NAMESPACE timeslotStatus = Timeslot_Statuses def __init__(self, **kwargs): super(TimeslotStatus, self).__init__(doc=u'Состояние интервала времени в расписании', **kwargs) class Timeslot(ComplexModel): __namespace__ = SOAP_NAMESPACE