Пример #1
0
            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
Пример #2
0
            def unserializeValue(_type, value):
                """Восстанавливаем переменную из сериализованного значения
                """
                if type(_type) is Array:
                    return [unserializeValue(_type.elementType, val) for val in value]

                if issubclass(_type, Interface):
                    serializer = get_serializer(_type)
                    unservalue = serializer.unserialize(value)
                    return unservalue

                if _type is datetime:
                    return DateTime.fromISO(value)

                if type(value) is types.UnicodeType:
                    return value.encode('utf-8')

                return value
Пример #3
0
 def test_fromISO(self):
     self.assertEquals(datetime.datetime(2008, 06, 18, 10, 37, 33), DateTime.fromISO("20080618T10:37:33"))
Пример #4
0
 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))