Пример #1
0
    def testEncoderWithoutResetAndSequenceFields(self):
        fields = [
            FieldMetaInfo('name', FieldMetaType.string, FieldMetaSpecial.none),
            FieldMetaInfo('timestamp', FieldMetaType.datetime,
                          FieldMetaSpecial.timestamp),
            FieldMetaInfo('integer', FieldMetaType.integer,
                          FieldMetaSpecial.none),
            FieldMetaInfo('real', FieldMetaType.float, FieldMetaSpecial.none),
            FieldMetaInfo('categories', FieldMetaType.list,
                          FieldMetaSpecial.category)
        ]

        encoder = ModelRecordEncoder(fields=fields)

        result = encoder.encode(
            ['rec_1',
             datetime(day=1, month=3, year=2010), 5, 6.5, [0, 1, 2]])

        self.assertEqual(
            result, {
                'name': 'rec_1',
                'timestamp': datetime(2010, 3, 1, 0, 0),
                'integer': 5,
                'real': 6.5,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 0,
                '_sequenceId': 0,
                '_timestamp': datetime(2010, 3, 1, 0, 0),
                '_timestampRecordIdx': None
            })

        # One more time to verify that sequence id is still 0
        result = encoder.encode(
            ['rec_2',
             datetime(day=2, month=3, year=2010), 5, 6.5, [0, 1, 2]])

        self.assertEqual(
            result, {
                'name': 'rec_2',
                'timestamp': datetime(2010, 3, 2, 0, 0),
                'integer': 5,
                'real': 6.5,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 0,
                '_sequenceId': 0,
                '_timestamp': datetime(2010, 3, 2, 0, 0),
                '_timestampRecordIdx': None
            })
Пример #2
0
    def testEncoderWithSequenceAndResetFields(self):
        fields = [
            FieldMetaInfo('name', FieldMetaType.string, FieldMetaSpecial.none),
            FieldMetaInfo('timestamp', FieldMetaType.datetime,
                          FieldMetaSpecial.timestamp),
            FieldMetaInfo('integer', FieldMetaType.integer,
                          FieldMetaSpecial.none),
            FieldMetaInfo('real', FieldMetaType.float, FieldMetaSpecial.none),
            FieldMetaInfo('reset', FieldMetaType.integer,
                          FieldMetaSpecial.reset),
            FieldMetaInfo('sid', FieldMetaType.string,
                          FieldMetaSpecial.sequence),
            FieldMetaInfo('categories', FieldMetaType.list,
                          FieldMetaSpecial.category)
        ]

        encoder = ModelRecordEncoder(fields=fields)

        result = encoder.encode([
            'rec_1',
            datetime(day=1, month=3, year=2010), 5, 6.5, 1, 99, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_1',
                'timestamp': datetime(2010, 3, 1, 0, 0),
                'integer': 5,
                'real': 6.5,
                'reset': 1,
                'sid': 99,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 99,
                '_timestamp': datetime(2010, 3, 1, 0, 0),
                '_timestampRecordIdx': None
            })
