mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 04:32:33 -06:00
86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
|
import os, sys, UserList
|
||
|
import finder, tocfilter, resource
|
||
|
|
||
|
class lTOC(UserList.UserList):
|
||
|
""" A class for managing lists of resources.
|
||
|
Should be a UserList subclass. Doh.
|
||
|
Like a list, but has merge(other) and filter() methods """
|
||
|
def __init__(self, reslist=None, filters=None):
|
||
|
UserList.UserList.__init__(self, reslist)
|
||
|
self.filters = []
|
||
|
if filters is not None:
|
||
|
self.filters = filters[:]
|
||
|
def prepend(self, res):
|
||
|
self.resources.insert(0, res)
|
||
|
def merge(self, other):
|
||
|
' merge in another ltoc, discarding dups and preserving order '
|
||
|
tmp = {}
|
||
|
for res in self.data:
|
||
|
tmp[res.name] = 0
|
||
|
for res in other:
|
||
|
if tmp.get(res.name, 1):
|
||
|
self.data.append(res)
|
||
|
tmp[res.name] = 0
|
||
|
def filter(self):
|
||
|
' invoke all filters '
|
||
|
for i in range(len(self.data)):
|
||
|
res = self.data[i]
|
||
|
if res:
|
||
|
for f in self.filters:
|
||
|
if f.matches(res):
|
||
|
self.data[i] = None
|
||
|
break
|
||
|
self.data = filter(None, self.data)
|
||
|
return self
|
||
|
def unique(self):
|
||
|
' remove all duplicate entries, preserving order '
|
||
|
new = self.__class__()
|
||
|
new.merge(self)
|
||
|
self.data = new.data
|
||
|
def toList(self):
|
||
|
' return self as a list of (name, path, typ) '
|
||
|
tmp = []
|
||
|
for res in self.data:
|
||
|
tmp.append((res.name, res.path, res.typ))
|
||
|
return tmp
|
||
|
def addFilter(self, filter):
|
||
|
if type(filter) == type(''):
|
||
|
self.filters.append(finder.makeresource(filter).asFilter())
|
||
|
else:
|
||
|
if type(filter) == type(self):
|
||
|
if isinstance(filter, tocfilter._Filter):
|
||
|
self.filters.append(filter)
|
||
|
elif isinstance(filter, resource.resource):
|
||
|
self.filters.append(filter.asFilter())
|
||
|
else:
|
||
|
raise ValueError, "can't make filter from %s", repr(filter)
|
||
|
else:
|
||
|
raise ValueError, "can't make filter from %s", repr(filter)
|
||
|
print " added filter", repr(self.filters[-1])
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.path.insert(0, '.')
|
||
|
import finder
|
||
|
import pprint
|
||
|
s = finder.scriptresource('finder.py', './finder.py')
|
||
|
## pyltoc = lTOC(s.modules)
|
||
|
## l1 = pyltoc.toList()
|
||
|
## print "Raw py ltoc:", pprint.pprint(l1)
|
||
|
## f1 = ModFilter(['dospath', 'macpath', 'posixpath'])
|
||
|
## l2 = lTOC(s.modules).filter(f1).toList()
|
||
|
## print "Filter out dospath, macpath, posixpath:", pprint.pprint(l2)
|
||
|
## f2 = DirFilter(['.'])
|
||
|
## l3 = lTOC(s.modules).filter(f2).toList()
|
||
|
## print "Filter out current dir:", pprint.pprint(l3)
|
||
|
## f3 = StdLibFilter()
|
||
|
## l4 = lTOC(s.modules).filter(f3).toList()
|
||
|
## print "Filter out stdlib:", pprint.pprint(l4)
|
||
|
## #print "Filter out current dir and stdlib:", lTOC(s.modules).filter(f2, f3).toList()
|
||
|
binltoc = lTOC(s.binaries)
|
||
|
print "Raw bin ltoc:", pprint.pprint(binltoc.toList())
|
||
|
binltoc.addFilter('c:/winnt/system32')
|
||
|
pprint.pprint(binltoc.filter().toList())
|
||
|
|
||
|
|