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
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))