def __init__(self, toolbar, parent=None): CartoDBUserDataDialog.__init__(self, toolbar, parent) # Set up the user interface from Designer. self.ui = Ui_CartoDBPlugin() self.ui.setupUi(self) self.ui.searchTX.textChanged.connect(self.filterTables) # self.ui.tablesList.verticalScrollBar().valueChanged.connect(self.onScroll) self.isLoadingTables = False self.noLoadTables = False self.initUserConnection()
def __init__(self): QDialog.__init__(self) self.settings = QSettings() # Set up the user interface from Designer. self.ui = Ui_CartoDBPlugin() self.ui.setupUi(self) self.populateConnectionList() self.ui.newConnectionBT.clicked.connect(self.openNewConnectionDialog) self.ui.editConnectionBT.clicked.connect(self.editConnectionDialog) self.ui.deleteConnectionBT.clicked.connect(self.deleteConnectionDialog) self.ui.connectBT.clicked.connect(self.findTables) self.currentUser = None self.currentApiKey = None
class CartoDBPluginDialog(QDialog): def __init__(self): QDialog.__init__(self) self.settings = QSettings() # Set up the user interface from Designer. self.ui = Ui_CartoDBPlugin() self.ui.setupUi(self) self.populateConnectionList() self.ui.newConnectionBT.clicked.connect(self.openNewConnectionDialog) self.ui.editConnectionBT.clicked.connect(self.editConnectionDialog) self.ui.deleteConnectionBT.clicked.connect(self.deleteConnectionDialog) self.ui.connectBT.clicked.connect(self.findTables) self.currentUser = None self.currentApiKey = None def setTablesListItems(self, tables): self.ui.tablesList.clear() self.ui.tablesList.addItems(tables) return True def getTablesListSelectedItems(self): return self.ui.tablesList.selectedItems() def populateConnectionList(self): self.settings.beginGroup('/CartoDBPlugin/') self.ui.connectionList.clear() self.ui.connectionList.addItems(self.settings.childGroups()) self.settings.endGroup() self.setConnectionListPosition() def openNewConnectionDialog(self): # Open new connection dialog. dlg = CartoDBNewConnectionDialog() dlg.setWindowTitle(self.tr('Add CartoDB Connection')) dlg.show() result = dlg.exec_() # See if OK was pressed if result == QDialog.Accepted: # add to service list QgsMessageLog.logMessage('New connection saved', 'CartoDB Plugin', QgsMessageLog.INFO) self.populateConnectionList() def editConnectionDialog(self): # Modify existing connection. currentText = self.ui.connectionList.currentText() apiKey = self.settings.value('/CartoDBPlugin/%s/api' % currentText) conEdit = CartoDBNewConnectionDialog(currentText) conEdit.setWindowTitle(self.tr('Edit CartoDB Connection')) conEdit.ui.userTX.setText(currentText) conEdit.ui.apiKeyTX.setText(apiKey) if conEdit.exec_() == QDialog.Accepted: # Update connection list self.populateConnectionList() def deleteConnectionDialog(self): # Delete connection. currentText = self.ui.connectionList.currentText() key = '/CartoDBPlugin/%s' % currentText msg = self.tr('Remove connection %s?' % currentText) result = QMessageBox.information(self, self.tr('Confirm delete'), msg, QMessageBox.Ok | QMessageBox.Cancel) if result == QMessageBox.Ok: # Remove connection from list self.settings.remove(key) indexToDelete = self.ui.connectionList.currentIndex() self.ui.connectionList.removeItem(indexToDelete) self.setConnectionListPosition() def findTables(self): # Get tables from CartoDB. self.currentUser = self.ui.connectionList.currentText() self.currentApiKey = self.settings.value('/CartoDBPlugin/%s/api' % self.currentUser) cl = CartoDBAPIKey(self.currentApiKey, self.currentUser) try: res = cl.sql("SELECT CDB_UserTables() order by 1") tables = [] for table in res['rows']: tables.append(table['cdb_usertables']) QgsMessageLog.logMessage('This account has ' + str(len(tables)) + ' tables', 'CartoDB Plugin', QgsMessageLog.INFO) self.setTablesListItems(tables) self.settings.setValue('/CartoDBPlugin/selected', self.currentUser) except CartoDBException as e: QgsMessageLog.logMessage('Some error ocurred getting tables', 'CartoDB Plugin', QgsMessageLog.CRITICAL) QMessageBox.information(self, self.tr('Error'), self.tr('Error getting tables'), QMessageBox.Ok) self.ui.tablesList.clear() def setConnectionListPosition(self): # Set the current index to the selected connection. toSelect = self.settings.value('/CartoDBPlugin/selected') conCount = self.ui.connectionList.count() self.setConnectionsFound(conCount > 0) exists = False for i in range(conCount): if self.ui.connectionList.itemText(i) == toSelect: self.ui.connectionList.setCurrentIndex(i) exists = True break # If we couldn't find the stored item, but there are some, default # to the last item (this makes some sense when deleting items as it # allows the user to repeatidly click on delete to remove a whole # lot of items) if not exists and conCount > 0: # If toSelect is null, then the selected connection wasn't found # by QSettings, which probably means that this is the first time # the user has used CartoDBPlugin, so default to the first in the list # of connetions. Otherwise default to the last. if not toSelect: currentIndex = 0 else: currentIndex = conCount - 1 self.ui.connectionList.setCurrentIndex(currentIndex) def setConnectionsFound(self, found): self.ui.connectBT.setEnabled(found) self.ui.deleteConnectionBT.setEnabled(found) self.ui.editConnectionBT.setEnabled(found)
class CartoDBPluginDialog(CartoDBUserDataDialog): def __init__(self, toolbar, parent=None): CartoDBUserDataDialog.__init__(self, toolbar, parent) # Set up the user interface from Designer. self.ui = Ui_CartoDBPlugin() self.ui.setupUi(self) self.ui.searchTX.textChanged.connect(self.filterTables) self.ui.sqlBT.clicked.connect(self.onSQL) # self.ui.tablesList.verticalScrollBar().valueChanged.connect(self.onScroll) self.isLoadingTables = False self.noLoadTables = False self.initUserConnection() self.loadSQL = False def getTablesListSelectedItems(self): return self.ui.tablesList.selectedItems() def getItemWidget(self, item): return self.ui.tablesList.itemWidget(item) def filterByExtent(self): return self.ui.extentCH.isChecked() def onSQL(self): self.loadSQL = True self.reject() @pyqtSlot() def connect(self): # Get tables from CartoDB. self.tablesPage = 1 self.noLoadTables = False self.ui.searchTX.setText('') self.getTables(self.currentUser, self.currentApiKey, self.currentMultiuser) def filterTables(self): text = self.ui.searchTX.text() if text == '': newVisualizations = self.visualizations else: newVisualizations = [ t for t in self.visualizations if text in t['name'] ] self.updateList(newVisualizations) def updateList(self, visualizations): self.ui.tablesList.clear() for visualization in visualizations: item = QListWidgetItem(self.ui.tablesList) owner = None owner = visualization['permission']['owner']['username'] widget = CartoDBDatasetsListItem( visualization['name'], owner, visualization['table']['size'], visualization['table']['row_count'], shared=(owner != self.currentUser), multiuser=self.currentMultiuser) # item.setText(visualization['name']) readonly = False # qDebug('Vis:' + json.dumps(visualization, sort_keys=True, indent=2, separators=(',', ': '))) if visualization['permission'] is not None and owner != self.currentUser and \ visualization['permission']['acl'] is not None: for acl in visualization['permission']['acl']: if acl['type'] == 'user' and 'username' in acl['entity'] and acl['entity']['username'] == self.currentUser and \ acl['access'] == 'r': readonly = True break widget.readonly = readonly if readonly: widget.setTextColor('#999999') item.setSizeHint(widget.sizeHint()) # item.setIcon(QIcon(":/plugins/qgis-cartodb/images/icons/layers.png")) self.ui.tablesList.setItemWidget(item, widget) def getTables(self, cartodbUser, apiKey, multiuser=False): cartoDBApi = CartoDBApi(cartodbUser, apiKey, multiuser) cartoDBApi.fetchContent.connect(self.cbTables) cartoDBApi.error.connect(self.error) self.isLoadingTables = True # cartoDBApi.getUserTables(self.tablesPage) cartoDBApi.getUserTables(1, 100000) @pyqtSlot(dict) def cbTables(self, data): if 'error' in data: return self.totalTables = data['total_user_entries'] self.totalShared = data['total_shared'] if len(data['visualizations']) == 0: self.noLoadTables = True if self.tablesPage == 1: self.visualizations = data['visualizations'] else: self.visualizations.extend(data['visualizations']) self.visualizations.reverse() self.updateList(self.visualizations) self.ui.searchTX.setEnabled(True) self.isLoadingTables = False self.setUpUserData() def onScroll(self, val): maximum = self.ui.tablesList.verticalScrollBar().maximum() if val >= maximum - 4 and not self.isLoadingTables and not self.noLoadTables: self.tablesPage = self.tablesPage + 1 self.getTables(self.currentUser, self.currentApiKey, self.currentMultiuser) def showEvent(self, event): worker = CartoDBPluginWorker(self, 'connect') worker.start() def error(self): QMessageBox.warning( self, QApplication.translate('CartoDBPlugin', 'Error'), QApplication.translate('CartoDBPlugin', 'Error loading data from CartoDB'))
class CartoDBPluginDialog(CartoDBUserDataDialog): def __init__(self, toolbar, parent=None): CartoDBUserDataDialog.__init__(self, toolbar, parent) # Set up the user interface from Designer. self.ui = Ui_CartoDBPlugin() self.ui.setupUi(self) self.ui.searchTX.textChanged.connect(self.filterTables) self.ui.sqlBT.clicked.connect(self.onSQL) # self.ui.tablesList.verticalScrollBar().valueChanged.connect(self.onScroll) self.isLoadingTables = False self.noLoadTables = False self.initUserConnection() self.loadSQL = False def getTablesListSelectedItems(self): return self.ui.tablesList.selectedItems() def getItemWidget(self, item): return self.ui.tablesList.itemWidget(item) def filterByExtent(self): return self.ui.extentCH.isChecked() def onSQL(self): self.loadSQL = True self.reject() @pyqtSlot() def connect(self): # Get tables from CartoDB. self.tablesPage = 1 self.noLoadTables = False self.ui.searchTX.setText('') self.getTables(self.currentUser, self.currentApiKey, self.currentMultiuser) def filterTables(self): text = self.ui.searchTX.text() if text == '': newVisualizations = self.visualizations else: newVisualizations = [t for t in self.visualizations if text in t['name']] self.updateList(newVisualizations) def updateList(self, visualizations): self.ui.tablesList.clear() for visualization in visualizations: item = QListWidgetItem(self.ui.tablesList) owner = None owner = visualization['permission']['owner']['username'] widget = CartoDBDatasetsListItem( visualization['name'], owner, visualization['table']['size'], visualization['table']['row_count'], shared=(owner != self.currentUser), multiuser=self.currentMultiuser) # item.setText(visualization['name']) readonly = False # qDebug('Vis:' + json.dumps(visualization, sort_keys=True, indent=2, separators=(',', ': '))) if visualization['permission'] is not None and owner != self.currentUser and \ visualization['permission']['acl'] is not None: for acl in visualization['permission']['acl']: if acl['type'] == 'user' and 'username' in acl['entity'] and acl['entity']['username'] == self.currentUser and \ acl['access'] == 'r': readonly = True break widget.readonly = readonly if readonly: widget.setTextColor('#999999') item.setSizeHint(widget.sizeHint()) # item.setIcon(QIcon(":/plugins/qgis-cartodb/images/icons/layers.png")) self.ui.tablesList.setItemWidget(item, widget) def getTables(self, cartodbUser, apiKey, multiuser=False): cartoDBApi = CartoDBApi(cartodbUser, apiKey, multiuser) cartoDBApi.fetchContent.connect(self.cbTables) cartoDBApi.error.connect(self.error) self.isLoadingTables = True # cartoDBApi.getUserTables(self.tablesPage) cartoDBApi.getUserTables(1, 100000) @pyqtSlot(dict) def cbTables(self, data): if 'error' in data: return self.totalTables = data['total_user_entries'] self.totalShared = data['total_shared'] if len(data['visualizations']) == 0: self.noLoadTables = True if self.tablesPage == 1: self.visualizations = data['visualizations'] else: self.visualizations.extend(data['visualizations']) self.visualizations.reverse() self.updateList(self.visualizations) self.ui.searchTX.setEnabled(True) self.isLoadingTables = False self.setUpUserData() def onScroll(self, val): maximum = self.ui.tablesList.verticalScrollBar().maximum() if val >= maximum - 4 and not self.isLoadingTables and not self.noLoadTables: self.tablesPage = self.tablesPage + 1 self.getTables(self.currentUser, self.currentApiKey, self.currentMultiuser) def showEvent(self, event): worker = CartoDBPluginWorker(self, 'connect') worker.start() def error(self): QMessageBox.warning(self, QApplication.translate('CartoDBPlugin', 'Error'), QApplication.translate('CartoDBPlugin', 'Error loading data from CartoDB'))