Esempio n. 1
0
    def test_defer_save_wait(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   astype='dict',
                                   auto_load=False,
                                   auto_save=True,
                                   deferred_save=True,
                                   persistent=True,
                                   debug=False)
        self.pddb.load(table_names=self.tname)

        for i in range(self.pddb.save_queue_max):
            self.pddb.insert(self.tname,
                             {c: '%s_%d' % (c, i)
                              for c in self.cols})

        self.assertFalse(
            os.path.exists(os.path.join(test_name.lower(),
                                        self.tname + '.csv')))
        time.sleep(self.pddb.save_wait +
                   1)  # Give an extra second to actually save the file to disk
        self.assertTrue(
            os.path.exists(os.path.join(test_name.lower(),
                                        self.tname + '.csv')))

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 2
0
    def test_save_then_drop_all(self):
        test_name = self.id().lower()
        schema = {self.tname: self.cols}
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=True,
                                   debug=False)
        self.pddb.load(table_schemas=schema)
        self.pddb.insert(
            self.tname,
            {c: '%s_%d' % (c, i)
             for (i, c) in enumerate(self.cols)})
        self.pddb.save()

        header_expected = ','.join(
            self.cols) + ',%s\n' % PandasDatabase._id_colname
        record_expected_regex = header_expected + \
            ','.join(['%s_%d' % (c, i) for (i, c) in enumerate(self.cols)]) + ',.+?\n'
        with open(
                os.path.join(self.pddb.root_dir, test_name,
                             self.tname + '.csv'), 'r') as f:
            record_csv = f.read()

        self.assertTrue(os.path.exists(test_name))
        self.pddb.drop_all()
        self.assertRegex(record_csv, record_expected_regex)
        self.assertFalse(os.path.exists(test_name))

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 3
0
    def test_find_where_in(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        record_store = []
        for i in range(10):
            record = {c: '%s_%d' % (c, i) for c in self.cols}
            self.pddb.insert(self.tname, record)
            record_store.append(record)

        search_for = {
            self.cols[0]: ['%s_%d' % (self.cols[0], i) for i in range(5)]
        }
        results = self.pddb.find(self.tname,
                                 where=search_for,
                                 columns=self.cols,
                                 astype='dict')

        self.assertEqual(record_store[:5], results)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 4
0
    def test_find_using_columns(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_names=self.tname)

        self.pddb.insert(
            self.tname,
            {c: '%s_%d' % (c, i)
             for (i, c) in enumerate(self.cols)})
        record_A = self.pddb.find_one(self.tname, columns=['A'])
        record_B = self.pddb.find_one(self.tname, columns='B')
        record_ABC = self.pddb.find(self.tname,
                                    columns=['A', 'B', 'C'],
                                    astype='dict')[0]

        cols_A = sorted(list(record_A.keys()))
        cols_B = sorted(list(record_B.keys()))
        cols_ABC = sorted(list(record_ABC.keys()))

        self.assertEqual(cols_A, ['A'])
        self.assertEqual(cols_B, ['B'])
        self.assertEqual(cols_ABC, ['A', 'B', 'C'])

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 5
0
    def test_astype(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        for i in range(10):
            self.pddb.insert(self.tname,
                             {c: '%s_%d' % (c, i)
                              for c in self.cols})

        self.assertEqual(str(self.pddb.find(self.tname)),
                         str(self.pddb.find(self.tname, astype='dataframe')))
        self.assertEqual(str(self.pddb.find(self.tname, astype=dict)),
                         str(self.pddb.find(self.tname, astype='dict')))
        self.assertEqual(str(self.pddb.find(self.tname, astype=str)),
                         str(self.pddb.find(self.tname, astype='json')))
        self.assertRaisesRegex(
            RuntimeError, '.*',
            lambda: self.pddb.find_one(self.tname, astype='dataframe'))

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 6
0
    def test_single_delete_record(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_names=self.tname)

        for i in range(10):
            self.pddb.insert(self.tname,
                             {c: '%s_%d' % (c, i)
                              for c in self.cols})

        c = self.cols[0]
        firstrecord = {c: '%s_%d' % (c, 0)}
        delrows = self.pddb.delete(self.tname, where=firstrecord)
        allrows = self.pddb.find(self.tname)
        allvalA = allrows['A'].values

        self.assertEqual(1, len(delrows))
        self.assertEqual(9, len(allrows))
        self.assertFalse('A_0' in allvalA)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 7
0
    def test_drop_table(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        all_tables = []
        for i in range(10):
            tname = '%s_%d' % (self.tname, i)
            all_tables.append(tname)
            self.pddb.insert(tname,
                             record={c: '%s_%d' % (c, i)
                                     for c in self.cols})

        tnames = self.pddb.get_table_names()
        self.assertEqual(sorted(tnames), sorted(all_tables))

        for i in range(5):
            tname = '%s_%d' % (self.tname, i)
            all_tables.remove(tname)
            self.pddb.drop(tname)

        tnames = self.pddb.get_table_names()
        self.assertEqual(sorted(tnames), sorted(all_tables))

        self.pddb.drop(all_tables)
        self.assertEqual(len(self.pddb.get_table_names()), 0)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 8
0
    def test_many_upsert_with_fixed_schema(self):
        test_name = self.id().lower()
        schema = {self.tname: self.cols}
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_schemas=schema)

        test_record_store = []
        for i in range(10):
            record = {c: '%s_%d' % (c, i) for c in self.cols}
            record_new = self.pddb.upsert(self.tname,
                                          record=record,
                                          astype='dict')[0]

            for c in self.cols:
                record_new[c] = '%s_%d' % (c, -i)

            self.pddb.upsert(self.tname,
                             record=record_new,
                             where={'__id__': record_new['__id__']})
            test_record_store.append(record_new)

        rows = self.pddb.find(self.tname, astype='dict')
        self.assertEqual(rows, test_record_store)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 9
0
    def test_single_upsert_with_fixed_schema(self):
        test_name = self.id().lower()
        schema = {self.tname: self.cols}
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   astype='dict',
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_schemas=schema)

        # Test insert first
        record = {c: '%s_%d' % (c, i) for (i, c) in enumerate(self.cols)}
        record = self.pddb.upsert(self.tname, record=record)[0]
        record_id = record['__id__']

        record_db = self.pddb.find_one(self.tname, where={'__id__': record_id})
        self.assertEqual(record, record_db)

        # Test update second
        record_new = {c: '%s_%d' % (c, -i) for (i, c) in enumerate(self.cols)}
        record_new = self.pddb.upsert(self.tname,
                                      record=record_new,
                                      where={'__id__': record_id})[0]

        record_db = self.pddb.find(self.tname, where={'__id__': record_id})[0]
        self.assertNotEqual(record, record_new)
        self.assertEqual(record_db, record_new)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 10
0
    def test_find_one(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=True)

        record = {'col_name': 'A_1'}
        record_from_insert = self.pddb.insert(self.tname,
                                              record,
                                              columns='col_name',
                                              astype='dict')
        record_from_findone = self.pddb.find_one(self.tname,
                                                 where=record,
                                                 columns='col_name',
                                                 astype='dict')
        json_from_record = json.dumps(record)
        json_from_findone = json.dumps(record_from_findone)
        json_from_insert = json.dumps(record_from_insert)

        self.assertEqual(json_from_record, json_from_insert)
        self.assertEqual(json_from_record, json_from_findone)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 11
0
    def test_create_database(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=True,
                                   debug=False)
        self.assertTrue(os.path.exists(test_name.lower()))
        rmtree(test_name.lower())

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 12
0
    def test_find_one_none(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=True)

        record = self.pddb.find_one(self.tname,
                                    where={'my_cond': None},
                                    astype='json')

        self.assertEqual(record, json.dumps(dict()))

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 13
0
    def test_upsert_to_insert_with_where(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=True)

        record = self.pddb.upsert(self.tname,
                                  record={'col_name_1': '1'},
                                  where={'col_name_2': '2'},
                                  columns=['col_name_1', 'col_name_2'],
                                  astype='dict')
        self.assertEqual(record[0], {'col_name_1': '1', 'col_name_2': '2'})

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 14
0
    def test_single_rowgen(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        newrower = lambda: {c: '%s_%d' % (c, 0) for c in self.cols}
        self.pddb.load(table_rowgens={self.tname: newrower})

        row = newrower()
        record = self.pddb.insert(self.tname, columns=self.cols, astype='dict')

        self.assertEqual(row, record)

        self.pddb.drop_all()
Esempio n. 15
0
    def test_illegal_column_name(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   astype=list,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        record = {'col*name': 'A_1'}
        insert_function = lambda: self.pddb.insert(self.tname, record)
        self.assertRaisesRegex(
            ValueError, 'Column names must match the following regex: ".+"',
            insert_function)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 16
0
    def test_find_regex(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        for i in range(10):
            self.pddb.insert(self.tname, record={'col_name': str(i)})

        rows = self.pddb.find(self.tname,
                              where={'col_name': re.compile(r'[1-5]')})
        self.assertEqual(len(rows), 5)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 17
0
    def test_create_table_with_fixed_schema(self):
        test_name = self.id().lower()
        schema = {self.tname: self.cols}
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   astype=list,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_schemas=schema)

        db_cols = set(self.pddb._db[self.tname].columns)
        cols_with_id = set(['__id__'] + [c for c in self.cols])

        self.assertEqual(db_cols, cols_with_id)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 18
0
    def test_create_table_with_dynamic_schema(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)

        for i, c in enumerate(self.cols):
            record = {c: str(i)}
            self.pddb.insert(self.tname, record)

        PandasDatabase_cols = set(self.pddb._db[self.tname].columns)
        cols_with_id = set(['__id__'] + [c for c in self.cols])

        self.assertEqual(PandasDatabase_cols, cols_with_id)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 19
0
    def test_fixed_schema_fail_column(self):
        test_name = self.id().lower()
        schema = {self.tname: self.cols}
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=False,
                                   auto_load=False,
                                   auto_save=False,
                                   persistent=False,
                                   debug=False)
        self.pddb.load(table_schemas=schema)

        insert_function = lambda: self.pddb.insert(self.tname,
                                                   record={'D': '0'})
        self.assertRaisesRegex(
            ValueError,
            'Column "D" does not exist in schema for table "%s"' % self.tname,
            insert_function)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 20
0
    def test_unicode_conversion(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=True)

        record = self.pddb.insert(self.tname,
                                  record={u'col_name_1': u'1'},
                                  astype='dict')
        self.assertTrue(
            all([
                type(x) == str
                for x in list(record.keys()) + list(record.values())
            ]))

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 21
0
    def test_upsert_to_insert_with_conflict(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   persistent=False,
                                   debug=True)

        newrower = lambda: {'col_name_2': '2'}
        self.pddb.load(table_rowgens={self.tname: newrower})

        insert_function = lambda: self.pddb.upsert(self.tname,
                                                   record={'col_name_1': '1'},
                                                   where_not=
                                                   {'col_name_2': '2'})
        self.assertRaisesRegex(
            ValueError, 'Cannot insert new record because default '
            'values conflict with conditions provided: {.+}', insert_function)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 22
0
    def test_type_cast(self):
        test_name = self.id().lower()
        self.pddb = PandasDatabase(test_name,
                                   dynamic_schema=True,
                                   auto_load=True,
                                   auto_save=False,
                                   auto_cast=True,
                                   persistent=False,
                                   debug=False)

        dict_mix = {1: 'a', 'col_name': 1, 'b': 0.5}
        dict_str = {str(k): str(v) for k, v in dict_mix.items()}
        record = self.pddb.insert(self.tname, record=dict_mix, astype='dict')
        self.assertTrue(
            all([
                type(x) == str
                for x in list(record.keys()) + list(record.values())
            ]))

        record.pop(PandasDatabase._id_colname)
        self.assertEqual(record, dict_str)

        self.pddb.drop_all()
        self.pddb = None
Esempio n. 23
0
 def setUpClass(cls):
     cls.pddb = PandasDatabase('TestPandasDatabaseServerMethods', debug=True)
     cls.pddb_app = cls.pddb.bind_bottle_routes(default_permissions='w')
     cls.record = {'A': '1', 'B': '2', 'C': '3'}