Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()