Пример #3
0
    def testEncoderWithResetFieldWithoutSequenceField(self):
        fields = [
            FieldMetaInfo('name', FieldMetaType.string, FieldMetaSpecial.none),
            FieldMetaInfo('timestamp', FieldMetaType.datetime,
                          FieldMetaSpecial.timestamp),
            FieldMetaInfo('integer', FieldMetaType.integer,
                          FieldMetaSpecial.none),
            FieldMetaInfo('real', FieldMetaType.float, FieldMetaSpecial.none),
            FieldMetaInfo('reset', FieldMetaType.integer,
                          FieldMetaSpecial.reset),
            FieldMetaInfo('categories', FieldMetaType.list,
                          FieldMetaSpecial.category)
        ]

        encoder = ModelRecordEncoder(fields=fields)

        result = encoder.encode([
            'rec_1',
            datetime(day=1, month=3, year=2010), 5, 6.5, 1, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_1',
                'timestamp': datetime(2010, 3, 1, 0, 0),
                'integer': 5,
                'real': 6.5,
                'reset': 1,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 0,
                '_timestamp': datetime(2010, 3, 1, 0, 0),
                '_timestampRecordIdx': None
            })

        # One more time to verify incremeting sequence id
        result = encoder.encode([
            'rec_2',
            datetime(day=2, month=3, year=2010), 5, 6.5, 1, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_2',
                'timestamp': datetime(2010, 3, 2, 0, 0),
                'integer': 5,
                'real': 6.5,
                'reset': 1,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 1,
                '_timestamp': datetime(2010, 3, 2, 0, 0),
                '_timestampRecordIdx': None
            })

        # Now with reset turned off, expecting no change to sequence id
        result = encoder.encode([
            'rec_3',
            datetime(day=3, month=3, year=2010), 5, 6.5, 0, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_3',
                'timestamp': datetime(2010, 3, 3, 0, 0),
                'integer': 5,
                'real': 6.5,
                'reset': 0,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 0,
                '_sequenceId': 1,
                '_timestamp': datetime(2010, 3, 3, 0, 0),
                '_timestampRecordIdx': None
            })

        # Now check that rewind resets sequence id
        encoder.rewind()
        result = encoder.encode([
            'rec_4',
            datetime(day=4, month=3, year=2010), 5, 6.5, 1, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_4',
                'timestamp': datetime(2010, 3, 4, 0, 0),
                'integer': 5,
                'real': 6.5,
                'reset': 1,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 0,
                '_timestamp': datetime(2010, 3, 4, 0, 0),
                '_timestampRecordIdx': None
            })
Пример #4
0
 def testEmptyFieldsArgRaisesValueErrorInConstructor(self):
     with self.assertRaises(ValueError):
         ModelRecordEncoder(fields=[])
Пример #5
0
    def testEncoderWithSequenceFieldWithoutResetField(self):
        fields = [
            FieldMetaInfo('name', FieldMetaType.string, FieldMetaSpecial.none),
            FieldMetaInfo('timestamp', FieldMetaType.datetime,
                          FieldMetaSpecial.timestamp),
            FieldMetaInfo('integer', FieldMetaType.integer,
                          FieldMetaSpecial.none),
            FieldMetaInfo('real', FieldMetaType.float, FieldMetaSpecial.none),
            FieldMetaInfo('sid', FieldMetaType.string,
                          FieldMetaSpecial.sequence),
            FieldMetaInfo('categories', FieldMetaType.list,
                          FieldMetaSpecial.category)
        ]

        encoder = ModelRecordEncoder(fields=fields)

        # _reset should be 1 the first time
        result = encoder.encode([
            'rec_1',
            datetime(day=1, month=3, year=2010), 5, 6.5, 99, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_1',
                'timestamp': datetime(2010, 3, 1, 0, 0),
                'integer': 5,
                'real': 6.5,
                'sid': 99,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 99,
                '_timestamp': datetime(2010, 3, 1, 0, 0),
                '_timestampRecordIdx': None
            })

        # _reset should be 0 when same sequence id is repeated
        result = encoder.encode([
            'rec_2',
            datetime(day=2, month=3, year=2010), 5, 6.5, 99, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_2',
                'timestamp': datetime(2010, 3, 2, 0, 0),
                'integer': 5,
                'real': 6.5,
                'sid': 99,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 0,
                '_sequenceId': 99,
                '_timestamp': datetime(2010, 3, 2, 0, 0),
                '_timestampRecordIdx': None
            })

        # _reset should be 1 when sequence id changes
        result = encoder.encode([
            'rec_3',
            datetime(day=2, month=3, year=2010), 5, 6.5, 100, [0, 1, 2]
        ])

        self.assertEqual(
            result, {
                'name': 'rec_3',
                'timestamp': datetime(2010, 3, 2, 0, 0),
                'integer': 5,
                'real': 6.5,
                'sid': 100,
                'categories': [0, 1, 2],
                '_category': [0, 1, 2],
                '_reset': 1,
                '_sequenceId': 100,
                '_timestamp': datetime(2010, 3, 2, 0, 0),
                '_timestampRecordIdx': None
            })