PK4e44dirstat/TreemapView.py#!/usr/bin/env python DefaultMinTileSize = 3 MinHeightScalePercent = 10 MaxHeightScalePercent = 200 DefaultHeightScalePercent = 100 DefaultHeightScaleFactor = ( DefaultHeightScalePercent / 100.0 ) UpdateMinSize = 2 from FileInfo import FileInfoList, FileInfoListRow from SimuQT import Size, Point, Rect, Color, Canvas from SimuQT import fmtsize import os class TreemapView( object ): def __init__( self, tree, initialSize, configuration ): self._tree = tree self._rootTile = None self._selectedTile = None self._selectionRect = None self._tilestodraw = [] # Not in KDirStat self._initialSize = initialSize self._configuration = configuration self.readConfig() # self.resize( initialSize ) if tree and tree.root() : if not self._rootTile : self.rebuildTreemap( tree.root() ) def selectedTile(self) : return self._selectedTile def rootTile(self) : return self._rootTile def tree(self) : return self._tree def squarify(self) : return self._squarify def minTileSize(self) : return self._minTileSize def readConfig( self ) : # config = # self._squarify = config.readBoolEntry( "Squarify" , true ); # self._minTileSize = config.readNumEntry ( "MinTileSize" , DefaultMinTileSize ); self._squarify = True self._minTileSize = DefaultMinTileSize # Not in KDirStat self._savedRootUrl = "" def canvas( self ) : return Canvas() def tileAt( self, pos ) : tile = None for canvasitem in self.canvas().collisions( pos ) : if canvasitem : return canvasitem return None def _getparam_rebuildTreemap( self ) : root = None # [PyInfo] : root is a FileInfo if self._savedRootUrl != "" : root = self._tree.locate( self._savedRootUrl, true ) # node, findDotEntries if not root : if self._rootTile : root = _rootTile.orig() else : root = _tree.root() return ( root, self.canvas().size() ) def rebuildTreemap( self, newRoot=None, newSize=None ): needtoclean_savedRootUrl = False if not newRoot : (newRoot,newSize) = self._getparam_rebuildTreemap() needtoclean_savedRootUrl = True if not newSize : newSize = self.visibleSize() self._selectedTile = None; self._selectionRect = None; self._rootTile = None; self.canvas().resize( newSize.width(), newSize.height() ) if newSize.width() >= UpdateMinSize and newSize.height() >= UpdateMinSize : if newRoot : self._rootTile = TreemapTile( self, # parentView None, # parentTile newRoot, # orig Rect( point=Point(0, 0), size=newSize ), 'Auto' ) # if self._tree.selection() : # self.selectTile( self._tree.selection() ) if needtoclean_savedRootUrl : self._savedRootUrl = "" def visibleSize( self ) : return self._initialSize def tileColor( self, file ) : # [PyInfo] : file is a FileInfo # [TODO] : Configuration ! I don't like hardcoded colors. tabext = self._configuration.get_section('type:extension') tablowerext = self._configuration.get_section('type:extensionlower') contain = self._configuration.get_section('type:contain') exactmatch = self._configuration.get_section('type:exactmatch') colormatch = {} colorconfig = self._configuration.get_section('color') for key in colorconfig : colormatch[key] = Color(colorconfig[key]) defaultColor = colormatch.get('_',Color('purple')) if file : if file.isFile() : filename = file.name() idx = -1 idx=filename.find(".",idx+1) while idx != -1 : ext = filename[idx+1:] if tabext.has_key(ext) : return colormatch.get(tabext[ext],defaultColor) if tablowerext.has_key(ext.lower()) : return colormatch.get(tablowerext[ext.lower()],defaultColor) idx=filename.find(".",idx+1) for key in contain.keys() : if filename.find(key) != -1 : return colormatch.get(contain[key],defaultColor) for key in exactmatch.keys() : if filename == key : return colormatch.get(exactmatch[key],defaultColor) # if ( ( file->mode() & S_IXUSR ) == S_IXUSR ) return Qt::magenta; # if ??*isexec*?? : return colormatch.get('exec',defaultColor) else : return colormatch.get('dir',defaultColor) return colormatch.get('file',defaultColor) def draw(self,painter): for tile in self._tilestodraw : tile.drawShape(painter) def addTileToDraw(self,tile) : self._tilestodraw.append(tile) class TreemapTile( object ) : def __init__( self, parentView, parentTile, orig, rect, orientation = 'Auto' ) : self._rect = Rect(rect=rect) self._parentView = parentView self._parentTile = parentTile self._orig = orig self._init() self._parentView.addTileToDraw(self) self.createChildren( rect, orientation ) def rect(self) : return self._rect def orig(self) : return self._orig def parentView(self) : return self._parentView def parentTile(self) : return self._parentTile def createChildren( self, rect, orientation ) : if self._orig.totalSize() == 0 : return None #self.createChildrenSimple( rect, orientation ) if self._parentView.squarify() : self.createSquarifiedChildren( rect ) else : self.createChildrenSimple( rect, orientation ) def createChildrenSimple( self, rect, orientation ) : dir = orientation childDir = orientation if dir == 'Auto' : if rect.width() > rect.height() : dir = 'Horizontal' else : dir = 'Vertical' if orientation == 'Horizontal' : childDir = 'Vertical' if orientation == 'Vertical' : childDir = 'Horizontal' offset = 0 size = { 'Horizontal' : rect.width(), 'Vertical' : rect.height() }[dir] # count = 0 scale = (1.0*size) / (1.0*self._orig.totalSize()) fileInfoList = FileInfoList( self._orig, minSize=self._parentView.minTileSize()/scale, bySize=True, param='AsSubDir' ) # KFileInfoSortedBySizeIterator it( _orig, # (KFileSize) ( _parentView->minTileSize() / scale ), # KDotEntryAsSubDir ); for fileInfo in fileInfoList : childSize = fileInfo.totalSize() if childSize >= self._parentView.minTileSize() : if dir == 'Horizontal' : childRect = Rect( point=Point(rect.x()+offset, rect.y()), size=Size(childSize, rect.height() ) ) else : childRect = Rect( point=Point(rect.x(), rect.y()+offset), size=Size(rect.width(), childSize) ) tile = TreemapTile( self._parentView, self, fileInfo, childRect, childDir ) offset += childSize # count+=1 def createSquarifiedChildren( self, rect ) : if self._orig.totalSize() == 0 : return scale = (1.0*rect.width()) * (1.0*rect.height()) / (1.0*self._orig.totalSize()) minSize = int( self._parentView.minTileSize() / scale ) fileInfoList = FileInfoList( self._orig, minSize=minSize, bySize=True, param='AsSubDir' ) fileInfoListIterator = iter(fileInfoList) childrenRect = Rect(rect=rect) fileInfoListIterator.next_nofail() while fileInfoListIterator.isValid() : #fileInfoListIterator.next_nofail() row = self.squarify( childrenRect, scale, fileInfoListIterator ) # print " %s" % map(lambda x:x.name(),row._list) childrenRect = self.layoutRow( childrenRect, scale, row ) def squarify( self, rect, scale, it ) : row = FileInfoListRow() fileInfo = it.current() # if fileInfo : # print "** [%s]" % (fileInfo.name(),) length = max( rect.width(), rect.height() ) if length == 0 : fileInfo = it.next_nofail() # if fileInfo : # print "*- [%s]" % (fileInfo.name(),) return row improvingAspectRatio = True lastWorstAspectRatio = -1.0 sum = 0 # This is a bit ugly, but doing all calculations in the 'size' dimension # is more efficient here since that requires only one scaling before # doing all other calculations in the loop. scaledLengthSquare = length * (1.0*length) / scale while fileInfo and improvingAspectRatio : sum += fileInfo.totalSize() if (len(row)!=0) and (sum != 0) and (fileInfo.totalSize() != 0) : sumSquare = sum * sum worstAspectRatio = max( scaledLengthSquare * row.first().totalSize() / sumSquare, sumSquare / ( scaledLengthSquare * fileInfo.totalSize() ) ) if (lastWorstAspectRatio >= 0.0) and (worstAspectRatio > lastWorstAspectRatio) : improvingAspectRatio = False lastWorstAspectRatio = worstAspectRatio if improvingAspectRatio : row.append( fileInfo ) fileInfo = it.next_nofail() # if fileInfo : # print "*+ [%s]" % (fileInfo.name(),) return row def layoutRow( self, rect, scale, row ): # [TODO] if len(row) == 0 : return rect if rect.width() > rect.height() : dir = 'Horizontal' else : dir = 'Vertical' primary = max( rect.width(), rect.height() ) sum = row.sumTotalSizes() secondary = int( sum * (1.0*scale) / primary ) if sum == 0 : # Prevent division by zero. return rect if secondary < self._parentView.minTileSize() : # We don't want tiles that small. return rect offset = 0 remaining = primary for fileInfo in row : childSize = int( (1.0*fileInfo.totalSize()) / (1.0* sum) * primary + 0.5 ) if childSize > remaining : # Prevent overflow because of accumulated rounding errors childSize = remaining remaining -= childSize if childSize >= self._parentView.minTileSize() : if dir == 'Horizontal' : childRect = Rect( Point(rect.x()+offset, rect.y()), Size(childSize, secondary) ) else : childRect = Rect( Point(rect.x(), rect.y()+offset), Size(secondary, childSize) ) tile = TreemapTile( self._parentView, self, fileInfo, childRect, orientation='Auto' ) # What should I do with the tile ? offset += childSize if ( dir == 'Horizontal' ) : newRect = Rect( Point(rect.x(), rect.y()+secondary), Size(rect.width(), rect.height()-secondary) ) else : newRect = Rect( Point(rect.x()+secondary, rect.y()), Size(rect.width()-secondary, rect.height()) ) return newRect def drawShape( self, painter ): size = self.rect().size() #print "drawShape(%s) [%s] <%s>" % (self.rect(),self._orig.name(),self._parentView.tileColor( self._orig )) if size.height() < 1 or size.width() < 1 : return def iconv(name) : result = "" for letter in name : if ord(letter) < 255 : result += chr(ord(letter)) else : result += "." return result painter.addrect( x=self.rect().x(), y=self.rect().y(), width=self.rect().width(), height=self.rect().height(), color=self._parentView.tileColor( self._orig ), filename=self._orig.url(), #filenamestr=str(self._orig.url().encode('iso-8859-1','replace')), #filenamestr=str(iconv(self._orig.url())), #filenamestr=iconv(self._orig.url()), filenamestr=iconv(self._orig.url()), filesize=fmtsize(self._orig.totalSize()) ) # painter.setPen( Pen( self._parentView.outlineColor(), 1 ) ) # if self._orig.isDir() and self._orig.isDotEntry() : # painter.setBrush( self._parentView.dirFillColor() ) # else : # painter.setBrush( self._parentView.tileColor( self._orig ) ) # [TODO] : Draw what need to be drawn def _init( self ): # [TODO] : find if I need to use Z order # setZ( _parentTile ? ( _parentTile->z() + 1.0 ) : 0.0 ); # setBrush( QColor( 0x60, 0x60, 0x60 ) ); # setPen( NoPen ); pass if __name__ == '__main__' : pass PK| 4#WWdirstat/FileInfo.py#!/usr/bin/env python import os if not(hasattr(os,'walk')) : import walker os.walk = walker.walker FileSizeMax = 9223372036854775807L class FileInfo( object ): def __init__( self, tree=None, parent=None, name=None, statInfo=None, fileItem=None ): # if fileItem : # # Constructor from a KFileItem, i.e. from a KIO::StatJob # pass # elif statInfo : # # Constructor from a stat buffer (i.e. based on an lstat() call). # pass # else statInfo : # # Constructor from tree/parent/name # pass #print "Const : %s" % (( self, tree, parent, name, statInfo, fileItem ),) self._name = name or '' # the file name (without path!) self._isLocalFile = True # flag: local or remote file? self._device = 0 # device this object resides on self._mode = 0 # file permissions + object type self._links = 0 # number of links self._size = 0 # size in bytes self._blocks = 0 # 512 bytes blocks self._mtime = 0 # modification time self._parent = parent # pointer to the parent entry self._next = None # pointer to the next entry self._tree = tree # pointer to the parent tree if statInfo : self._device = statInfo.st_dev self._mode = statInfo.st_mode self._links = statInfo.st_nlink self._mtime = statInfo.st_mtime if not(self.isSpecial()) : self._size = statInfo.st_size self._blocks = getattr(statInfo,'st_blocks',int(statInfo.st_size/512L)) def isLocalFile(self) : return self._isLocalFile def name(self) : return self._name def url(self) : if self._parent : parentUrl = self._parent.url() if self.isDotEntry() : return parentUrl if parentUrl == "/" : return parentUrl + self._name else : return parentUrl + os.sep + self._name else : return self._name def urlPart( self, targetLevel ) : level = self.treeLevel() if level < targetLevel : return "" item = self while level > targetLevel : level-=1 item = item.parent() return item.name() def device(self) : return self._device def mode(self) : return self._mode def links(self) : return self._links def size(self) : return self._size def blocks(self) : return self._blocks def blockSize(self) : return 512 def mtime(self) : return self._mtime def totalSize(self) : return self._size def totalBlocks(self) : return self._blocks def totalItems(self) : return 0 def totalSubDirs(self) : return 0 def totalFiles(self) : return 0 def latestMtime(self) : return self._mtime def isMountPoint(self) : return False def setMountPoint(self,isMountPoint) : pass def isFinished(self) : return True def isBusy(self) : return False def pendingReadJobs(self) : return 0 def tree(self) : return self._tree def parent(self) : return self._parent def setParent(self,parent) : self._parent = parent def next(self) : return self._next def setNext(self,next) : self._next = next def firstChild(self) : return None def setFirstChild(self,firstChild) : pass def hasChildren(self) : return self.firstChild() or self.dotEntry() def isInSubtree(self,subtree) : ancestor = self while ancestor : if ancestor == subtree : return True ancestor = ancestor.parent() return False def locate(self, url, findDotEntries) : ## lname = len(self._name) ## if url[:lname] != self._name : ## return None ## else : # URL starts with this node's name ## url = url[lname:] # Remove leading name of this node ## if len(url) == 0 : # Nothing left? ## return self # Hey! That's us! ## if url[0] == "/" or url[0] == os.sep # If the next thing a path delimiter, ## url = url[1:] # remove that leading delimiter. ## else : # No path delimiter at the beginning ## if self._name.[-1:] != "/" and not(self.isDotEntry()) : # and this is not the root directory ## # or a dot entry: ## return None # This can't be any of our children. ## ## child = self.firstChild() ## while child : ## foundChild = child.locate( url, findDotEntries ); raise('NOT IMPLEMENTED') def insertChild(self) : pass def dotEntry(self) : return None def setDotEntry(self,dotEntry) : pass def isDotEntry(self) : return False def treeLevel(self) : level = 0 parent = self._parent while parent : level+=1 parent = parent.parent() return level def childAdded(self,newChild) : pass def unlinkChild(self) : pass def deletingChild(self) : pass def readState(self) : return 'Finished' def isDirInfo(self) : return False def isDir(self) : # print "-[%s]-[%s]" % (self._name,os.path.stat.S_ISDIR ( self._mode )) return os.path.stat.S_ISDIR ( self._mode ) def isFile(self) : return os.path.stat.S_ISREG ( self._mode ) def isSymLink(self) : return os.path.stat.S_ISLNK ( self._mode ) def isDevice(self) : return os.path.stat.S_ISBLK ( self._mode ) or os.path.stat.S_ISCHR ( self._mode ) def isBlockDevice(self) : return os.path.stat.S_ISBLK ( self._mode ) def isCharDevice(self) : return os.path.stat.S_ISCHR ( self._mode ) def isSpecial(self) : return ( os.path.stat.S_ISBLK ( self._mode ) or os.path.stat.S_ISCHR ( self._mode ) or os.path.stat.S_ISFIFO( self._mode ) or os.path.stat.S_ISSOCK( self._mode ) ) class DirInfo( FileInfo ): def __init__( self, tree=None, parent=None, name=None, statInfo=None, fileItem=None, asDotEntry=False ): FileInfo.__init__(self, tree, parent, name, statInfo, fileItem) self._isDotEntry = False # Flag: is this entry a "dot entry"? self._isMountPoint = False # Flag: is this a mount point? self._pendingReadJobs = 0 # number of open directories in this subtree # Children management self._firstChild = None # pointer to the first child self._dotEntry = None # pseudo entry to hold non-dir children # Some cached values self._totalSize = self._size self._totalBlocks = self._blocks self._totalItems = 0 self._totalSubDirs = 0 self._totalFiles = 0 self._latestMtime = self._mtime self._summaryDirty = False # dirty flag for the cached values self._beingDestroyed = False # [TODO] : Queue system self._readState = None if asDotEntry : self._isDotEntry = True self._dotEntry = None self._name = "." else : self._isDotEntry = False # self._dotEntry = DirInfo( tree=tree, parent=self, asDotEntry=True ) def totalSize(self) : if self._summaryDirty : self.recalc() return self._totalSize def totalBlocks(self) : if self._summaryDirty : self.recalc() return self._totalBlocks def totalItems(self) : if self._summaryDirty : self.recalc() return self._totalItems def totalSubDirs(self) : if self._summaryDirty : self.recalc() return self._totalSubDirs def totalFiles(self) : if self._summaryDirty : self.recalc() return self._totalFiles def latestMtime(self) : if self._summaryDirty : self.recalc() return self._latestMtime def isMountPoint(self) : return self._isMountPoint def setMountPoint(self,isMountPoint) : self._isMountPoint = isMountPoint def isFinished(self) : return not(self.isBusy()) def isBusy(self) : if self._pendingReadJobs > 0 and self._readState != 'Aborted': return True if self.readState() == 'Reading' or self.readState() == 'Queued' : self.readState() == 'Queued' return self.False def pendingReadJobs(self) : return self._pendingReadJobs def firstChild(self) : return self._firstChild def setFirstChild(self,firstChild) : self._firstChild = firstChild def insertChild(self,newChild) : if newChild.isDir() or (self._dotEntry == None) or self._isDotEntry : # print "-[%s]-[%s]-[%s]" % (self._name,newChild._name,'YES') # Only directories are stored directly in pure directory nodes - # unless something went terribly wrong, e.g. there is no dot entry to use. # If this is a dot entry, store everything it gets directly within it. # # In any of those cases, insert the new child in the children list. # # We don't bother with this list's order - it's explicitly declared to # be unordered, so be warned! We simply insert this new child at the # list head since this operation can be performed in constant time # without the need for any additional lastChild etc. pointers or - # even worse - seeking the correct place for insertion first. This is # none of our business; the corresponding "view" object for this tree # will take care of such niceties. newChild.setNext( self._firstChild ) self._firstChild = newChild newChild.setParent( self ) # make sure the parent pointer is correct self.childAdded( newChild ) # update summaries else : # print "-[%s]-[%s]-[%s]" % (self._name,newChild._name,'NAD') # If the child is not a directory, don't store it directly here - use # this entry's dot entry instead. self._dotEntry.insertChild( newChild ) def dotEntry(self) : return self._dotEntry def setDotEntry(self,dotEntry) : self._dotEntry = dotEntry def isDotEntry(self) : return self._isDotEntry def childAdded(self,newChild) : if not(self._summaryDirty) : self._totalSize += newChild.totalSize() self._totalBlocks += newChild.totalBlocks() self._totalItems += 1 if newChild.isDir() : self._totalSubDirs+=1 if newChild.isFile() : self._totalFiles+=1 if newChild.mtime() > self._latestMtime : self._latestMtime = newChild.mtime() else : pass # Don't bother updating the summary fields if the summary is dirty # (i.e. outdated) anyway: As soon as anybody wants to know some exact # value a complete recalculation of the entire subtree will be # triggered. On the other hand, if nobody wants to know (which is very # likely) we can save this effort. if self._parent : self._parent.childAdded( newChild ) def unlinkChild(self,deletedChild) : if deletedChild.parent() != self : return None if deletedChild == self._firstChild : self._firstChild = deletedChild.next() return child = firstChild() while child : if child.next() == deletedChild : child.setNext( deletedChild.next() ) return child = child.next() def deletingChild(self,deletedChild) : # When children are deleted, things go downhill: Marking the summary # fields as dirty (i.e. outdated) is the only thing that can be done here. # # The accumulated sizes could be updated (by subtracting this deleted # child's values from them), but the latest mtime definitely has to be # recalculated: The child now being deleted might just be the one with the # latest mtime, and figuring out the second-latest cannot easily be # done. So we merely mark the summary as dirty and wait until a recalc() # will be triggered from outside - which might as well never happen when # nobody wants to know some summary field anyway. self._summaryDirty = True if self._parent : self._parent.deletingChild( deletedChild ) if not(self._beingDestroyed) and (deletedChild.parent() == self) : # Unlink the child from the children's list - but only if this doesn't # happen recursively in the destructor of this object: No use # bothering about the validity of the children's list if this will all # be history anyway in a moment. unlinkChild( deletedChild ) def readJobAdded(self) : self._pendingReadJobs+=1 if self._parent : self._parent.readJobAdded() def readJobFinished(self) : self._pendingReadJobs-=1 if self._parent : self._parent.readJobFinished() def readJobAborted(self) : self._readState = 'Aborted' if self._parent : self._parent.readJobAborted() def finalizeLocal(self) : self.cleanupDotEntries() def readState(self) : if self._isDotEntry and self._parent : return self._parent.readState() else : return self._readState def setReadState(self,readState) : if self._readState == 'Aborted' and newReadState == 'Finished' : return self._readState = newReadState def isDirInfo(self) : return True def recalc(self) : self._totalSize = self._size self._totalBlocks = self._blocks self._totalItems = 0 self._totalSubDirs = 0 self._totalFiles = 0 self._latestMtime = self._mtime for fileInfo in FileInfoList(self,'AsSubDir') : self._totalSize += fileInfo.totalSize() self._totalBlocks += fileInfo.totalBlocks() self._totalItems += fileInfo.totalItems() + 1 self._totalSubDirs += fileInfo.totalSubDirs() self._totalFiles += fileInfo.totalFiles() if fileInfo.isDir() : self._totalSubDirs+=1 if fileInfo.isFile() : self._totalFiles+=1 childLatestMtime = fileInfo.latestMtime() if childLatestMtime > self._latestMtime : self._latestMtime = childLatestMtime self._summaryDirty = False def cleanupDotEntries(self) : if not(self._dotEntry) or self._isDotEntry : return # Reparent dot entry children if there are no subdirectories on this level if not(self._firstChild) : child = self._dotEntry.firstChild() self._firstChild = child; # Move the entire children chain here. self._dotEntry.setFirstChild( 0 ) # self._dotEntry will be deleted below. while child : child.setParent( self ) child = child.next() if not( self._dotEntry.firstChild() ) : self._dotEntry = None class FileTree( object ) : def __init__(self, rootpath=None) : self._rootpath = rootpath self._root = None def root( self ) : return self._root def scan( self, rootpath=None ) : if rootpath : self._rootpath = rootpath self._root = None pathinfos = {} for infopath in os.walk(self._rootpath,False) : #print "[%s]" % (pathinfos,) (path,subpaths,files) = infopath if path == self._rootpath : name = path else : name = os.path.split(path)[1] dirInfo = DirInfo( name=name, statInfo=os.lstat(path), tree=self ) pathinfos[path] = dirInfo for file in files : completepath = os.path.join(path,file) try : fileInfo = FileInfo( name=file, statInfo=os.lstat(completepath), tree=self, parent=dirInfo ) dirInfo.insertChild(fileInfo) except : pass for subpath in subpaths : completepath = os.path.join(path,subpath) if completepath in pathinfos : # print "[%s] : %d v (%s)" % (subpath,pathinfos[completepath].totalSize(),completepath) dirInfo.insertChild(pathinfos[completepath]) # print "[%s] : %d ^ (%s)" % (subpath,pathinfos[completepath].totalSize(),completepath) del pathinfos[completepath] dirInfo.finalizeLocal() if path == self._rootpath : self._root = dirInfo # print "[%s]" % (pathinfos,) return self._root class FileInfoList( object ) : def __init__( self, fileInfo, param=None, bySize=False, minSize=None ) : self._fileInfo = fileInfo self._param = param self._bySize = bySize self._minSize = minSize def __iter__(self) : class FileInfoListIterator( object ): def next(self) : fileInfo = self.next_nofail() if fileInfo : return fileInfo else : raise StopIteration() class FileInfoListIteratorSort( FileInfoListIterator ): def __init__(self, fileInfo, fileInfoList) : self._fileInfoList = fileInfoList currentFileInfo = fileInfo self._fileInfoListSorted = [] while currentFileInfo : if not(self._fileInfoList._minSize) or currentFileInfo.totalSize() >= self._fileInfoList._minSize : self._fileInfoListSorted.append(currentFileInfo) currentFileInfo = currentFileInfo.next() self._sort() self._index = -1 def isValid(self) : return (self._index < len(self._fileInfoListSorted)) and (self._index >= 0) def current(self) : if self.isValid() : return self._fileInfoListSorted[self._index] else : return None def next_nofail(self) : self._index += 1 return self.current() def next(self) : fileInfo = self.next_nofail() if fileInfo : return fileInfo else : raise StopIteration() class FileInfoListIteratorDefault( FileInfoListIterator ): def __init__(self, fileInfo, fileInfoList) : self._fileInfo = fileInfo self._fileInfoList = fileInfoList def isValid(self) : if self._fileInfo : return True return False def current(self) : return self._fileInfo def next_nofail(self) : if self.isValid() : fileInfo = self._fileInfo self._fileInfo = fileInfo.next() while self._fileInfo and self._fileInfoList._minSize and self._fileInfo.totalSize() < self._fileInfoList._minSize : self._fileInfo = fileInfo.next() return fileInfo else : return None iteratorclass = FileInfoListIteratorDefault if self._bySize : class FileInfoListIteratorBySize( FileInfoListIteratorSort ): def _sort(self) : self._fileInfoListSorted.sort(lambda x,y:-cmp(x.totalSize(),y.totalSize())) iteratorclass = FileInfoListIteratorBySize return iteratorclass(self._fileInfo.firstChild(),self) class FileInfoListRow( object ) : def __init__(self) : self._list = [] self._sum = 0 def __len__(self) : return len(self._list) def first(self) : return self._list[0] def append(self,fileInfo) : self._sum += fileInfo.totalSize() return self._list.append(fileInfo) def sumTotalSizes(self) : return self._sum def __iter__(self): return iter(self._list) def test(): f = FileTree(rootpath='c:\\home\\gissehel').scan() print "(%d,%d)" % (f.totalSize(),f.size()) print "(%d)" % (f.totalSubDirs(),) print "(%d)" % (f.totalItems(),) if __name__ == '__main__' : test()PK4oRRdirstat/Dumper.py#!/usr/bin/env python import os import time import sys from FileInfo import FileTree from Configuration import Configuration from TreemapView import TreemapView from __version__ import __version__ from SimuQT import Size,Color from SimuQT import fmtsize class FileDumper( object ) : EXT=".dump" NEEDHANDLE=True def __init__(self, rootpath=None, outputfile=None, size=None, tree=None, configuration=None) : self._configuration = configuration if self._configuration == None : self._configuration = Configuration() if rootpath == None and self._configuration.get_value('path') != '' : rootpath = self._configuration.get_value('path') # Gruik Gruik : C:" -> C:\ Thanks Windows ! if rootpath and (len(rootpath)==3) and (rootpath[2]) == '"' : rootpath = rootpath[0:2] + '\\' if (rootpath == None) and (tree==None) : rootpath = '.' if rootpath != None : if os.path.supports_unicode_filenames : rootpath = unicode(rootpath) else : rootpath = str(rootpath) tree = FileTree(rootpath) tree.scan() self._rootpath = rootpath self._tree = tree filename = outputfile if filename == None : filename = self._configuration.get_value('outputfile') if filename == '' : if os.path.isdir(rootpath) : filename = os.path.join(rootpath,self._configuration.get_value('basename')+self.EXT) else : name = os.path.split(rootpath)[1] filename = name + '.' + self._configuration.get_value('basename') + self.EXT self._filename = filename self._size = size def dump(self,gsize=None) : if gsize != None : self._size = gsize if self._size == None : self._size = Size(self._configuration.get_value('width'),self._configuration.get_value('height')) self._tmv = TreemapView( self._tree, self._size, self._configuration ) size = self._tmv.visibleSize() if self.NEEDHANDLE : self._file = file(self._filename,'wt') self._start_dump() self._tmv.draw(self) self._end_dump() if self.NEEDHANDLE : self._file.close() def get_metadata(self) : '''This method may be called by plugin to print metadata''' return [ ('Generator', 'pydirstat'), ('Version', __version__), ('Directory', os.path.abspath(self._rootpath)), ('Date', time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())), ('Configuration File',self._configuration.get_filename()), ('Total Size',fmtsize(self._tmv.rootTile().orig().totalSize())), ('Python version',sys.version), ] def get_colors(self) : method_by_type = {} types = [] colors = {} for section_name in self._configuration.get_sections() : if section_name.startswith('type:') : section_content = self._configuration.get_section(section_name) for key in section_content : value = section_content[key] if value not in method_by_type : method_by_type[value] = {} if section_name not in method_by_type[value] : method_by_type[value][section_name] = [] method_by_type[value][section_name].append(key) if value not in types : types.append(value) elif section_name == 'color' : colors_conf = self._configuration.get_section('color') for color in colors_conf : colors[color] = Color(colors_conf[color]) types.sort() if 'file' not in types : types.append('file') if 'dir' not in types : types.append('dir') if '_' not in types : types.append('_') for typename in types : if typename not in colors : colors[typename] = colors['_'] return types,colors,method_by_type def _start_dump(self) : '''You should override this method. Called once before starting dump.''' pass def _end_dump(self) : '''You should override this method. Called once after dumping all rectangle.''' pass def addrect(self,**kwargs) : '''You should override this method. It will be called on each rectangle. kwargs contains x,y,width,height,filename,filesize,color...''' pass PK4"B B dirstat/__init__.py#!/usr/bin/env python # from HTMLDumper import Dumper from SimuQT import Size from CommandLine import CommandLine, ParseError from Configuration import Configuration import sys import encodings import imp import os from __version__ import __version__ def config() : configuration = Configuration() for key in configuration : if configuration.need_configure(key) : doc = configuration.get_doc(key) strvalue = configuration.get_strvalue(key) print "%s ?[%s]" % (doc,strvalue) line = sys.stdin.readline().replace('\r','').replace('\n','') if line != '' : configuration.set_strvalue(key,line) configuration.save() print "The file %s has been updated. Press RETURN to continue." % (configuration.get_filename(),) sys.stdin.readline() def main() : commandline = CommandLine(sys.argv) e = None try : #if True : action = commandline.parse() if action == CommandLine.ACTION_DUMP : configuration = Configuration() dumpername = configuration.get_value('dumper') pluginpath = [] pluginsubpath = os.path.join('dirstat','Dumpers') if os.path.exists(sys.argv[0]) : pluginpath.append(os.path.join(os.path.dirname(sys.argv[0]),pluginsubpath)) if configuration.get_value('pluginpath') != '' : pluginpath.append(os.path.join(configuration.get_value('pluginpath'),pluginsubpath)) pluginpath.append(configuration.get_value('pluginpath')) for pathname in sys.path : pluginpath.append(os.path.join(pathname,pluginsubpath)) try : modulename = dumpername #print (modulename,pluginpath) moduleinfo = imp.find_module(modulename,pluginpath) #print (moduleinfo,) module = imp.load_module(modulename,*moduleinfo) moduleinfo[0].close() Dumper = module.Dumper Dumper().dump() except ImportError : raise ParseError('Dumper %s cannot be loaded' % (dumpername,)) elif action == CommandLine.ACTION_USAGE : print commandline.get_usage(), elif action == CommandLine.ACTION_VERSION : print commandline.get_version_text(), elif action == CommandLine.ACTION_CONFIG : config() except (ParseError,ValueError), e : print commandline.get_usage() raise e if __name__ == '__main__' : sys.argv = ['praf','--dumper=HTML',] main() PK4 Adirstat/__version__.py__version__ = "0.9.13" PK45--dirstat/SimuQT.py#!/usr/bin/env python class BiXY( object ) : def __init__( self, x=0, y=0 ) : self._affect(x,y) def x(self, x=None) : if x != None : self._x = x return self._x def y(self, y=None) : if y != None : self._y = y return self._y def zero(self) : self._affect() def _affect(self, x=0, y=0) : self.x(x) self.y(y) def _copyfrom(self, fromobj) : self._affect(fromobj.x(),fromobj.y()) def __str__(self): return "%s(%dx%d)" % (type(self).__name__,self.x(),self.y()) def __add__(self,bi): return type(self)(self.x()+bi.x(),self.y()+bi.y()) class Point( BiXY ) : pass class Size( BiXY ) : pass Size.width = Size.x Size.height = Size.y class Rect( Point ) : def __init__( self, point=None, size=None, rect=None ) : if not(rect) : if not(point) : point=Point() if not(size) : size=Size() else : if not(point) : point=rect.point() if not(size) : size=rect.size() self._copyfrom(point) self._size = Size() self._size._copyfrom(size) self.width = self._size.width self.height = self._size.height def point(self): return Point(self.x(),self.y()) def size(self): return Size(self.width(),self.height()) def __str__(self): return "%s(%dx%d+%d+%d)" % (type(self).__name__,self.width(),self.height(),self.x(),self.y()) def __add__(self,bi): return type(self)(point=self.point()+bi,size=self.size()) class Color( object ): COLORCONV = { 'aliceblue' : (240, 248, 255) , 'antiquewhite' : (250, 235, 215) , 'aqua' : ( 0, 255, 255) , 'aquamarine' : (127, 255, 212) , 'azure' : (240, 255, 255) , 'beige' : (245, 245, 220) , 'bisque' : (255, 228, 196) , 'black' : ( 0, 0, 0) , 'blanchedalmond' : (255, 235, 205) , 'blue' : ( 0, 0, 255) , 'blueviolet' : (138, 43, 226) , 'brown' : (165, 42, 42) , 'burlywood' : (222, 184, 135) , 'cadetblue' : ( 95, 158, 160) , 'chartreuse' : (127, 255, 0) , 'chocolate' : (210, 105, 30) , 'coral' : (255, 127, 80) , 'cornflowerblue' : (100, 149, 237) , 'cornsilk' : (255, 248, 220) , 'crimson' : (220, 20, 60) , 'cyan' : ( 0, 255, 255) , 'darkblue' : ( 0, 0, 139) , 'darkcyan' : ( 0, 139, 139) , 'darkgoldenrod' : (184, 134, 11) , 'darkgray' : (169, 169, 169) , 'darkgreen' : ( 0, 100, 0) , 'darkgrey' : (169, 169, 169) , 'darkkhaki' : (189, 183, 107) , 'darkmagenta' : (139, 0, 139) , 'darkolivegreen' : ( 85, 107, 47) , 'darkorange' : (255, 140, 0) , 'darkorchid' : (153, 50, 204) , 'darkred' : (139, 0, 0) , 'darksalmon' : (233, 150, 122) , 'darkseagreen' : (143, 188, 143) , 'darkslateblue' : ( 72, 61, 139) , 'darkslategray' : ( 47, 79, 79) , 'darkslategrey' : ( 47, 79, 79) , 'darkturquoise' : ( 0, 206, 209) , 'darkviolet' : (148, 0, 211) , 'deeppink' : (255, 20, 147) , 'deepskyblue' : ( 0, 191, 255) , 'dimgray' : (105, 105, 105) , 'dimgrey' : (105, 105, 105) , 'dodgerblue' : ( 30, 144, 255) , 'firebrick' : (178, 34, 34) , 'floralwhite' : (255, 250, 240) , 'forestgreen' : ( 34, 139, 34) , 'fuchsia' : (255, 0, 255) , 'gainsboro' : (220, 220, 220) , 'ghostwhite' : (248, 248, 255) , 'gold' : (255, 215, 0) , 'goldenrod' : (218, 165, 32) , 'gray' : (128, 128, 128) , 'grey' : (128, 128, 128) , 'green' : ( 0, 128, 0) , 'greenyellow' : (173, 255, 47) , 'honeydew' : (240, 255, 240) , 'hotpink' : (255, 105, 180) , 'indianred' : (205, 92, 92) , 'indigo' : ( 75, 0, 130) , 'ivory' : (255, 255, 240) , 'khaki' : (240, 230, 140) , 'lavender' : (230, 230, 250) , 'lavenderblush' : (255, 240, 245) , 'lawngreen' : (124, 252, 0) , 'lemonchiffon' : (255, 250, 205) , 'lightblue' : (173, 216, 230) , 'lightcoral' : (240, 128, 128) , 'lightcyan' : (224, 255, 255) , 'lightgoldenrodyellow' : (250, 250, 210), 'lightgray' : (211, 211, 211) , 'lightgreen' : (144, 238, 144) , 'lightgrey' : (211, 211, 211) , 'lightpink' : (255, 182, 193) , 'lightsalmon' : (255, 160, 122) , 'lightseagreen' : ( 32, 178, 170) , 'lightskyblue' : (135, 206, 250) , 'lightslategray' : (119, 136, 153) , 'lightslategrey' : (119, 136, 153) , 'lightsteelblue' : (176, 196, 222) , 'lightyellow' : (255, 255, 224) , 'lime' : ( 0, 255, 0) , 'limegreen' : ( 50, 205, 50) , 'linen' : (250, 240, 230) , 'magenta' : (255, 0, 255) , 'maroon' : (128, 0, 0) , 'mediumaquamarine' : (102, 205, 170) , 'mediumblue' : ( 0, 0, 205) , 'mediumorchid' : (186, 85, 211) , 'mediumpurple' : (147, 112, 219) , 'mediumseagreen' : ( 60, 179, 113) , 'mediumslateblue' : (123, 104, 238) , 'mediumspringgreen' : ( 0, 250, 154) , 'mediumturquoise' : ( 72, 209, 204) , 'mediumvioletred' : (199, 21, 133) , 'midnightblue' : ( 25, 25, 112) , 'mintcream' : (245, 255, 250) , 'mistyrose' : (255, 228, 225) , 'moccasin' : (255, 228, 181) , 'navajowhite' : (255, 222, 173) , 'navy' : ( 0, 0, 128) , 'oldlace' : (253, 245, 230) , 'olive' : (128, 128, 0) , 'olivedrab' : (107, 142, 35) , 'orange' : (255, 165, 0) , 'orangered' : (255, 69, 0) , 'orchid' : (218, 112, 214) , 'palegoldenrod' : (238, 232, 170) , 'palegreen' : (152, 251, 152) , 'paleturquoise' : (175, 238, 238) , 'palevioletred' : (219, 112, 147) , 'papayawhip' : (255, 239, 213) , 'peachpuff' : (255, 218, 185) , 'peru' : (205, 133, 63) , 'pink' : (255, 192, 203) , 'plum' : (221, 160, 221) , 'powderblue' : (176, 224, 230) , 'purple' : (128, 0, 128) , 'red' : (255, 0, 0) , 'rosybrown' : (188, 143, 143) , 'royalblue' : ( 65, 105, 225) , 'saddlebrown' : (139, 69, 19) , 'salmon' : (250, 128, 114) , 'sandybrown' : (244, 164, 96) , 'seagreen' : ( 46, 139, 87) , 'seashell' : (255, 245, 238) , 'sienna' : (160, 82, 45) , 'silver' : (192, 192, 192) , 'skyblue' : (135, 206, 235) , 'slateblue' : (106, 90, 205) , 'slategray' : (112, 128, 144) , 'slategrey' : (112, 128, 144) , 'snow' : (255, 250, 250) , 'springgreen' : ( 0, 255, 127) , 'steelblue' : ( 70, 130, 180) , 'tan' : (210, 180, 140) , 'teal' : ( 0, 128, 128) , 'thistle' : (216, 191, 216) , 'tomato' : (255, 99, 71) , 'turquoise' : ( 64, 224, 208) , 'violet' : (238, 130, 238) , 'wheat' : (245, 222, 179) , 'white' : (255, 255, 255) , 'whitesmoke' : (245, 245, 245) , 'yellow' : (255, 255, 0) , 'yellowgreen' : (154, 205, 50) , } def __init__( self, arg=None, g=None, b=None ): if b!=None : (self._r, self._g, self._b) = (arg, g, b) self._colorname = None else : self._colorname = arg colors = self.COLORCONV.get(arg,None) if colors : (self._r, self._g, self._b) = colors else : colok_ok = False HEXDIGITS = '0123456789abcdef' if (self._colorname[0] == '#') and (len(self._colorname) in (4,7)) : listcolor = [] for hexdigit in self._colorname[1:].lower() : if hexdigit in HEXDIGITS : listcolor.append(HEXDIGITS.index(hexdigit)) if len(listcolor) == 3 : (self._r, self._g, self._b) = (listcolor[0]*0x11,listcolor[1]*0x11,listcolor[2]*0x11) colok_ok = True if len(listcolor) == 6 : (self._r, self._g, self._b) = (listcolor[0]*0x10+listcolor[1],listcolor[2]*0x10+listcolor[3],listcolor[4]*0x10+listcolor[5]) colok_ok = True if not(colok_ok) : (self._r, self._g, self._b) = (0x33, 0x33, 0x33) def get_svgcolor( self ): if self._colorname : return self._colorname return self.get_htmlcolor() def get_htmlcolor( self ): return '#%02x%02x%02x' % ( self._r, self._g, self._b ) def get_htmlcolor_extended( self, func ): return '#%02x%02x%02x' % ( func(self._r), func(self._g), func(self._b) ) def get_rgb( self ): return ( self._r, self._g, self._b ) def __str__( self ): return self.get_htmlcolor() def __repr__( self ): return "Color(0x%02d,0x%02x,0x%02x)" % (self._r, self._g, self._b) class Canvas( object ): def __init__( self ) : self._size = Size() def size( self ) : return self._size def resize( self, width, height ) : self._size = Size(width, height) def fmtsize(size) : size = "%d" % (size,) newsize = "" while len(size) > 0 : if newsize != "" : newsize = " " + newsize newsize = size[-3:] + newsize size = size[:-3] return newsize def test(): r = Point(7,4) s = Size(100,600) print "r : %s" % (r,) print "s : %s" % (s,) print "r+s : %s" % (r+s,) t = Rect(point=r,size=s) print "t : %s" % (t,) print "t+r : %s" % (t+r,) print "t+t : %s" % (t+t,) print "t+s : %s" % (t+s,) print Color('cyan') if __name__ == '__main__' : test() PK| 4Mdirstat/walker.py#!/usr/bin/python import os class walker( object ): def __init__(self,path,order=False) : self._path = path def __iter__(self) : self._result = [] self._tmpresult = {} os.path.walk(self._path,walker.callback,self) self._index = len(self._result) return self def next(self) : if self._index > 0: self._index-=1 # print self._result[self._index] return self._result[self._index] raise StopIteration def callback(self, path, files) : dirs = [] fileonlys = [] for file in files : if os.path.isdir(os.path.join(path,file)) : dirs.append(file) else : fileonlys.append(file) self._tmpresult[path] = (path,dirs,fileonlys) self._result.append((path,dirs,fileonlys)) PK4Gdirstat/CommandLine.py#!/usr/bin/env python # -*- coding : iso-8859-1 -*- from Configuration import Configuration from Configuration import schema import os from __version__ import __version__ schema_default = ['path','width','height','outputfile'] class ParseError(Exception) : pass class CommandLine(object) : ACTION_NONE = 0 ACTION_DUMP = 1 ACTION_USAGE = 2 ACTION_CONFIG = 3 ACTION_VERSION = 4 def __init__(self,commandline) : self._commandline = commandline def parse(self) : configuration = Configuration() minialiases = {} aliases = {} for key in schema : if 'minialias' in schema[key] : for letter in schema[key]['minialias'] : minialiases[letter] = key aliases[key] = key rest = [] remaining_args_to_parse = [] next_arg_is_value = False next_arg_key = None no_name_offset = 0 for arg in self._commandline[1:] : if len(remaining_args_to_parse) > 0 : configuration.set_strvalue(remaining_args_to_parse[0],arg) remaining_args_to_parse = remaining_args_to_parse[1:] elif arg[:2] == '--' : if '=' in arg : (key,value) = arg[2:].split('=',1) else : (key,value) = (arg[2:],'') if key in aliases : if schema[aliases[key]]['needvalue'] : configuration.set_strvalue(aliases[key],value) else : configuration.set_strvalue(aliases[key],1) else : # error raise ParseError('parameter %s does not exist' % (key,)) elif arg[:1] == '-' : for letter in arg[1:] : if letter in minialiases : key = minialiases[letter] if schema[key]['needvalue'] : remaining_args_to_parse.append(key) else : configuration.set_strvalue(key,'1') else : # error raise ParseError('miniparameter %s does not exist' % (letter,)) else : if no_name_offset 0 : raise ParseError('need value for parameter %s' % (remaining_args_to_parse[0],)) if configuration.get_value('help') != 0 : return self.ACTION_USAGE if configuration.get_value('version') != 0 : return self.ACTION_VERSION if configuration.get_value('config') != 0 : return self.ACTION_CONFIG return self.ACTION_DUMP def get_usage(self) : configuration = Configuration() usage = '%s [OPTION]...' % (os.path.basename(self._commandline[0]),) for key in schema_default : if key in schema : if 'cmdlinename' in schema[key] : usage += ' [%s]' % (schema[key]['cmdlinename'] ,) else : # strange error pass else : # strange error pass usage += '\n' usage += 'Get informations about a directory.\n' usage += '\n' usage += 'Options may be :\n' for key in configuration : if schema[key]['needvalue'] : partline = ' -%s, --%s=%s' % (schema[key]['minialias'],key,schema[key]['cmdlinename']) else : partline = ' -%s, --%s' % (schema[key]['minialias'],key,) partline += ' '*(30-len(partline)) partline += '%s\n' % (schema[key]['doc']['en'],) usage += partline str # usage += '\n' return usage def get_version_text(self) : output = '%s %s\n' % (os.path.basename(self._commandline[0]),__version__) return output def test() : cl = CommandLine(['poide','KUUU','-fhw','88888','45','1','7']) cl.parse() print cl.get_usage() configuration = Configuration() configuration.show() if __name__ == '__main__' : test() PK4%̭77dirstat/Configuration.py#!/usr/bin/env python # -*- coding : iso-8859-1 -*- import os import sys CONFIGURATION_NAME = '.pydirstat.ini' schema = { 'width' : { 'default' : '810', 'type' : int, 'minialias' : 'w', 'doc' : { 'en' : "Width of the graphic", 'fr' : "Largeur du graphique en pixel", }, 'sortidx' : 0, 'needvalue' : True, 'cmdlinename' : 'WIDTH', }, 'height' : { 'default' : '540', 'type' : int, 'minialias' : 'h', 'doc' : { 'en' : "Height of the graphic", 'fr' : "Hauteur du graphique en pixel", }, 'sortidx' : 1, 'needvalue' : True, 'cmdlinename' : 'HEIGHT', }, 'basename' : { 'default' : 'dirstat', 'type' : str, 'minialias' : 'b', 'doc' : { 'en' : "Basename of the final file", 'fr' : "Base du nom du fichier final", }, 'sortidx' : 10, 'needvalue' : True, 'cmdlinename' : 'BASENAME', }, 'outputfile' : { 'default' : '', 'type' : str, 'minialias' : 'f', 'nosave' : True, 'doc' : { 'en' : "Final filename", 'fr' : "Nom du fichier final", }, 'sortidx' : 100, 'needvalue' : True, 'cmdlinename' : 'FILE', }, 'path' : { 'default' : '', 'type' : str, 'minialias' : 'p', 'nosave' : True, 'doc' : { 'en' : "The path to analyse", 'fr' : "Le dossier a analyser", }, 'sortidx' : 100, 'needvalue' : True, 'cmdlinename' : 'PATH', }, 'help' : { 'default' : 0, 'type' : bool, 'minialias' : 'H', 'nosave' : True, 'doc' : { 'en' : "Show help", 'fr' : "Affiche l'aide", }, 'sortidx' : 999, 'needvalue' : False, 'cmdlinename' : 'HELP', }, 'version' : { 'default' : 0, 'type' : bool, 'minialias' : 'v', 'nosave' : True, 'doc' : { 'en' : "Show version", 'fr' : "Affiche le numero de version", }, 'sortidx' : 999, 'needvalue' : False, 'cmdlinename' : 'VERSION', }, 'config' : { 'default' : 0, 'type' : bool, 'minialias' : 'c', 'nosave' : True, 'doc' : { 'en' : "Start configuration mode", 'fr' : "Lance le mode configuration", }, 'sortidx' : 200, 'needvalue' : False, 'cmdlinename' : 'CFG', }, 'dumper' : { 'default' : 'HTML', 'type' : str, 'minialias' : 'd', 'nosave' : False, 'doc' : { 'en' : "Dumper used", 'fr' : "Generateur a utiliser", }, 'sortidx' : 50, 'needvalue' : True, 'cmdlinename' : 'DUMPER', }, 'pluginpath' : { 'default' : '', 'type' : str, 'minialias' : 'P', 'nosave' : False, 'doc' : { 'en' : "Path to plugins", 'fr' : "Chemin des plugins", }, 'sortidx' : 100, 'needvalue' : True, 'cmdlinename' : 'PPATH', }, } othersections = { 'type:extension' : { "~" : 'tmp', "bak" : 'tmp', "c" : 'dev', "cpp" : 'dev', "cc" : 'dev', "h" : 'dev', "hpp" : 'dev', "el" : 'dev', "y" : 'dev', "l" : 'dev', "py" : 'dev', "pl" : 'dev', "sh" : 'dev', "o" : 'compiled', "lo" : 'compiled', "Po" : 'compiled', "al" : 'compiled', "moc.cpp" : 'compiled', "moc.cc" : 'compiled', "elc" : 'compiled', "la" : 'compiled', "a" : 'compiled', "rpm" : 'compiled', "pyc" : 'compiled', }, 'type:extensionlower' : { "tar.bz2" : 'compress' , "tar.gz" : 'compress' , "tgz" : 'compress' , "bz2" : 'compress' , "bz" : 'compress' , "gz" : 'compress' , "html" : 'document' , "htm" : 'document' , "txt" : 'document' , "doc" : 'document' , "png" : 'image' , "jpg" : 'image' , "jpeg" : 'image' , "gif" : 'image' , "tif" : 'image' , "tiff" : 'image' , "bmp" : 'image' , "xpm" : 'image' , "tga" : 'image' , "svg" : 'image' , "wav" : 'sound' , "mp3" : 'sound' , "avi" : 'movie' , "mov" : 'movie' , "mpg" : 'movie' , "mpeg" : 'movie' , "wmv" : 'movie' , "asf" : 'movie' , "ogm" : 'movie' , "mkv" : 'movie' , "pdf" : 'document' , "ps" : 'image' , "exe" : 'exec', "com" : 'exec', "dll" : 'lib', "zip" : 'compress', "rar" : 'compress', "arj" : 'compress', "iso" : 'compress', "bpk" : 'dev', "tds" : 'compiled', "obj" : 'compiled', "bpl" : 'lib', }, 'type:contain' : { ".so." : 'lib', }, 'type:exactmatch' : { "core" : 'tmp', }, 'color' : { 'tmp' : 'red', 'dev' : 'slateblue', 'document' : 'blue', 'compiled' : 'darkblue', 'compress' : 'green', 'image' : 'darkred', 'sound' : 'yellow', 'movie' : '#a0ff00', 'lib' : '#ffa0a0', 'exec' : 'magenta', 'file' : 'lightblue', 'dir' : 'white', '_' : 'purple', }, } class _Configuration (object) : def __init__(self,load=True) : self._schema = schema self._strvalues = {} self._values = {} self._othersections = {} self._filename = None if load : self.load() def get_filename(self,filename=None) : if filename == None : home = os.path.expanduser('~') if not os.path.isdir(home) : # Now, we're not on unix-like environnement, nor under Win NT/2k/XP, look like Win9x !!!! paths_to_test = [] if 'HOME' in os.environ : paths_to_test.append(os.environ['HOME']) if len(sys.argv) >= 1 : exe_path = os.path.split(sys.argv[0])[0] if exe_path == '' : exe_path = '.' paths_to_test.append(exe_path) # We're desperate, we didn't find neither somathing looking like a "home" so we try to save config files in tmp dir !!! if 'TEMP' in os.environ : paths_to_test.append(os.environ['TEMP']) # We're desperate, we didn't find neither somathing looking like a "home" so we try to save config files in tmp dir !!! if 'TMP' in os.environ : paths_to_test.append(os.environ['TMP']) # As an ultimate try, we'll store this in C:\ !!! At least Win 95 have it (yes, that's Win 95 who is bothering me !) paths_to_test.append(os.environ['TMP']) for path in paths_to_test : if os.path.isdir(path) : home = path break filename = os.path.join(home,CONFIGURATION_NAME) elif self._filename != None : filename = self._filename return filename def _get_value_from_strvalue(self,key,strvalue) : keytype = self._schema[key].get('type',str) functable = { bool : lambda x:str(x).lower() not in ('0','','False') } if keytype in functable : return functable[keytype](strvalue) return keytype(strvalue) def _get_strvalue_from_value(self,key,value) : keytype = self._schema[key].get('type',str) if keytype in functable : return functable[keytype](value) return "%s" % (value,) def load(self,filename=None) : filename = self.get_filename(filename) if os.path.isfile(filename) : self._filename = filename handle = open(filename,'rt') mode = '' for line in handle : line = line.replace('\r','').replace('\n','') if len(line)>0 and line[0] == '[' : mode = '' if len(line)>1 and line[-1:] == ']' : mode = line[1:-1] elif '=' in line : (key,strvalue) = line.split('=',1) if mode == 'options' : if key in self._schema : self._strvalues[key] = strvalue self._values[key] = self._get_value_from_strvalue(key,strvalue) else : if mode not in self._othersections : self._othersections[mode] = {} self._othersections[mode][key] = strvalue for section in othersections : if section not in self._othersections : self._othersections[section] = {} for key in othersections[section] : self._othersections[section][key] = othersections[section][key] def save(self,filename=None) : filename = self.get_filename(filename) handle = open(filename,'wt') self._filename = filename handle.write("[options]\n") for key in self._schema : if ('nosave' not in self._schema[key]) or not(self._schema[key]['nosave']) : if key in self._strvalues : handle.write("%s=%s\n" % (key,self._strvalues[key])) else : handle.write("%s=%s\n" % (key,self._schema[key].get('default',''))) sections = self.get_sections() sections.sort() if len(sections)>0 : for section in sections : handle.write("\n") handle.write("[%s]\n" % (section,)) section_content = self.get_section(section) section_content_keys = section_content.keys() section_content_keys.sort() for key in section_content_keys : handle.write("%s=%s\n" % (key,section_content[key])) handle.write("\n") handle.close() def show(self) : for key in self._schema : if key in self._strvalues : print "%s=%s" % (key,self._values[key]) else : print "%s=%s" % (key,self._schema[key].get('default','')) def get_value(self,key) : if key in self._schema : if key in self._values : return self._values[key] else : self._strvalues[key] = self._schema[key].get('default','') self._values[key] = self._get_value_from_strvalue(key,self._strvalues[key]) return self._values[key] else : return None def get_strvalue(self,key) : if key in self._schema : if key in self._strvalues : return self._strvalues[key] else : self._strvalues[key] = self._schema[key].get('default','') self._values[key] = self._get_value_from_strvalue(key,self._strvalues[key]) return self._strvalues[key] else : return None def set_value(self,key,value) : if key in self._schema : strvalue = self._get_strvalue_from_value(key,value) self._strvalues[key] = strvalue self._values[key] = value def set_strvalue(self,key,strvalue) : if key in self._schema : value = self._get_value_from_strvalue(key,strvalue) self._strvalues[key] = strvalue self._values[key] = value def __len__(self) : return len(self._schema) def __contains__(self,key) : return key in self._schema def __iter__(self) : keys = self._schema.keys() keys.sort(lambda x,y:cmp(self._schema[x]['sortidx'],self._schema[y]['sortidx']) or cmp(x,y)) return iter(keys) def get_doc(self,key,lang='en') : if key in self._schema : return self._schema[key].get('doc',{}).get(lang,'') return '' def need_configure(self,key) : need = True if ('nosave' in self._schema[key]) and self._schema[key]['nosave'] : need = False return need def get_sections(self) : return self._othersections.keys() def get_section(self,section) : if section in self._othersections : return self._othersections[section] return None def set_othersection_item(self,section,key,value) : if section not in self._othersections : self._othersections[section] = {} self._othersections[section][key] = value class Configuration (object) : _borg_element = _Configuration() def __getattribute__(self,name) : return object.__getattribute__(self,'_borg_element').__getattribute__(name) def __iter__(self) : return object.__getattribute__(self,'_borg_element').__getattribute__('__iter__')() def test() : c=Configuration() c.load() c.show() d=Configuration() d.set_value('width',c.get_value('width')+10) c.save() c.show() if __name__ == '__main__' : test() PK4=!99dirstat/TreemapView.pyc; SDc@sdZdZdZdZedZdZdklZlZdk l Z l Z l Z l Z lZdk lZd kZd efd YZd efd YZedjond S(ii iidf100.0i(s FileInfoListsFileInfoListRow(sSizesPointsRectsColorsCanvas(sfmtsizeNs TreemapViewcBstZdZdZdZdZdZdZdZdZ d Z d Z e e d Z d Zd ZdZdZRS(NcCs||_t|_t|_t|_g|_||_ ||_ |i |o |i o&|i o|i|i qndS(N(streesselfs_treesNones _rootTiles _selectedTiles_selectionRects _tilestodraws initialSizes _initialSizes configurations_configurations readConfigsrootsrebuildTreemap(sselfstrees initialSizes configuration((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys__init__s         cCs |iSdS(N(sselfs _selectedTile(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys selectedTile$scCs |iSdS(N(sselfs _rootTile(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pysrootTile%scCs |iSdS(N(sselfs_tree(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pystree&scCs |iSdS(N(sselfs _squarify(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pyssquarify'scCs |iSdS(N(sselfs _minTileSize(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys minTileSize(scCst|_t|_d|_dS(Ns(sTruesselfs _squarifysDefaultMinTileSizes _minTileSizes _savedRootUrl(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys readConfig*s  cCs tSdS(N(sCanvas(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pyscanvas6scCs=t}x,|ii|D]}|o|SqqWtSdS(N(sNonestilesselfscanvass collisionssposs canvasitem(sselfsposstiles canvasitem((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pystileAt9s  cCs~t}|idjo|ii|it}n| o*|ioti}qdti}n||i i fSdS(Ns( sNonesrootsselfs _savedRootUrls_treeslocatestrues _rootTilesorigscanvasssize(sselfsroot((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys_getparam_rebuildTreemapBs c Cst}| o|i\}}t}n| o|i}nt|_ t|_ t|_ |i i |i|i|itjo|itjoB|o7t|t|tdtddd|d|_ qn|o d|_ndS(NspointissizesAutos(sFalsesneedtoclean_savedRootUrlsnewRootsselfs_getparam_rebuildTreemapsnewSizesTrues visibleSizesNones _selectedTiles_selectionRects _rootTilescanvassresizeswidthsheights UpdateMinSizes TreemapTilesRectsPoints _savedRootUrl(sselfsnewRootsnewSizesneedtoclean_savedRootUrl((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pysrebuildTreemapQs&    "&cCs |iSdS(N(sselfs _initialSize(sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys visibleSizeosc Cs|iid}|iid} |iid} |iid}h} |iid} x"| D]}t | || |td t|i|i|d t|i|}t|i || ||}||7}qqWdS( NsAutos HorizontalsVerticalif1.0sminSizesbySizesparamsAsSubDirspointssize(s orientationsdirschildDirsrectswidthsheightsoffsetssizesselfs_origs totalSizesscales FileInfoLists _parentViews minTileSizesTrues fileInfoListsfileInfos childSizesRectsPointsxsysSizes childRects TreemapTilestile( sselfsrects orientationsscaleschildDirs childRects childSizesoffsetstilesfileInfos fileInfoListsdirssize((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pyscreateChildrenSimples.     (.  A=cCs|iidjodSnd|id|id|ii}t|ii |}t |id|dt dd}t|}td|}|ix<|io.|i|||}|i|||}qWdS(Nif1.0sminSizesbySizesparamsAsSubDirsrect(sselfs_origs totalSizesrectswidthsheightsscalesints _parentViews minTileSizesminSizes FileInfoListsTrues fileInfoListsitersfileInfoListIteratorsRects childrenRects next_nofailsisValidssquarifysrows layoutRow(sselfsrectsscalesfileInfoListIteratorsminSizes childrenRects fileInfoListsrow((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pyscreateSquarifiedChildrens/!   c Csct} |i} t|i|i}|djo|i } | Snt } d}d}|d||} x| o| o|| i7}t| djo|djo| idjoi||}t| | ii||| | i}|djo ||jo t} n|}n| o| i| |i } qxqxW| SdS(Nif-1.0f1.0f0.0(sFileInfoListRowsrowsitscurrentsfileInfosmaxsrectswidthsheightslengths next_nofailsTruesimprovingAspectRatioslastWorstAspectRatiossumsscalesscaledLengthSquares totalSizeslens sumSquaresfirstsworstAspectRatiosFalsesappend( sselfsrectsscalesitslastWorstAspectRatios sumSquareslengthssumsworstAspectRatiosfileInfosscaledLengthSquaresimprovingAspectRatiosrow((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pyssquarifys0    3    cCsjt|djo|Sn|i|ijo d}nd}t|i|i}|i} t | d||} | djo|Sn| |iijo|Snd} |}x |D]}t d|id| |d}||jo |}n||8}||iijo|djo5tt|i| |it|| } n2tt|i|i| t| |} t|i||| dd}| |7} qqW|djoEtt|i|i| t|i|i| } nBtt|i| |it|i| |i} | SdS(Nis HorizontalsVerticalf1.0f0.5s orientationsAuto(slensrowsrectswidthsheightsdirsmaxsprimarys sumTotalSizesssumsintsscales secondarysselfs _parentViews minTileSizesoffsets remainingsfileInfos totalSizes childSizesRectsPointsxsysSizes childRects TreemapTilestilesnewRect(sselfsrectsscalesrowsprimarys childSizestilesfileInfos remainingsnewRects childRectsoffsets secondaryssumsdir((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys layoutRow s<   &    51 EAcCs|ii}|idjp|idjodSnd}|id|iid|ii d|iid|iid|i i |i d|i i d ||i i d t|i idS( NicCsVd}xE|D]=}t|djo|tt|7}q |d7}q W|SdS(Nsis.(sresultsnameslettersordschr(snameslettersresult((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pysiconvYssxsyswidthsheightscolorsfilenames filenamestrsfilesize(sselfsrectssizesheightswidthsiconvspaintersaddrectsxsys _parentViews tileColors_origsurlsfmtsizes totalSize(sselfspaintersiconvssize((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys drawShapeQs& cCsdS(N((sself((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys_initxs(s__name__s __module__s__init__srectsorigs parentViews parentTilescreateChildrenscreateChildrenSimplescreateSquarifiedChildrenssquarifys layoutRows drawShapes_init(((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys TreemapTiles     &  * 1 's__main__(sDefaultMinTileSizesMinHeightScalePercentsMaxHeightScalePercentsDefaultHeightScalePercentsDefaultHeightScaleFactors UpdateMinSizesFileInfos FileInfoListsFileInfoListRowsSimuQTsSizesPointsRectsColorsCanvassfmtsizesossobjects TreemapViews TreemapTiles__name__(sCanvassossPointsColorsDefaultHeightScaleFactors FileInfoLists TreemapViewsMaxHeightScalePercentsDefaultHeightScalePercents UpdateMinSizesFileInfoListRowsfmtsizesMinHeightScalePercents TreemapTilesDefaultMinTileSizesRectsSize((s1build/bdist.linux-i586/egg/dirstat/TreemapView.pys?s %   PK4~ywwdirstat/FileInfo.pyc; |UDc@sdkZeed odkZeie_ndZdefdYZdefdYZdefdYZd efd YZ d efd YZ d Z e djo e ndS(NswalklsFileInfocBstZeeeeedZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4RS(3NcCs|pd|_t|_d|_d|_d|_d|_d|_ d|_ ||_ t |_||_|ot|i|_|i|_|i|_|i|_ |i o2|i|_t|dt|id|_ qndS(Nsis st_blocksl(snamesselfs_namesTrues _isLocalFiles_devices_modes_linkss_sizes_blockss_mtimesparents_parentsNones_nextstrees_treesstatInfosst_devsst_modesst_nlinksst_mtimes isSpecialsst_sizesgetattrsint(sselfstreesparentsnamesstatInfosfileItem((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__init__ s&                cCs |iSdS(N(sselfs _isLocalFile(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isLocalFile/scCs |iSdS(N(sselfs_name(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysname0scCsk|ioV|ii}|io|Sn|djo||iSqg|ti|iSn|iSdS(Ns/(sselfs_parentsurls parentUrls isDotEntrys_namesosssep(sselfs parentUrl((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysurl2s   cCs`|i}||jodSn|}x(||jo|d8}|i}q*W|iSdS(Nsi(sselfs treeLevelslevels targetLevelsitemsparentsname(sselfs targetLevelsitemslevel((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysurlPart>s    cCs |iSdS(N(sselfs_device(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysdeviceJscCs |iSdS(N(sselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysmodeKscCs |iSdS(N(sselfs_links(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyslinksLscCs |iSdS(N(sselfs_size(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyssizeMscCs |iSdS(N(sselfs_blocks(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysblocksNscCsdSdS(Ni((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys blockSizeOscCs |iSdS(N(sselfs_mtime(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysmtimePscCs |iSdS(N(sselfs_size(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalSizeQscCs |iSdS(N(sselfs_blocks(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalBlocksRscCsdSdS(Ni((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalItemsSscCsdSdS(Ni((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalSubDirsTscCsdSdS(Ni((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalFilesUscCs |iSdS(N(sselfs_mtime(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys latestMtimeVscCstSdS(N(sFalse(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isMountPointWscCsdS(N((sselfs isMountPoint((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setMountPointXscCstSdS(N(sTrue(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isFinishedYscCstSdS(N(sFalse(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysisBusyZscCsdSdS(Ni((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyspendingReadJobs[scCs |iSdS(N(sselfs_tree(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pystree]scCs |iSdS(N(sselfs_parent(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysparent^scCs ||_dS(N(sparentsselfs_parent(sselfsparent((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setParent_scCs |iSdS(N(sselfs_next(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysnext`scCs ||_dS(N(snextsselfs_next(sselfsnext((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyssetNextascCstSdS(N(sNone(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys firstChildcscCsdS(N((sselfs firstChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setFirstChilddscCs|ip |iSdS(N(sselfs firstChildsdotEntry(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys hasChildreniscCs>|}x-|o%||jotSn|i}q WtSdS(N(sselfsancestorssubtreesTruesparentsFalse(sselfssubtreesancestor((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isInSubtreels cCs ddS(NsNOT IMPLEMENTED((sselfsurlsfindDotEntries((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyslocatetscCsdS(N((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys insertChildscCstSdS(N(sNone(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysdotEntryscCsdS(N((sselfsdotEntry((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setDotEntryscCstSdS(N(sFalse(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isDotEntryscCs<d}|i}x"|o|d7}|i}qW|SdS(Nii(slevelsselfs_parentsparent(sselfsparentslevel((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys treeLevels  cCsdS(N((sselfsnewChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys childAddedscCsdS(N((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys unlinkChildscCsdS(N((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys deletingChildscCsdSdS(NsFinished((sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys readStatescCstSdS(N(sFalse(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isDirInfoscCstiii|iSdS(N(sosspathsstatsS_ISDIRsselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysisDirscCstiii|iSdS(N(sosspathsstatsS_ISREGsselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysisFilescCstiii|iSdS(N(sosspathsstatsS_ISLNKsselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isSymLinkscCs3tiii|iptiii|iSdS(N(sosspathsstatsS_ISBLKsselfs_modesS_ISCHR(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysisDevicescCstiii|iSdS(N(sosspathsstatsS_ISBLKsselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isBlockDevicescCstiii|iSdS(N(sosspathsstatsS_ISCHRsselfs_mode(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isCharDevicescCsetiii|ipHtiii|ip/tiii|iptiii|iSdS(N( sosspathsstatsS_ISBLKsselfs_modesS_ISCHRsS_ISFIFOsS_ISSOCK(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isSpecials(5s__name__s __module__sNones__init__s isLocalFilesnamesurlsurlPartsdevicesmodeslinksssizesblockss blockSizesmtimes totalSizes totalBlockss totalItemss totalSubDirss totalFiless latestMtimes isMountPoints setMountPoints isFinishedsisBusyspendingReadJobsstreesparents setParentsnextssetNexts firstChilds setFirstChilds hasChildrens isInSubtreeslocates insertChildsdotEntrys setDotEntrys isDotEntrys treeLevels childAddeds unlinkChilds deletingChilds readStates isDirInfosisDirsisFiles isSymLinksisDevices isBlockDevices isCharDevices isSpecial(((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysFileInfo sd#                                              sDirInfocBs(tZeeeeeedZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!RS(NcCsti||||||t|_ t|_ d|_ t |_ t |_|i|_|i|_d|_d|_d|_|i|_t|_t|_t |_|ot|_ t |_d|_n t|_ dS(Nis.(sFileInfos__init__sselfstreesparentsnamesstatInfosfileItemsFalses _isDotEntrys _isMountPoints_pendingReadJobssNones _firstChilds _dotEntrys_sizes _totalSizes_blockss _totalBlockss _totalItemss _totalSubDirss _totalFiless_mtimes _latestMtimes _summaryDirtys_beingDestroyeds _readStates asDotEntrysTrues_name(sselfstreesparentsnamesstatInfosfileItems asDotEntry((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__init__s(                 cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _totalSize(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalSizes cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _totalBlocks(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalBlockss cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _totalItems(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalItemss cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _totalSubDirs(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalSubDirss cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _totalFiles(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys totalFiless cCs#|io|in|iSdS(N(sselfs _summaryDirtysrecalcs _latestMtime(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys latestMtimes cCs |iSdS(N(sselfs _isMountPoint(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isMountPointscCs ||_dS(N(s isMountPointsselfs _isMountPoint(sselfs isMountPoint((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setMountPointscCs|i SdS(N(sselfsisBusy(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isFinishedscCsm|idjo |idjotSn|idjp|idjo|idjn|iSdS(NisAbortedsReadingsQueued(sselfs_pendingReadJobss _readStatesTrues readStatesFalse(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysisBusys  &cCs |iSdS(N(sselfs_pendingReadJobs(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyspendingReadJobsscCs |iSdS(N(sselfs _firstChild(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys firstChildscCs ||_dS(N(s firstChildsselfs _firstChild(sselfs firstChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setFirstChildscCsr|ip|itjp|io7|i|i||_|i||i |n|ii |dS(N( snewChildsisDirsselfs _dotEntrysNones _isDotEntryssetNexts _firstChilds setParents childAddeds insertChild(sselfsnewChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys insertChilds '  cCs |iSdS(N(sselfs _dotEntry(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysdotEntryscCs ||_dS(N(sdotEntrysselfs _dotEntry(sselfsdotEntry((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setDotEntryscCs |iSdS(N(sselfs _isDotEntry(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isDotEntryscCs|i o|i|i7_|i|i7_|id7_|io|i d7_ n|i o|i d7_ n|i |i jo|i |_ qn|io|ii|ndS(Ni(sselfs _summaryDirtys _totalSizesnewChilds totalSizes _totalBlockss totalBlockss _totalItemssisDirs _totalSubDirssisFiles _totalFilessmtimes _latestMtimes_parents childAdded(sselfsnewChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys childAddeds    cCs|i|jotSn||ijo|i|_dSnt}xF|o>|i|jo|i|idSn|i}qNWdS(N( s deletedChildsparentsselfsNones _firstChildsnexts firstChildschildssetNext(sselfs deletedChildschild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys unlinkChild8s cCsWt|_|io|ii|n|i o|i|jot|ndS(N( sTruesselfs _summaryDirtys_parents deletingChilds deletedChilds_beingDestroyedsparents unlinkChild(sselfs deletedChild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys deletingChildEs  cCs.|id7_|io|iindS(Ni(sselfs_pendingReadJobss_parents readJobAdded(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys readJobAdded\s cCs.|id8_|io|iindS(Ni(sselfs_pendingReadJobss_parentsreadJobFinished(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysreadJobFinishedas cCs(d|_|io|iindS(NsAborted(sselfs _readStates_parentsreadJobAborted(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysreadJobAbortedfs  cCs|idS(N(sselfscleanupDotEntries(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys finalizeLocalkscCs0|io|io|iiSn|iSdS(N(sselfs _isDotEntrys_parents readStates _readState(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys readStatenscCs2|idjo tdjodSnt|_dS(NsAbortedsFinished(sselfs _readStates newReadState(sselfs readState((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys setReadStatetscCstSdS(N(sTrue(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys isDirInfoyscCs<|i|_|i|_d|_d|_d|_|i|_ xt |dD]}|i|i 7_|i|i 7_|i|id7_|i|i7_|i|i7_|io|id7_n|io|id7_n|i}||i jo ||_ qOqOWt|_dS(NisAsSubDiri(sselfs_sizes _totalSizes_blockss _totalBlockss _totalItemss _totalSubDirss _totalFiless_mtimes _latestMtimes FileInfoListsfileInfos totalSizes totalBlockss totalItemss totalSubDirss totalFilessisDirsisFiles latestMtimeschildLatestMtimesFalses _summaryDirty(sselfschildLatestMtimesfileInfo((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysrecalc{s*         cCs|i p|iodSn|i oT|ii}||_|iidx)|o|i||i}qSWn|ii o t |_ndS(Ni( sselfs _dotEntrys _isDotEntrys _firstChilds firstChildschilds setFirstChilds setParentsnextsNone(sselfschild((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pyscleanupDotEntriess   ("s__name__s __module__sNonesFalses__init__s totalSizes totalBlockss totalItemss totalSubDirss totalFiless latestMtimes isMountPoints setMountPoints isFinishedsisBusyspendingReadJobss firstChilds setFirstChilds insertChildsdotEntrys setDotEntrys isDotEntrys childAddeds unlinkChilds deletingChilds readJobAddedsreadJobFinishedsreadJobAborteds finalizeLocals readStates setReadStates isDirInfosrecalcscleanupDotEntries(((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysDirInfos<"                           sFileTreecBs)tZedZdZedZRS(NcCs||_t|_dS(N(srootpathsselfs _rootpathsNones_root(sselfsrootpath((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__init__s cCs |iSdS(N(sselfs_root(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysrootsc Cs|o||_t|_nh} xkti|itD]T}|\} } }| |ijo | }nti i| d}td|dti| d|}|| | s(sselfs_fileInfoListSortedssort(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys_sorts(s__name__s __module__s_sort(((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysFileInfoListIteratorBySizes( sobjectsFileInfoListIteratorsFileInfoListIteratorSortsFileInfoListIteratorDefaults iteratorclasssselfs_bySizesFileInfoListIteratorBySizes _fileInfos firstChild(sselfs iteratorclasssFileInfoListIteratorSortsFileInfoListIteratorDefaultsFileInfoListIteratorBySizesFileInfoListIterator((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__iter__s  (s__name__s __module__sNonesFalses__init__s__iter__(((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys FileInfoListssFileInfoListRowcBs>tZdZdZdZdZdZdZRS(NcCsg|_d|_dS(Ni(sselfs_lists_sum(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__init__'s cCst|iSdS(N(slensselfs_list(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__len__+scCs|idSdS(Ni(sselfs_list(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysfirst.scCs)|i|i7_|ii|SdS(N(sselfs_sumsfileInfos totalSizes_listsappend(sselfsfileInfo((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysappend1scCs |iSdS(N(sselfs_sum(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys sumTotalSizes5scCst|iSdS(N(sitersselfs_list(sself((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys__iter__8s(s__name__s __module__s__init__s__len__sfirstsappends sumTotalSizess__iter__(((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pysFileInfoListRow&s      cCsXtddi}d|i|ifGHd|ifGHd|ifGHdS(Nsrootpathsc:\home\gissehels(%d,%d)s(%d)(sFileTreesscansfs totalSizessizes totalSubDirss totalItems(sf((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pystest;ss__main__( sosshasattrswalkerswalks FileSizeMaxsobjectsFileInfosDirInfosFileTrees FileInfoListsFileInfoListRowstests__name__( sFileTreesDirInfos FileInfoListstestswalkersFileInfososs FileSizeMaxsFileInfoListRow((s.build/bdist.linux-i586/egg/dirstat/FileInfo.pys?s  2J  PK4p]OOdirstat/Dumper.pyc; SDc@sdkZdkZdkZdklZdklZdklZdklZdkl Z l Z dkl Z de fdYZ dS( N(sFileTree(s Configuration(s TreemapView(s __version__(sSizesColor(sfmtsizes FileDumpercBsetZdZeZeeeeedZedZdZdZ dZ dZ dZ RS( Ns.dumpcCs||_|itjot|_n|tjo|iiddjo|iid}n|o!t|djo|ddjo|dd!d}n|tjo |tjo d}n|tjoCt i i ot |}n t |}t|}|in||_||_|}|tjo|iid }n|djozt i i|o,t i i||iid |i}qt i i|d }|d|iid |i}n||_||_dS( Nspathsiis"is\s.s outputfilesbasenamei(s configurationsselfs_configurationsNones Configurationsrootpaths get_valueslenstreesosspathssupports_unicode_filenamessunicodesstrsFileTreesscans _rootpaths_trees outputfilesfilenamesisdirsjoinsEXTssplitsnames _filenamessizes_size(sselfsrootpaths outputfilessizestrees configurationsnamesfilename((s,build/bdist.linux-i586/egg/dirstat/Dumper.pys__init__s6 &+         ,% cCs|tjo ||_n|itjo.t|iid|iid|_nt|i|i|i|_ |i i }|i ot |id|_n|i|i i||i|i o|iindS(Nswidthsheightswt(sgsizesNonesselfs_sizesSizes_configurations get_values TreemapViews_trees_tmvs visibleSizessizes NEEDHANDLEsfiles _filenames_files _start_dumpsdraws _end_dumpsclose(sselfsgsizessize((s,build/bdist.linux-i586/egg/dirstat/Dumper.pysdump3s  .    cCsddfdtfdtii|ifdtidtifd|i i fdt |i i iifd tifgSd S( s5This method may be called by plugin to print metadatas Generators pydirstatsVersions DirectorysDates%Y-%m-%d %H:%M:%SsConfiguration Files Total SizesPython versionN(s __version__sosspathsabspathsselfs _rootpathstimesstrftimes localtimes_configurations get_filenamesfmtsizes_tmvsrootTilesorigs totalSizessyssversion(sself((s,build/bdist.linux-i586/egg/dirstat/Dumper.pys get_metadataEsc Csh}g} h}x|iiD]}|ido|ii|}x|D]}||}||joh||tZeeedZdZdZdZdZRS(NcCs| o.| o t}n| o t}qfn1| o|i}n| o|i}n|i|t|_|ii||ii|_|ii |_ dS(N( srectspointsPointssizesSizesselfs _copyfroms_sizeswidthsheight(sselfspointssizesrect((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pys__init__+s   cCst|i|iSdS(N(sPointsselfsxsy(sself((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pyspoint9scCst|i|iSdS(N(sSizesselfswidthsheight(sself((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pyssize;scCs<dt|i|i|i|i|ifSdS(Ns%s(%dx%d+%d+%d)(stypesselfs__name__swidthsheightsxsy(sself((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pys__str__=scCs-t|d|i|d|iSdS(Nspointssize(stypesselfspointsbissize(sselfsbi((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pys__add__?s(s__name__s __module__sNones__init__spointssizes__str__s__add__(((s,build/bdist.linux-i586/egg/dirstat/SimuQT.pysRect*s    sColorcBs tZhddddf<ddddf<d d ddf<d d dd f<ddddf<ddddf<ddddf<dd d d f<ddddf<dd d df<ddddf<ddddf<d d!d"d#f<d$d%d&d'f<d(d dd f<d)d*d+d,f<d-dd d.f<d/d0d1d2f<d3dddf<d4dd5d6f<d7d ddf<d8d d d9f<d:d d9d9f<d;d"d<d=f<d>d?d?d?f<d@d d0d f<dAd?d?d?f<dBdCdDdEf<dFd9d d9f<dGdHdEdIf<dJddKd f<dLdMdNdOf<dPd9d d f<dQdRdSdTf<dUdVdWdVf<dXdYdZd9f<d[dId\d\f<d]dId\d\f<d^d d_d`f<dadbd dcf<dddd5def<dfd dgdf<dhd+d+d+f<did+d+d+f<djd,dkdf<dldmdndnf<dodddf<dpdnd9dnf<dqdd df<drdddf<dsdddf<dtddd f<dudvddwf<dxdydydyf<dzdydydyf<d{d dyd f<d|d}ddIf<d~dddf<ddd+df<ddddf<ddd df<ddddf<ddddKf<ddddf<ddddf<dddd f<ddddf<dd}ddf<dddydyf<ddddf<dddd*f<ddcdcdcf<ddkddkf<ddcdcdcf<ddddf<ddd'dTf<ddwdmdf<dd#d_df<ddddMf<ddddMf<dddd!f<ddddf<dd dd f<ddNddNf<ddddf<ddd df<ddyd d f<ddddf<dd d df<dddHdcf<ddeddf<dd6ddf<ddddf<dd ddf<ddYd`dOf<ddddf<ddddf<ddddf<ddddf<ddddf<ddd!d}f<dd d dyf<ddddf<ddydyd f<ddEddf<dddd f<dddd f<ddvddf<ddddf<ddddf<ddddf<ddddef<ddddf<dddvdf<ddddf<ddddf<ddd'df<ddddf<ddyd dyf<ddd d f<ddWdVdVf<ddd+df<dd9ddf<dddydf<ddddf<ddd9df<ddddf<dd'ddf<ddddf<dd#d_df<ddddf<dddydkf<dddydkf<ddddf<dd dd f<ddddf<d d*ddKf<d d dydyf<d ddgdf<d dd df<ddddf<ddddf<ddd!df<ddddf<ddddf<dddd f<ddddNf| |}t|do|i|q | i|d qtd |fqWq|ttjoBt|}|tjo| i||qztd |fntd|f|d7}qWt|djotd|dfn| iddjo |iSn| iddjo |iSn| iddjo |iSn|iSdS(Ns minialiasiiis--s=ss needvaluesparameter %s does not exists-s1sminiparameter %s does not exists%parameter %s does not exist in schemasneed value for parameter %sshelpsversionsconfig(s Configurations configurations minialiasessaliasessschemaskeyslettersrestsremaining_args_to_parsesFalsesnext_arg_is_valuesNones next_arg_keysno_name_offsetsselfs _commandlinesargslens set_strvaluessplitsvalues ParseErrorsappendsschema_defaults get_values ACTION_USAGEsACTION_VERSIONs ACTION_CONFIGs ACTION_DUMP( sselfslettersvaluesno_name_offsetsrestsremaining_args_to_parses next_arg_keyskeysargs configurations minialiasessnext_arg_is_valuesaliases((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pysparsesp            cCsKt}dtii|idf}xMtD]E}|t jo2dt |jo|dt |df7}quq0q0W|d7}|d7}|d7}|d7}x|D]}t |do'd t |d |t |df}nd t |d |f}|d d t |7}|dt |ddf7}||7}t qW|SdS(Ns%s [OPTION]...is cmdlinenames [%s]s s$Get informations about a directory. sOptions may be : s needvalues -%s, --%s=%ss minialiass -%s, --%ss is%s sdocsen(s Configurations configurationsosspathsbasenamesselfs _commandlinesusagesschema_defaultskeysschemaspartlineslensstr(sselfspartlineskeysusages configuration((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pys get_usage^s.       ' cCs+dtii|idtf}|SdS(Ns%s %s i(sosspathsbasenamesselfs _commandlines __version__soutput(sselfsoutput((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pysget_version_text{s#( s__name__s __module__s ACTION_NONEs ACTION_DUMPs ACTION_USAGEs ACTION_CONFIGsACTION_VERSIONs__init__sparses get_usagesget_version_text(((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pys CommandLines  G cCsMtdddddddg}|i|iGHt}|idS(NspoidesKUUUs-fhws88888s45s1s7(s CommandLinesclsparses get_usages Configurations configurationsshow(s configurationscl((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pystests !   s__main__( s Configurationsschemasoss __version__sschema_defaults Exceptions ParseErrorsobjects CommandLinestests__name__(s __version__sschema_defaults CommandLines ParseErrorstests Configurationsossschema((s1build/bdist.linux-i586/egg/dirstat/CommandLine.pys?s    q  PK4c)88dirstat/Configuration.pyc; SDc @sGdkZdkZdZhdhdd<de<dd<dhd d <d d <<d d<de<dd<<dhdd<de<dd<dhd d<d d<<d d<de<dd<<dhdd<de<dd<dhd d<d d<<d d<de<dd<<d hdd!<de<dd"<d#e<dhd d$<d d%<<d d&<de<dd'<<d(hdd!<de<dd)<d#e<dhd d*<d d+<<d d&<de<dd,<<d-hdd<de<dd.<d#e<dhd d/<d d0<<d d1<de<dd2<<d3hdd<de<dd4<d#e<dhd d5<d d6<<d d1<de<dd7<<d8hdd<de<dd9<d#e<dhd d:<d d;<<d d<<de<dd=<<d>hdd?<de<dd@<d#e<dhd dA<d dB<<d dC<de<ddD<<dEhdd!<de<ddF<d#e<dhd dG<d dH<<d d&<de<ddI<s( sselfs_schemaskeysgetsstrskeytypesbools functablesstrvalue(sselfskeysstrvalues functableskeytype((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys_get_value_from_strvalues  cCsG|i|idt}|tjot||Snd|fSdS(Nstypes%s(sselfs_schemaskeysgetsstrskeytypes functablesvalue(sselfskeysvalueskeytype((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys_get_strvalue_from_value%s cCs|i|}tii|oZ||_t|d}d}x9|D]-}|i ddi dd}t |djo|ddjo?d}t |djo|dd jo|dd!}qtqGd |jo|i d d\}}|d jo>||ijo*||i|<|i|||i|q>W|i }|i t|djox|D]x}|id|id |f|i|}|i}|i x)|D]!}|id|||fqRWqWn|id|idS( Nswts [options] snosaves%s=%s sdefaultsis s[%s] (sselfs get_filenamesfilenamesopenshandles _filenameswrites_schemaskeys _strvaluessgets get_sectionsssectionsssortslenssections get_sectionssection_contentskeysssection_content_keyssclose(sselfsfilenamessection_contentssection_content_keysshandlessectionsskeyssection((s3build/bdist.linux-i586/egg/dirstat/Configuration.pyssaveIs2   '"2     ' cCsdx]|iD]R}||ijod||i|fGHq d||i|iddfGHq WdS(Ns%s=%ssdefaults(sselfs_schemaskeys _strvaluess_valuessget(sselfskey((s3build/bdist.linux-i586/egg/dirstat/Configuration.pysshowcs  cCs||ijon||ijo|i|Sq|i|idd|i|<|i||i||i|<|i|SntSdS(Nsdefaults(skeysselfs_schemas_valuessgets _strvaluess_get_value_from_strvaluesNone(sselfskey((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys get_valuejs  cCs||ijon||ijo|i|Sq|i|idd|i|<|i||i||i|<|i|SntSdS(Nsdefaults(skeysselfs_schemas _strvaluessgets_get_value_from_strvalues_valuessNone(sselfskey((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys get_strvalueus  cCsD||ijo0|i||}||i|<||i|s(sselfs_schemaskeysssortsiter(sselfskeys((sselfs3build/bdist.linux-i586/egg/dirstat/Configuration.pys__iter__ssencCs?||ijo'|i|idhi|dSndSdS(Nsdocs(skeysselfs_schemasgetslang(sselfskeyslang((s3build/bdist.linux-i586/egg/dirstat/Configuration.pysget_docs'cCs>t}d|i|jo|i|do t}n|SdS(Nsnosave(sTruesneedsselfs_schemaskeysFalse(sselfskeysneed((s3build/bdist.linux-i586/egg/dirstat/Configuration.pysneed_configures& cCs|iiSdS(N(sselfs_othersectionsskeys(sself((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys get_sectionsscCs'||ijo|i|SntSdS(N(ssectionsselfs_othersectionssNone(sselfssection((s3build/bdist.linux-i586/egg/dirstat/Configuration.pys get_sectionscCs6||ijoh|i| \n''' size = self._tmv.visibleSize() self._file.write(header % {'sizex':size.x(),'sizey':size.y()}) def _end_dump(self) : footer=''' \n''' size = self._tmv.visibleSize() self._file.write(footer % {'sizex':size.x(),'sizey':size.y()}) def addrect(self,**kwargs) : kwargs['filename'] = kwargs['filename'].replace('\\','\\\\').replace('\'','\\\'').replace('&','&').encode('iso-8859-1','replace'); self._file.write(''' \n''' % kwargs) def test(): Dumper().dump() if __name__ == '__main__' : test() PK4u4m&m&dirstat/Dumpers/HTML.py#!/usr/bin/env python from dirstat.Dumper import FileDumper HEADER=''' Repertoire
''' FOOTER_PART1=''' ''' FOOTER_PART2=''' ''' FOOTER_PART3=''' ''' class Dumper( FileDumper ) : EXT='.html' def _start_dump(self) : size = self._tmv.visibleSize() self.__dump_params = {'sizex':size.x(),'sizey':size.y(),'sizexmd':size.x()/2-20,'sizeymd':size.y()-20} header=HEADER self._file.write(header % self.__dump_params) def _end_dump(self) : footer=FOOTER_PART1 self._file.write(footer % self.__dump_params) params = {'Generator' : 'pydirstat','Version':'0.9.12'} for param in self.get_metadata() : self._file.write('

%s : %s

\n' % (param[0],param[1])) footer=FOOTER_PART2 self._file.write(footer % self.__dump_params) #-------------------------------------------------- # legend #-------------------------------------------------- types,colors,method_by_type = self.get_colors() border = 5 if self.__dump_params['sizey'] < border*2*len(types)*1.3 : border = 0 height=int( (self.__dump_params['sizey']-border*2.0*len(types))/len(types) ) ypos=border for typename in types : ypos kwargs = {} kwargs['innertext'] = (typename=='_') and 'Unknown' or typename kwargs['x'] = int(self.__dump_params['sizex']/2+5) kwargs['width'] = int(self.__dump_params['sizex']/2-10) kwargs['y'] = ypos kwargs['height'] = height-2*border kwargs['filename'] = '' kwargs['filesize'] = '' kwargs['color'] = colors[typename] filelisting = [] if typename in method_by_type : if 'type:extension' in method_by_type[typename] : for mask in method_by_type[typename]['type:extension'] : filelisting.append('*.'+mask) if 'type:extensionlower' in method_by_type[typename] : for mask in method_by_type[typename]['type:extensionlower'] : filelisting.append('*.'+mask) if 'type:contain' in method_by_type[typename] : for mask in method_by_type[typename]['type:contain'] : filelisting.append('*'+mask+'*') if 'type:exactmatch' in method_by_type[typename] : for mask in method_by_type[typename]['type:exactmatch'] : filelisting.append(mask) filelisting.sort() kwargs['filename'] = ", ".join(filelisting) if typename=='file' : if len(filelisting) > 0 : kwargs['filename'] += ' and ' kwargs['filename'] += 'any other file' if typename=='dir' : if len(filelisting) > 0 : kwargs['filename'] += ' and ' kwargs['filename'] += 'any directory' self.addrect(**kwargs) ypos += height #-------------------------------------------------- # legend (end) #-------------------------------------------------- footer=FOOTER_PART3 self._file.write(footer % self.__dump_params) def addrect(self,**kwargs) : filename = kwargs['filename'].replace('\\','\\\\').replace('\'',''').replace('\"','"').replace('&','&') if type(filename) != type(u'') : try : filename = filename.decode('utf8','replace') except LookupError : pass filename = filename.encode('iso-8859-1','replace'); kwargs['filename'] = filename kwargs['colorx'] = kwargs['color'].get_htmlcolor_extended(lambda x:int(x*0.6)) color = kwargs['color'].get_rgb() if color[0]+color[1]+color[2] > 3*128 : kwargs['colort'] = kwargs['color'].__class__(0,0,0) else : kwargs['colort'] = kwargs['color'].__class__(255,255,255) if 'innertext' not in kwargs : kwargs['innertext'] = '' self._file.write('''%(innertext)s\n''' % kwargs) def test(): Dumper().dump() if __name__ == '__main__' : test() PK4dirstat/Dumpers/__init__.pyc; |UDc@sdS(N((((s6build/bdist.linux-i586/egg/dirstat/Dumpers/__init__.pys?sPK4 K dirstat/Dumpers/Ming.pyc; |UDc@sOdklZdkTdefdYZdZedjo endS((s FileDumper(s*sDumpercBs8tZdZeZdZdZdZdZRS(Ns.swfcCs|iSdS(N(s colornamesget_rgb(sselfs colorname((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pysgetcolor scCsj|ii}t|_|ii|ii|ii |ii ddd|ii ddS(Nii ( sselfs_tmvs visibleSizessizesSWFMovies_movies setDimensions_sizesxsys setBackgroundssetRate(sselfssize((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pys _start_dump s  %cCs|iit|idS(N(sselfs_moviessavesstrs _filename(sself((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pys _end_dumpscKsUt}|idddd|i|i|i|d|i|d|d|i |dd|i d|d|i |d d|i d|d t }|i |t tBtBtBd}|d id d id did dd|d}|itd|dt|ii|}|idddS(Niiscolorsxsyswidthsheightss filenamestrs\s\\\\s s's\\\'s sfilesizes this.geturl('javascript:alert(\'s \')');(sSWFShapes squareshapessetLines setRightFillsaddFillsselfsgetcolorskwargss movePenTosdrawLines SWFButtonsbsaddShapes SWFBUTTON_HITs SWFBUTTON_UPsSWFBUTTON_DOWNsSWFBUTTON_OVERsfilenamesreplaces addActions SWFActionsSWFBUTTON_MOUSEDOWNs_moviesaddsismoveTo(sselfskwargss squareshapesisfilenamesb((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pysaddrects # :( s__name__s __module__sEXTsFalses NEEDHANDLEsgetcolors _start_dumps _end_dumpsaddrect(((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pysDumpers    cCstidS(N(sDumpersdump(((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pystest.ss__main__N(sdirstat.Dumpers FileDumpersmingsDumperstests__name__(stests FileDumpersDumper((s2build/bdist.linux-i586/egg/dirstat/Dumpers/Ming.pys?s (  PK4]]dirstat/Dumpers/SVG.pyc; |UDc@sHdklZdefdYZdZedjo endS((s FileDumpersDumpercBs)tZdZdZdZdZRS(Ns.svgcCsKd}|ii}|ii|hd|i<d|i<dS(Ns s���sizexs���sizey( ���s���headers���selfs���_tmvs ���visibleSizes���sizes���_files���writes���xs���y(���s���selfs���headers���size(����(����s1���build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pys ���_start_dump���s����Mc���������C���sK���d�}�|��i�i���}�|��i�i�|�h��d�|�i���<d�|�i���<�d��S(���Ns^�� ssizexssizey( sfootersselfs_tmvs visibleSizessizes_fileswritesxsy(sselfssizesfooter((s1build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pys _end_dumpZscKsV|diddiddiddidd |d<|iid |dS( Nsfilenames\s\\s's\'s&s&s iso-8859-1sreplaces (skwargssreplacesencodesselfs_fileswrite(sselfskwargs((s1build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pysaddrectfs>(s__name__s __module__sEXTs _start_dumps _end_dumpsaddrect(((s1build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pysDumpers R cCstidS(N(sDumpersdump(((s1build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pystestjss__main__N(sdirstat.Dumpers FileDumpersDumperstests__name__(stests FileDumpersDumper((s1build/bdist.linux-i586/egg/dirstat/Dumpers/SVG.pys?s e  PK4Aϡ''dirstat/Dumpers/HTML.pyc; SDc@s`dklZdZdZdZdZdefdYZdZedjo end S( (s FileDumpers: Repertoire
s] s s sDumpercBs)tZdZdZdZdZRS(Ns.htmlcCs|ii}hd|i<d|i<d|idd<d|id<|_t}|i i ||idS(Nssizexssizeyssizexmdiissizeymd( sselfs_tmvs visibleSizessizesxsys_Dumper__dump_paramssHEADERsheaders_fileswrite(sselfsheaderssize((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pys _start_dumpsQcCst}|ii||ihdd<dd<} x6|iD](}|iid|d|dfqBWt }|ii||i|i \} } } d}|id |d t| d jo d}nt|id |d t| t| }|}x| D]}|h} |d jodp|| d%s : %s

iiissizeyif1.3f2.0s_sUnknowns innertextssizexsxi swidthsysheightssfilenamesfilesizescolorstype:extensions*.stype:extensionlowers type:contains*stype:exactmatchs, sfiles and sany other filesdirs any directory(s FOOTER_PART1sfootersselfs_fileswrites_Dumper__dump_paramssparamss get_metadatasparams FOOTER_PART2s get_colorsstypesscolorssmethod_by_typesborderslensintsheightsyposstypenameskwargss filelistingsmasksappendssortsjoinsaddrects FOOTER_PART3(sselfs filelistingsfootersbordersmasksypossparamsheightstypenamescolorssparamsskwargssmethod_by_typestypes((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pys _end_dumpst && /        cKs_|diddiddiddidd }t|td jo0y|id d }Wqtj oqXn|id d }||d<|did|d<|di}|d|d|dddjo!|di ddd|d,sscolorxiiiiiscolortis innertextss %(innertext)s (skwargssreplacesfilenamestypesdecodes LookupErrorsencodesget_htmlcolor_extendedsget_rgbscolors __class__sselfs_fileswrite(sselfskwargsscolorsfilename((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pysaddrect#s :  %! (s__name__s __module__sEXTs _start_dumps _end_dumpsaddrect(((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pysDumpers  HcCstidS(N(sDumpersdump(((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pystest8ss__main__N( sdirstat.Dumpers FileDumpersHEADERs FOOTER_PART1s FOOTER_PART2s FOOTER_PART3sDumperstests__name__(s FileDumpersHEADERstests FOOTER_PART1sDumpers FOOTER_PART3s FOOTER_PART2((s2build/bdist.linux-i586/egg/dirstat/Dumpers/HTML.pys?s g  PK4PEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: pydirstat Version: 0.9.13 Summary: Show statistics informations for a directory in HTML, SVG, or Flash. Home-page: http://pydirstat.berlios.de/ Author: Arthibus Gissehel Author-email: public-pds-setup@giss.ath.cx License: UNKNOWN Download-URL: http://developer.berlios.de/project/showfiles.php?group_id=3108 Description: pyDirStat is a small tool to view statistical information about a directory. It will generate a view of all files contained in a directory (and subdirectories) with rectangles. Each rectangle area is proportional to file size. It's a perfect tool to view disk usage with graphics. Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Environment :: Console Classifier: Environment :: Web Environment Classifier: Environment :: Win32 (MS Windows) Classifier: Intended Audience :: End Users/Desktop Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: System :: Filesystems Classifier: Topic :: System :: Systems Administration PK46zEGG-INFO/SOURCES.txtChangeLog VERSION makerelease.py setup.py doc/index.html ez_setup/README.txt ez_setup/__init__.py nsis/pydirstat.nsi nsis/version.nsi res/msvcr71.dll res/pydirstat.ico src/pds-config.py src/pdshtml.py src/pdssvg.py src/pdsswf.py src/pydirstat.py src/dirstat/CommandLine.py src/dirstat/Configuration.py src/dirstat/Dumper.py src/dirstat/FileInfo.py src/dirstat/SimuQT.py src/dirstat/TreemapView.py src/dirstat/__init__.py src/dirstat/__version__.py src/dirstat/walker.py src/dirstat/Dumpers/HTML.py src/dirstat/Dumpers/Ming.py src/dirstat/Dumpers/SVG.py src/dirstat/Dumpers/__init__.py src/pydirstat.egg-info/PKG-INFO src/pydirstat.egg-info/SOURCES.txt src/pydirstat.egg-info/not-zip-safe src/pydirstat.egg-info/top_level.txt PK4EGG-INFO/not-zip-safePK4"ȪEGG-INFO/top_level.txtdirstat dirstat/Dumpers PK44YYEGG-INFO/scripts/pds-config.py#!/usr/bin/python from dirstat import config if __name__ == '__main__' : config() PK4EGG-INFO/scripts/pdshtml.py#!/usr/bin/python from dirstat.Configuration import Configuration import dirstat def main() : Configuration().set_strvalue('dumper','HTML') dirstat.main() if __name__ == '__main__' : main() PK4tvEGG-INFO/scripts/pdssvg.py#!/usr/bin/python from dirstat.Configuration import Configuration import dirstat def main() : Configuration().set_strvalue('dumper','SVG') dirstat.main() if __name__ == '__main__' : main() PK4.XEGG-INFO/scripts/pdsswf.py#!/usr/bin/python from dirstat.Configuration import Configuration import dirstat def main() : Configuration().set_strvalue('dumper','Ming') dirstat.main() if __name__ == '__main__' : main() PK4cSSEGG-INFO/scripts/pydirstat.py#!/usr/bin/python import dirstat if __name__ == '__main__' : dirstat.main() PK4e44dirstat/TreemapView.pyPK| 4#WW5dirstat/FileInfo.pyPK4oRRdirstat/Dumper.pyPK4"B B zdirstat/__init__.pyPK4 Adirstat/__version__.pyPK45--9dirstat/SimuQT.pyPK| 4M6dirstat/walker.pyPK4Gdirstat/CommandLine.pyPK4%̭77$dirstat/Configuration.pyPK4=!99&dirstat/TreemapView.pycPK4~yww`dirstat/FileInfo.pycPK4p]OOdirstat/Dumper.pycPK41` +dirstat/__init__.pycPK4sdirstat/__version__.pycPK4 n77dirstat/SimuQT.pycPK4J2dirstat/walker.pycPK4=w9dirstat/CommandLine.pycPK4c)88RMdirstat/Configuration.pycPK| 4&dirstat/Dumpers/__init__.pyPK| 4[K_dirstat/Dumpers/Ming.pyPK| 4?Xddirstat/Dumpers/SVG.pyPK4u4m&m&dirstat/Dumpers/HTML.pyPK44dirstat/Dumpers/__init__.pycPK4 K dirstat/Dumpers/Ming.pycPK4]]dirstat/Dumpers/SVG.pycPK4Aϡ''dirstat/Dumpers/HTML.pycPK4PEGG-INFO/PKG-INFOPK46zEGG-INFO/SOURCES.txtPK4EGG-INFO/not-zip-safePK4"ȪEGG-INFO/top_level.txtPK44YY=EGG-INFO/scripts/pds-config.pyPK4EGG-INFO/scripts/pdshtml.pyPK4tvEGG-INFO/scripts/pdssvg.pyPK4.XEGG-INFO/scripts/pdsswf.pyPK4cSSEGG-INFO/scripts/pydirstat.pyPK##U r