Пример #1
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.table = QtGui.QTableWidget()
        self.db_list=QtGui.QComboBox()
        self.table_list=QtGui.QListWidget()


        self.db=MongoAccess()


        self.setWindowTitle("MongoDb browser")
        self.resize(800, 600)
        vbox = QtGui.QHBoxLayout()
        self.setLayout(vbox)

        mid_layout=QtGui.QVBoxLayout()

        mid_layout.addWidget(self.db_list)
        mid_layout.addWidget(self.table_list)
        #mid_layout.addWidget(self.table)
        vbox.addLayout(mid_layout)
        vbox.addWidget(self.table)

        #setting up events
        self.db_list.currentIndexChanged.connect(self.dbChanged)
        self.table_list.currentRowChanged.connect(self.tableChanged)

        #getting db data
        self.getDbList()
Пример #2
0
    def setUp(self):
        self.db=MongoAccess()
        self.test_db_name="test_accees_db"
        self.test_table_name="test_table"
        self.db.setDatabase(self.test_db_name)

        post = {"author": "Mike","text": "My first blog post!"}
        self.db.insert(self.test_table_name,post)
        post2 = {"author": "John","text": "Testing as secong post!"}
        self.db.insert(self.test_table_name,post2)
        post3 = {"author": "John","text": "Testing as third post!"}
        self.db.insert(self.test_table_name,post3)
Пример #3
0
 def test_getAllNoDbSet(self):
     """testing get all data if no database is set"""
     my_db=MongoAccess()
     data=my_db.getAll(self.test_db_name)
     self.assertEqual(data ,None)
Пример #4
0
 def test_getTableListNoDb(self):
     """need to exit gracefully, if no db is set """
     my_db=MongoAccess()
     tables=my_db.getTableList()
     self.assertEqual(len(tables),0)
Пример #5
0
class TestMongoAccess(unittest.TestCase):

    def setUp(self):
        self.db=MongoAccess()
        self.test_db_name="test_accees_db"
        self.test_table_name="test_table"
        self.db.setDatabase(self.test_db_name)

        post = {"author": "Mike","text": "My first blog post!"}
        self.db.insert(self.test_table_name,post)
        post2 = {"author": "John","text": "Testing as secong post!"}
        self.db.insert(self.test_table_name,post2)
        post3 = {"author": "John","text": "Testing as third post!"}
        self.db.insert(self.test_table_name,post3)


    def test_getTableList(self):
        tables=self.db.getTableList()
        self.assertEqual(len(tables)>0 ,True)

    def test_getTableListNoSystem(self):
        """tests if system.indexes table is removed it have not to be seen"""
        tables=self.db.getTableList()
        self.assertEqual(tables.count("system.indexes") ,0)


    def test_getTableListNoDb(self):
        """need to exit gracefully, if no db is set """
        my_db=MongoAccess()
        tables=my_db.getTableList()
        self.assertEqual(len(tables),0)

    def test_getAll(self):
        data=self.db.getAll(self.test_table_name)
        self.assertEqual(data.count(),3)

    def test_getAllNoDbSet(self):
        """testing get all data if no database is set"""
        my_db=MongoAccess()
        data=my_db.getAll(self.test_db_name)
        self.assertEqual(data ,None)


    def test_getTableColumns(self):
        post2 = {"author": "John","text": "Testing as secong post!"}
        self.db.insert(self.test_table_name,post2)
        post = {"co-author": "John","text": "Testing as third post!"}
        self.db.insert(self.test_table_name,post)

        col_data=self.db.getTableColumns(self.test_table_name)
        #print col_data
        sample_col_names=['_id', 'author', 'co-author', 'text']
        self.assertEqual(col_data ,sample_col_names)






    def test_getOne(self):
        data=self.db.getOne(self.test_table_name)
        self.assertEqual(data["author"],"Mike")

    def test_getOneFilter(self):
        data=self.db.getOne(self.test_table_name,{"text":"Testing as third post!"})
        self.assertEqual(data["author"],"John")

    def test_insertDuplicate(self):
        """tests if data is the same, will it be inserted or not. It have to be inserted """
        post3 = {"author": "John","text": "Testing as third post!"}
        self.db.insert(self.test_table_name,post3)
        data=self.db.getAll(self.test_table_name)
        self.assertEqual(data.count(),4)

    def test_saveWithId(self):
        post = {"author": "John","text": "Testing as third post!"}
        data=self.db.getOne(self.test_table_name,post)
        data["author"]="Jim"
        jims_text="Jims blog post"
        data["text"]=jims_text
        self.db.save(self.test_table_name,data)
        data=self.db.getOne(self.test_table_name,{"text":jims_text})
        self.assertEqual(data["author"],"Jim")

    def test_update(self):
        post = {"author": "John","text": "Testing as secong post!"}
        data=self.db.getOne(self.test_table_name,post)
        jims_text="Jims secong blog post"
        data["text"]=jims_text

        self.db.update(self.test_table_name,data)

        data=self.db.getOne(self.test_table_name,{"text":jims_text})
        self.assertEqual(data["text"],jims_text)
        
    def test_delete(self):
        row_count=self.db.getAll(self.test_table_name).count()
        row_to_delete=self.db.getOne(self.test_table_name)
        self.db.delete(self.test_table_name,row_to_delete)
        row_count_after=self.db.getAll(self.test_table_name).count()
        #print "before "+str(row_count)+" after "+str(row_count_after)
        self.assertEqual(row_count-1,row_count_after)


    def test_dropTable(self):
        pass

    def test_asJSON(self):
        data=self.db.getAll(self.test_table_name)
        json_data=self.db.asJSON(data)
        import json
        self.assertEqual(type(json.loads(json_data)),type([]))


    def test_changeTable(self):
        "testing if data is displayed properly after changing table"
        pass




    def tearDown(self):
        self.db.dropDatabase(self.test_db_name)
        pass
