def serializeValue(placer, _type, value): """ Сериализовать одно значение. Если значение является простым типом, оно записывается в результат. Если значение является объектом, поддерживающим интерфейс L{ISerializable}, то значением становится сериализованный объект. Если значение является массивом, его значением является массив сериализованных элементов. @param placer: функция, которая обеспечивает помещение сериализованного значения в результат @type placer: C{function(value)} @param _type: тип сериализуемого элемента @param value: сериализуемое значение @return: список L{twisted.internet.defer.Deferred}, по завершении которых результат будет построен @rtype: C{list} """ defer_list = [] if type(_type) is Array: placer = placerList(placer([])) for val in value: defer_list.extend(serializeValue(placer, _type.elementType, val)) elif issubclass(_type, Interface): d = value.serialize() d.addCallback(placer) defer_list.append(d) elif _type is datetime: placer(DateTime.toISO(value)) else: placer(value) return defer_list
def test_toISO(self): self.assertEquals("20080618T10:37:33", DateTime.toISO(datetime.datetime(2008, 06, 18, 10, 37, 33))) self.assertEquals(None, DateTime.toISO(None))