def test_bulk_create(self):
     fields = {
         'time': 'timestamp',
         'value': 'float',
         'flags': 'integer',
         'note': 'string'
     }
     output = models.AppOutput.objects.create(pk=400)
     model = sensorstore.get_data_model(output, 5, fields)
     self.assertTrue(dyn.table_exists(model))
     items = [
         model(time=now(), value=float(i), note='Testing {}'.format(i))
         for i in range(5)
     ]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
     output = models.AppOutput.objects.create(pk=401)
     model = sensorstore.get_data_model(output, 5, fields)
     self.assertTrue(dyn.table_exists(model))
     items = [
         model(time=now(), value=float(i), note='Testing {}'.format(i))
         for i in range(5)
     ]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
 def test_bulk_create(self):
     output = self._create_output(400)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     items = [model(time=now(), value=float(i), note='Testing {}'.format(i))
              for i in range(5)]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
     output = self._create_output(401)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     items = [model(time=now(), value=float(i), note='Testing {}'.format(i))
              for i in range(5)]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
    def test_get_data_model(self):
        def tolist(objs):
            result = [(x.pk, x.source.id, x.time, x.value, x.flags, x.note)
                      for x in objs]
            result.sort()
            return result

        fields = {
            'time': 'timestamp',
            'value': 'float',
            'flags': 'integer',
            'note': 'string'
        }
        output = models.AppOutput.objects.create(pk=300)
        model = sensorstore.get_data_model(output, 5, fields)
        self.assertTrue(dyn.table_exists(model))
        items = tolist(
            model.objects.create(
                time=now(), value=float(i), note='Testing {}'.format(i))
            for i in range(5))
        objs = tolist(model.objects.all())
        self.assertEqual(objs, items)
        model = sensorstore.get_data_model(output, 5, fields)
        objs = tolist(model.objects.all())
        self.assertEqual(objs, items)
示例#4
0
 def test_bulk_create(self):
     output = self._create_output(400)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     items = [
         model(time=now(), value=float(i), note='Testing {}'.format(i))
         for i in range(5)
     ]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
     output = self._create_output(401)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     items = [
         model(time=now(), value=float(i), note='Testing {}'.format(i))
         for i in range(5)
     ]
     model.objects.bulk_create(items)
     self.assertEqual(model.objects.count(), 5)
 def test_create_insert(self):
     '''Test table creation and insertion'''
     output = self._create_output(200)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     model.objects.create(source=output, time=now(),
                          value=12.34, note='Testing')
     self.assertEqual(model.objects.count(), 1)
     item = model.objects.create(source=output, time=now(),
                                 value=2.345, note='Testing again')
     self.assertEqual(model.objects.count(), 2)
     item = model.objects.get(pk=item.id)
     self.assertEqual(item.value, 2.345)
     self.assertEqual(item.note, 'Testing again')
 def test_get_data_model(self):
     def tolist(objs):
         result = [(x.pk, x.source.id, x.time, x.value, x.flags, x.note)
                   for x in objs]
         result.sort()
         return result
     output = self._create_output(300)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     items = tolist(model.objects.create(time=now(), value=float(i),
              note='Testing {}'.format(i)) for i in range(5))
     objs = tolist(model.objects.all())
     self.assertEqual(objs, items)
     model = output.get_data_model()
     objs = tolist(model.objects.all())
     self.assertEqual(objs, items)
示例#7
0
 def test_create_insert(self):
     '''Test table creation and insertion'''
     output = self._create_output(200)
     model = output.get_data_model()
     self.assertTrue(dyn.table_exists(model))
     model.objects.create(source=output,
                          time=now(),
                          value=12.34,
                          note='Testing')
     self.assertEqual(model.objects.count(), 1)
     item = model.objects.create(source=output,
                                 time=now(),
                                 value=2.345,
                                 note='Testing again')
     self.assertEqual(model.objects.count(), 2)
     item = model.objects.get(pk=item.id)
     self.assertEqual(item.value, 2.345)
     self.assertEqual(item.note, 'Testing again')