Пример #6
0
 def test_dropDb(self):
     db=MongoAccess()
     db.dropDatabase("test_db")
Пример #7
0
 def test_insert(self):
     db=MongoAccess()
     db.setDatabase("test_db")
     post = {"author": "Mike","text": "My first blog post!"}
     db.insert("test_table",post)
Пример #8
0
 def test_getDbListJson(self):
     db=MongoAccess()
     db_list=db.getDbList()
     # "local" database should always be in MongoDb server
     self.assertEqual("local" in db_list,True)
Пример #9
0
class MainWindow(QtGui.QWidget):
    #def __init__(self, rows):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.table = QtGui.QTableWidget()
        self.db_list=QtGui.QComboBox()
        self.table_list=QtGui.QListWidget()


        self.db=MongoAccess()


        self.setWindowTitle("MongoDb browser")
        self.resize(800, 600)
        vbox = QtGui.QHBoxLayout()
        self.setLayout(vbox)

        mid_layout=QtGui.QVBoxLayout()

        mid_layout.addWidget(self.db_list)
        mid_layout.addWidget(self.table_list)
        #mid_layout.addWidget(self.table)
        vbox.addLayout(mid_layout)
        vbox.addWidget(self.table)

        #setting up events
        self.db_list.currentIndexChanged.connect(self.dbChanged)
        self.table_list.currentRowChanged.connect(self.tableChanged)

        #getting db data
        self.getDbList()


    def connectDb(self,host,port):
        self.db.connect(host,port)

        #self.connection = pymongo.Connection('localhost', 27017)


    def getDbList(self):
        db_list=self.db.getDbList()
        if db_list is not None:
            self.table_list.clear()
            self.db_list.addItems(db_list)


    def dbChanged(self,combo_index):
        self.table_list.clear()
        #self.table_list.adjustSize()
        self.table.clear()
        self.populateTableList(self.db_list.currentText())


    def populateTableList(self,dbName):
        self.table_list.clear()
        tables=self.db.getTableList(dbName)
        self.table_list.addItems(tables)
        self.table_list.adjustSize()



    def tableChanged(self,table_index):
        self.table.clear()
        self.populateTableData(self.table_list.currentItem().text())


    def populateTableData(self,table_name):
        self.table.clear()
        col_names=self.db.getTableColumns(table_name)
        table_data=self.db.getAll(table_name)
        self.setHeaders(col_names)
        self.table.setRowCount(table_data.count())

        for col_index,row in enumerate(table_data):
            for key in row:
                self.addCell(str(row[key]),col_names.index(key),col_index)


    def addCell(self,item_text,row,col):
        table_item = QtGui.QTableWidgetItem(item_text)
        self.table.setItem(col,row, table_item)


    def setHeaders(self,headers):
        self.table.setColumnCount(len(headers))
        self.table.setHorizontalHeaderLabels(tuple(headers))