class FILEINFO(Script): def __init__(self): Script.__init__(self, "fileinfo") self.vtreeprinter = VariantTreePrinter() def start(self, args): buff = "" node = args["file"].value() if args.has_key("max-items"): self.vtreeprinter.setMaxItemListToExpand(args["max-items"].value()) else: self.vtreeprinter.setMaxItemListToExpand(-1) if args.has_key("max-depth"): self.vtreeprinter.setMaxDepth(args["max-depth"].value()) else: self.vtreeprinter.setMaxDepth(-1) buff += self.fillBase(node) buff += self.fillAttributes(node) vbuff = Variant(buff) vbuff.thisown = False self.res["result"] = vbuff def fillBase(self, node): buff = "" fsobj = node.fsobj() fsobjname = "" if fsobj != None: fsobjname = fsobj.name buff += "name :\t\t" + str(node.name()) + "\n" buff += "node type :\t\t" if node.isFile(): buff += "file" if node.hasChildren(): buff += " " + "with module(s) applied on it" if node.isDir(): buff += "folder" if not node.hasChildren(): buff += " " + "empty" if node.isDeleted(): buff += " " + "deleted" buff += "\n" buff += self.fillCompatModule(node) if node.hasChildren(): buff += self.fillChildren(node) buff += "generated by:\t\t" buff += fsobjname + "\n" buff += "size:\t\t\t" buff += str(node.size()) buff += "\n" return buff def fillCompatModule(self, node): buff = "" l = node.compatibleModules() if len(l) > 0: buff += "relevant module(s) :\t" for i in l: buff += str(i) + " " buff += "\n" return buff def fillChildren(self, node): buff = "children\t\t" children = node.children() filessize = 0 filecount = 0 dircount = 0 for child in children: if child.size(): filessize += child.size() filecount += 1 elif child.isDir() or child.hasChildren(): dircount += 1 if filecount > 0: buff += "file(s)" buff += str(filecount) + " totalizing " + str(filessize) + " bytes\n" if dircount > 0: buff += "folder(s) " buff += str(dircount) + "\n" return buff def fillAttributes(self, node): buff = "" vmap = node.attributes() if len(vmap) > 0: buff = self.vtreeprinter.fillMap(1, vmap, "attributes:\n") return buff