On Sat, 29 Mar 2003, Ka-Ping Yee wrote: > Okay, at last to the example, then. The following is a better formulation in the capability style -- please ignore the previous one. The previously posted code allows names to carry authority, which is a big no-no. This code gets rid of names altogether in the API for file access; it's better to deal with just objects. import os, __builtin__ class Namespace: def __init__(self, *args, **kw): for value in args: self.__dict__[value.__name__] = value for name, value in kw.items(): self.__dict__[name] = value class ImmutableNamespace(Namespace): def __setattr__(self, name, value): raise TypeError('read-only namespace') def ReadStream(file, name): def __repr__(): return '<ReadStream %r>' % name return ImmutableNamespace(__repr__, file.read, file.close, name=name) def FileReader(path, name): def __repr__(): return '<FileReader %r>' % name def open(): return ReadStream(__builtin__.open(path, 'r'), name) def getsize(): return os.path.getsize(path) def getmtime(): return os.path.getmtime(path) return ImmutableNamespace(__repr__, open, getsize, getmtime, name=name) def DirectoryReader(path, name): def __repr__(): return '<DirectoryReader %r>' % name def getfiles(): files = [] for name in os.listdir(path): fullpath = os.path.join(path, name) if os.path.isfile(fullpath): files.append(FileReader(fullpath, name)) return files def getdirs(): dirs = [] for name in os.listdir(path): fullpath = os.path.join(path, name) if os.path.isdir(fullpath): dirs.append(DirectoryReader(fullpath, name)) return dirs return ImmutableNamespace(__repr__, getfiles, getdirs, name=name) -- ?!ng
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4