Пример #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 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
            })
Пример #3
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 })
Пример #4
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
            })
Пример #5
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 })
Пример #6
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 })
Пример #7
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
            })
Пример #8
0
 def testEmptyFieldsArgRaisesValueErrorInConstructor(self):
     with self.assertRaises(ValueError):
         ModelRecordEncoder(fields=[])
Пример #9
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
            })