示例#8
0
    def test_get_data_model(self):
        def tolist(objs):
            result = [(x.pk, x.source.id, x.time, x.value, x.flags, x.note)
                      for x in objs]
            result.sort()
            return result

        output = self._create_output(300)
        model = output.get_data_model()
        self.assertTrue(dyn.table_exists(model))
        items = tolist(
            model.objects.create(
                time=now(), value=float(i), note='Testing {}'.format(i))
            for i in range(5))
        objs = tolist(model.objects.all())
        self.assertEqual(objs, items)
        model = output.get_data_model()
        objs = tolist(model.objects.all())
        self.assertEqual(objs, items)
 def test_create_insert(self):
     '''Test table creation and insertion'''
     user = models.User.objects.create(username='******')
     project = models.Project.objects.create(
             name='Dynamic Model Test', owner=user)
     output = models.AppOutput.objects.create(pk=200)
     fields = {'time': 'timestamp', 'value': 'float',
               'flags': 'integer', 'note': 'string'}
     model = sensorstore.get_data_model(output, project.pk, fields)
     self.assertTrue(dyn.table_exists(model))
     model.objects.create(source=output, time=now(),
                          value=12.34, note='Testing')
     self.assertEqual(model.objects.count(), 1)
     item = model.objects.create(source=output, time=now(),
                                 value=2.345, note='Testing again')
     self.assertEqual(model.objects.count(), 2)
     item = model.objects.get(pk=item.id)
     self.assertEqual(item.value, 2.345)
     self.assertEqual(item.note, 'Testing again')
示例#10
0
    def test_table_naming(self):
        '''Test that table and fields are properly named and ordered.

        The table signature is based on the numer and types of fields.
        Changing the order of the fields or their names should have no
        effect on the table signature. However, changing the number of
        fields or their types will change the model.

        This test also checks creating fields using lists, dictionaries,
        and iterators.
        '''
        fields = [('test0', 'datetime'), ('test1', 'string'),
                  ('test2', 'datetime'), ('test3', 'float'),
                  ('test4', 'integer'),
                  ('test5', 'integer'), ('test6', 'float'), ('test7', 'float'),
                  ('test8', 'datetime'), ('test9', 'datetime')]
        expect = [('id', None, 'AutoField'), ('source', None, 'ForeignKey'),
                  ('test0', 'field0', 'DateTimeField'),
                  ('test2', 'field1', 'DateTimeField'),
                  ('test8', 'field2', 'DateTimeField'),
                  ('test9', 'field3', 'DateTimeField'),
                  ('test3', 'field4', 'FloatField'),
                  ('test6', 'field5', 'FloatField'),
                  ('test7', 'field6', 'FloatField'),
                  ('test4', 'field7', 'IntegerField'),
                  ('test5', 'field8', 'IntegerField'),
                  ('test1', 'field9', 'TextField')]

        def check_names(table_id,
                        fields,
                        project_id=131,
                        table_name='appoutputdata_131_4d3f2i1s'):
            attrs = {
                'source':
                models.models.ForeignKey(models.AppOutput, related_name='+')
            }
            model = dyn.create_model('AppOutputData' + str(table_id),
                                     'appoutputdata', project_id, fields,
                                     attrs)
            self.assertEqual(model._meta.db_table, table_name)
            self.assertEqual([(f.name, f.db_column, f.__class__.__name__)
                              for f in model._meta.fields], expect)
            return model

        def test_create(model):
            self.assertFalse(dyn.table_exists(model))
            dyn.create_table(model)
            self.assertTrue(dyn.table_exists(model))

        # Test model generation with the same fields in different orders
        # and by different values.
        model1 = check_names(100, fields)
        fields.reverse()
        self.assertTrue(check_names(100, iter(fields)) is model1)
        random.shuffle(fields)
        self.assertTrue(check_names(100, dict(fields)) is model1)
        test_create(model1)
        self.assertFalse(check_names(101, fields) is model1)

        # Test model with different field names, but same signature.
        for i, (name, field_type) in enumerate(fields):
            fields[i] = ('x' + name, field_type)
        for i, (name, db_column, field_class) in enumerate(expect):
            expect[i] = (('x' + name if name.startswith('test') else name),
                         db_column, field_class)
        model2 = check_names(102, fields)
        self.assertFalse(model2 is model1)
        self.assertTrue(dyn.table_exists(model2))

        # Remove a field and test that the model differs from previous
        # models.
        fields.remove(('xtest5', 'integer'))
        expect[-2:] = [('xtest1', 'field8', 'TextField')]
        model3 = check_names(103,
                             fields,
                             table_name='appoutputdata_131_4d3f1i1s')
        self.assertFalse(model3 is model1)
        self.assertFalse(model3 is model2)
        test_create(model3)

        # Changing only the project_id should result in a new model
        model4 = check_names(104, fields, 241, 'appoutputdata_241_4d3f1i1s')
        self.assertFalse(model4 is model3)
        test_create(model4)
