def fill_item(self, item, value): item.setExpanded(True) if type(value) is OrderedDict: for key, val in sorted(value.items()): if type(val) is unicode: if '@xmlns' not in key: # hack child = QTreeWidgetItem() text = unicode(key + " '" + val + "'") child.setTextColor(0, self.getQColor(text)) child.setText(0, text) item.addChild(child) else: child = QTreeWidgetItem() text = unicode(key) #child.setTextColor(0, self.getQColor(text)) child.setText(0, text) item.addChild(child) self.fill_item(child, val) elif type(value) is list: for val in value: child = QTreeWidgetItem() item.addChild(child) if type(val) is OrderedDict: child.setText(0, '[' + str(value.index(val)) +']') self.fill_item(child, val) elif type(val) is list: child.setText(0, '[' + str(value.index(val)) +']') self.fill_item(child, val) else: child.setText(0, unicode(val)) child.setExpanded(True) else: child = QTreeWidgetItem() child.setText(0, str(value)) item.addChild(child)
def fill_item(self, item, value): item.setExpanded(True) if type(value) is OrderedDict: for key, val in sorted(value.items()): if type(val) is unicode: if '@xmlns' not in key: # hack child = QTreeWidgetItem() text = unicode(key + " '" + val + "'") child.setTextColor(0, self.getQColor(text)) child.setText(0, text) item.addChild(child) else: child = QTreeWidgetItem() text = unicode(key) #child.setTextColor(0, self.getQColor(text)) child.setText(0, text) item.addChild(child) self.fill_item(child, val) elif type(value) is list: for val in value: child = QTreeWidgetItem() item.addChild(child) if type(val) is OrderedDict: child.setText(0, '[' + str(value.index(val)) + ']') self.fill_item(child, val) elif type(val) is list: child.setText(0, '[' + str(value.index(val)) + ']') self.fill_item(child, val) else: child.setText(0, unicode(val)) child.setExpanded(True) else: child = QTreeWidgetItem() child.setText(0, str(value)) item.addChild(child)
def findTables(self): self.ui.testBT.setEnabled(True) cl = CartoDBAPIKey(self.currentApiKey, self.currentUser) try: if not str(self.currentMultiuser) in ['true', '1', 'True']: sqlTables = "SELECT CDB_UserTables() table_name" res = cl.sql( "WITH usertables AS (" + sqlTables + ") \ SELECT ut.table_name, c.column_name, c.data_type column_type \ FROM usertables ut \ JOIN information_schema.columns c ON c.table_name = ut.table_name \ WHERE c.data_type != 'USER-DEFINED' \ ORDER BY ut.table_name, c.column_name") else: sqlTables = "SELECT string_agg(privilege_type, ', ') AS privileges, table_schema, table_name \ FROM information_schema.role_table_grants tg \ JOIN ( \ SELECT DISTINCT u.usename \ FROM information_schema.tables t \ JOIN pg_catalog.pg_class c ON (t.table_name = c.relname) \ JOIN pg_catalog.pg_user u ON (c.relowner = u.usesysid) \ WHERE t.table_schema = '" + self.currentUser + "') u ON u.usename = tg.grantee \ WHERE table_schema NOT IN ('pg_catalog', 'information_schema', 'cartodb', 'public', 'cdb_importer') \ GROUP BY table_schema, table_name \ ORDER BY table_schema, table_name" res = cl.sql( "WITH usertables AS (" + sqlTables + ") \ SELECT ut.table_name, c.column_name, c.data_type column_type, ut.privileges \ FROM usertables ut \ JOIN information_schema.columns c ON c.table_name = ut.table_name \ WHERE c.data_type != 'USER-DEFINED' \ ORDER BY ut.table_name, c.column_name") tables = [] oldTableName = None parentTableItem = None for table in res['rows']: if table['table_name'] != oldTableName: parentTableItem = QTreeWidgetItem() oldTableName = table['table_name'] parentTableItem.setText(0, self.tr(oldTableName)) parentTableItem.setIcon(0, QIcon(":/plugins/qgis-cartodb/images/icons/layers.png")) if str(self.currentMultiuser) in ['true', '1', 'True'] and table['privileges'] == 'SELECT': parentTableItem.setTextColor(0, QColor('#999999')) tables.append(parentTableItem) tableItem = QTreeWidgetItem(parentTableItem) tableItem.setText(0, self.tr(table['column_name'])) if str(self.currentMultiuser) in ['true', '1', 'True'] and table['privileges'] == 'SELECT': tableItem.setTextColor(0, QColor('#999999')) tableItem.setToolTip(0, self.tr(table['column_type'])) tableItem.setIcon(0, QIcon(":/plugins/qgis-cartodb/images/icons/text.png")) if table['column_type'] == 'integer' or table['column_type'] == 'double precision': tableItem.setIcon(0, QIcon(":/plugins/qgis-cartodb/images/icons/number.png")) elif table['column_type'] == 'timestamp with time zone': tableItem.setIcon(0, QIcon(":/plugins/qgis-cartodb/images/icons/calendar.png")) self.setTablesListItems(tables) except CartoDBException as e: QgsMessageLog.logMessage('Some error ocurred getting tables: ' + str(e.args), 'CartoDB Plugin', QgsMessageLog.CRITICAL) QMessageBox.information(self, QApplication.translate('CartoDBPlugin', 'Error'), QApplication.translate('CartoDBPlugin', 'Error getting tables'), QMessageBox.Ok) self.ui.tablesTree.clear()
def populate_filter_tree(self): """ Populates the filter tree widget from the filter data. Called automatically from other methods when necessary. """ self.filterTreeWidget.clear() for name, manager in sorted(self.filter_managers.items()): top = QTreeWidgetItem(self.filterTreeWidget) top.setText(0, name) top.setFlags(Qt.ItemIsEnabled | Qt.ItemIsDropEnabled) top.setData(1, Qt.UserRole, self.FilterTreeRoleTop) top.setTextColor(0, Qt.gray) top.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) self.filterTreeWidget.addTopLevelItem(top) if manager.list_items(): top.setExpanded(True) for i in manager.list_items(): if isinstance(i[1], manager.FilterGroup): group = QTreeWidgetItem(top) group.setText(0, i[0]) group.setData(1, Qt.UserRole, self.FilterTreeRoleGroup) group.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDropEnabled | Qt.ItemIsDragEnabled) group.setChildIndicatorPolicy( QTreeWidgetItem.ShowIndicator) if i[1].list_items(): group.setExpanded(True) top.addChild(group) for f in i[1].list_items(): item = QTreeWidgetItem(group) item.setText(0, f[0]) if f[1].active: item.setData(0, CheckableItemDelegate.CheckedRole, True) else: item.setData(0, CheckableItemDelegate.CheckedRole, False) if i[1].exclusive: item.setData(0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.RadioCheckType) else: item.setData( 0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.CheckBoxCheckType) item.setData(1, Qt.UserRole, self.FilterTreeRoleFilter) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) group.addChild(item) else: item = QTreeWidgetItem(top) item.setText(0, i[0]) if i[1].active: item.setData(0, CheckableItemDelegate.CheckedRole, True) else: item.setData(0, CheckableItemDelegate.CheckedRole, False) item.setData(0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.CheckBoxCheckType) item.setData(1, Qt.UserRole, self.FilterTreeRoleFilter) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) top.addChild(item)
def findTables(self): self.ui.testBT.setEnabled(True) cl = CartoDBAPIKey(self.currentApiKey, self.currentUser) try: if not str(self.currentMultiuser) in ['true', '1', 'True']: sqlTables = "SELECT CDB_UserTables() table_name" res = cl.sql("WITH usertables AS (" + sqlTables + ") \ SELECT ut.table_name, c.column_name, c.data_type column_type \ FROM usertables ut \ JOIN information_schema.columns c ON c.table_name = ut.table_name \ WHERE c.data_type != 'USER-DEFINED' \ ORDER BY ut.table_name, c.column_name") else: sqlTables = "SELECT string_agg(privilege_type, ', ') AS privileges, table_schema, table_name \ FROM information_schema.role_table_grants tg \ JOIN ( \ SELECT DISTINCT u.usename \ FROM information_schema.tables t \ JOIN pg_catalog.pg_class c ON (t.table_name = c.relname) \ JOIN pg_catalog.pg_user u ON (c.relowner = u.usesysid) \ WHERE t.table_schema = '" + self.currentUser + "') u ON u.usename = tg.grantee \ WHERE table_schema NOT IN ('pg_catalog', 'information_schema', 'cartodb', 'public', 'cdb_importer') \ GROUP BY table_schema, table_name \ ORDER BY table_schema, table_name" res = cl.sql("WITH usertables AS (" + sqlTables + ") \ SELECT ut.table_name, c.column_name, c.data_type column_type, ut.privileges \ FROM usertables ut \ JOIN information_schema.columns c ON c.table_name = ut.table_name \ WHERE c.data_type != 'USER-DEFINED' \ ORDER BY ut.table_name, c.column_name") tables = [] oldTableName = None parentTableItem = None for table in res['rows']: if table['table_name'] != oldTableName: parentTableItem = QTreeWidgetItem() oldTableName = table['table_name'] parentTableItem.setText(0, self.tr(oldTableName)) parentTableItem.setIcon( 0, QIcon( ":/plugins/qgis-cartodb/images/icons/layers.png")) if str(self.currentMultiuser) in [ 'true', '1', 'True' ] and table['privileges'] == 'SELECT': parentTableItem.setTextColor(0, QColor('#999999')) tables.append(parentTableItem) tableItem = QTreeWidgetItem(parentTableItem) tableItem.setText(0, self.tr(table['column_name'])) if str(self.currentMultiuser) in [ 'true', '1', 'True' ] and table['privileges'] == 'SELECT': tableItem.setTextColor(0, QColor('#999999')) tableItem.setToolTip(0, self.tr(table['column_type'])) tableItem.setIcon( 0, QIcon(":/plugins/qgis-cartodb/images/icons/text.png")) if table['column_type'] == 'integer' or table[ 'column_type'] == 'double precision': tableItem.setIcon( 0, QIcon( ":/plugins/qgis-cartodb/images/icons/number.png")) elif table['column_type'] == 'timestamp with time zone': tableItem.setIcon( 0, QIcon( ":/plugins/qgis-cartodb/images/icons/calendar.png") ) self.setTablesListItems(tables) except CartoDBException as e: QgsMessageLog.logMessage( 'Some error ocurred getting tables: ' + str(e.args), 'CartoDB Plugin', QgsMessageLog.CRITICAL) QMessageBox.information( self, QApplication.translate('CartoDBPlugin', 'Error'), QApplication.translate('CartoDBPlugin', 'Error getting tables'), QMessageBox.Ok) self.ui.tablesTree.clear()
def populate_filter_tree(self): """ Populates the filter tree widget from the filter data. Called automatically from other methods when necessary. """ self.filterTreeWidget.clear() for name, manager in sorted(self.filter_managers.items()): top = QTreeWidgetItem(self.filterTreeWidget) top.setText(0, name) top.setFlags(Qt.ItemIsEnabled | Qt.ItemIsDropEnabled) top.setData(1, Qt.UserRole, self.FilterTreeRoleTop) top.setTextColor(0, Qt.gray) top.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) self.filterTreeWidget.addTopLevelItem(top) if manager.list_items(): top.setExpanded(True) for i in manager.list_items(): if isinstance(i[1], manager.FilterGroup): group = QTreeWidgetItem(top) group.setText(0, i[0]) group.setData(1, Qt.UserRole, self.FilterTreeRoleGroup) group.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDropEnabled | Qt.ItemIsDragEnabled) group.setChildIndicatorPolicy( QTreeWidgetItem.ShowIndicator) if i[1].list_items(): group.setExpanded(True) top.addChild(group) for f in i[1].list_items(): item = QTreeWidgetItem(group) item.setText(0, f[0]) if f[1].active: item.setData(0, CheckableItemDelegate.CheckedRole, True) else: item.setData(0, CheckableItemDelegate.CheckedRole, False) if i[1].exclusive: item.setData(0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.RadioCheckType) else: item.setData(0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.CheckBoxCheckType) item.setData(1, Qt.UserRole, self.FilterTreeRoleFilter) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) group.addChild(item) else: item = QTreeWidgetItem(top) item.setText(0, i[0]) if i[1].active: item.setData(0, CheckableItemDelegate.CheckedRole, True) else: item.setData(0, CheckableItemDelegate.CheckedRole, False) item.setData(0, CheckableItemDelegate.CheckTypeRole, CheckableItemDelegate.CheckBoxCheckType) item.setData(1, Qt.UserRole, self.FilterTreeRoleFilter) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) top.addChild(item)