def launch(bDryRun=True, project="", **kwargs): global proj, wastedNodes, dbNodeList sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project proj = DamProject(sProject) print sProject.center(80, "-") if wastedNodes is None: dbNodeList = proj.findDbNodes() wastedNodes = findWastedDbNodes(proj, dbNodeList, **kwargs) numNodes = len(wastedNodes) print "\n", "\n".join(n.file + "\n " + os.path.normpath(p) for n, p in wastedNodes) print "found {}/{} unused DbNodes".format(numNodes, len(dbNodeList)) if (not bDryRun) and numNodes: if raw_input("Delete these nodes ? (yes/no)").strip() == "yes": for n, _ in wastedNodes: print "deleting", n n.delete()
def launch(dryRun=True, project=""): app = qtGuiApp() if not app: app = QtGui.QApplication(sys.argv) sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project proj = DamProject(sProject) print sProject.center(80, "-") dbNodeDct = {} sFieldSet = set() print "Querying all dbnodes..." dbNodeList = proj.findDbNodes() print "Got {} dbnodes.".format(len(dbNodeList)) for dbnode in dbNodeList: sFieldSet.update(dbnode._data.iterkeys()) dbNodeDct.setdefault(dbnode.file.lower(), []).append(dbnode) dlg = QuickTreeDialog() treeWdg = dlg.treeWidget sFieldList = sorted(sFieldSet) sFieldList.remove("file") sFieldList.remove("#parent") sFieldList.insert(0, "file") treeWdg.setHeaderLabels(sFieldList) treeWdg.setTextElideMode(Qt.ElideLeft) topLevelItemDct = {} for sDbPath, nodes in dbNodeDct.iteritems(): x = len(nodes) if x > 1: nodes = sorted(nodes, key=lambda n:int(n.time) * .001, reverse=True) if sDbPath not in topLevelItemDct: topItem = TreeItem(treeWdg, [sDbPath]) topLevelItemDct[sDbPath] = topItem else: topItem = topLevelItemDct[sDbPath] for n in nodes: sTime = (datetime.fromtimestamp(int(n.time) / 1000) .strftime(u"%Y-%m-%d %H:%M")) n._data["time"] = sTime itemData = tuple(toUnicode(n._data.get(f, "")) for f in sFieldList) print itemData[0] item = TreeItem(topItem, itemData) item.setCheckState(0, Qt.Unchecked) item.setData(0, Qt.UserRole, n) treeWdg.expandAll() for c in xrange(treeWdg.columnCount()): treeWdg.resizeColumnToContents(c) bOk = dlg.exec_() if not bOk: return itemIter = QTreeWidgetItemIterator(treeWdg, QTreeWidgetItemIterator.Checked) toDeleteNodes = [item.value().data(0, Qt.UserRole) for item in itemIter] if toDeleteNodes: sMsg = "Delete these {} Db nodes ???".format(len(toDeleteNodes)) sConfirm = confirmDialog(title="WARNING !", message=sMsg, button=("Yes", "No"), defaultButton="No", cancelButton="No", dismissString="No", icon="warning", ) if sConfirm == "Yes": for n in toDeleteNodes: print "Deleting", n.file, n._data if not dryRun: n.delete()