示例#11
0
 def test_create(model):
     self.assertFalse(dyn.table_exists(model))
     dyn.create_table(model)
     self.assertTrue(dyn.table_exists(model))
    def test_table_naming(self):
        '''Test that table and fields are properly named and ordered.

        The table signature is based on the numer and types of fields.
        Changing the order of the fields or their names should have no
        effect on the table signature. However, changing the number of
        fields or their types will change the model.

        This test also checks creating fields using lists, dictionaries,
        and iterators.
        '''
        fields = [('test0', 'datetime'), ('test1', 'string'),
                  ('test2', 'datetime'), ('test3', 'float'),
                  ('test4', 'integer'), ('test5', 'integer'),
                  ('test6', 'float'), ('test7', 'float'),
                  ('test8', 'datetime'), ('test9', 'datetime')]
        expect = [('id', None, 'AutoField'), ('source', None, 'ForeignKey'),
                  ('test0', 'field0', 'DateTimeField'),
                  ('test2', 'field1', 'DateTimeField'),
                  ('test8', 'field2', 'DateTimeField'),
                  ('test9', 'field3', 'DateTimeField'),
                  ('test3', 'field4', 'FloatField'),
                  ('test6', 'field5', 'FloatField'),
                  ('test7', 'field6', 'FloatField'),
                  ('test4', 'field7', 'IntegerField'),
                  ('test5', 'field8', 'IntegerField'),
                  ('test1', 'field9', 'TextField')]

        def check_names(table_id, fields, project_id=131,
                        table_name='appoutputdata_131_4d3f2i1s'):
            attrs = {'source': models.models.ForeignKey(
                        models.AppOutput, related_name='+')}
            model = dyn.create_model('AppOutputData' + str(table_id),
                                     'appoutputdata', project_id, fields, attrs)
            self.assertEqual(model._meta.db_table, table_name)
            self.assertEqual([(f.name, f.db_column, f.__class__.__name__)
                              for f in model._meta.fields], expect)
            return model

        def test_create(model):
            self.assertFalse(dyn.table_exists(model))
            dyn.create_table(model)
            self.assertTrue(dyn.table_exists(model))

        # Test model generation with the same fields in different orders
        # and by different values.
        model1 = check_names(100, fields)
        fields.reverse()
        self.assertTrue(check_names(100, iter(fields)) is model1)
        random.shuffle(fields)
        self.assertTrue(check_names(100, dict(fields)) is model1)
        test_create(model1)
        self.assertFalse(check_names(101, fields) is model1)

        # Test model with different field names, but same signature.
        for i, (name, field_type) in enumerate(fields):
            fields[i] = ('x' + name, field_type)
        for i, (name, db_column, field_class) in enumerate(expect):
            expect[i] = (('x' + name if name.startswith('test') else name),
                         db_column, field_class)
        model2 = check_names(102, fields)
        self.assertFalse(model2 is model1)
        self.assertTrue(dyn.table_exists(model2))

        # Remove a field and test that the model differs from previous
        # models.
        fields.remove(('xtest5', 'integer'))
        expect[-2:] = [('xtest1', 'field8', 'TextField')]
        model3 = check_names(103, fields, table_name='appoutputdata_131_4d3f1i1s')
        self.assertFalse(model3 is model1)
        self.assertFalse(model3 is model2)
        test_create(model3)

        # Changing only the project_id should result in a new model
        model4 = check_names(104, fields, 241, 'appoutputdata_241_4d3f1i1s')
        self.assertFalse(model4 is model3)
        test_create(model4)
 def test_create(model):
     self.assertFalse(dyn.table_exists(model))
     dyn.create_table(model)
     self.assertTrue(dyn.table_exists(model))