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 })
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 })
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 })
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 })
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 })
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 })
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 })
def testEmptyFieldsArgRaisesValueErrorInConstructor(self): with self.assertRaises(ValueError): ModelRecordEncoder(fields=[])
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 })