Guido van Rossum wrote: > I like get_data(). The caller should always be prepared for it to > return an error (how does it do that? raise what? or return None? that > should be specified!). An importer that can't do this should > implement a version that always reports an error. This is much easier > on the client than calling hasattr(importer, 'get_data') first or > catching AttributeError. IOError makes a certain kind of sense. on the other hand, I'm not sure that requiring the use of hasattr/try- except is that much of a pain, in practice. ::: And if we're making get_data part of the protocol, can we please have an optional get_module_names/list_modules/listdir method too? Quoting myself from an earlier post (update the examples as necessary): as I might have mentioned before, it would be really nice if custom importers supported optional "load_data" and "get_module_names" hooks. the former can be used by code that looks for data files on the path (Zope, PIL, most likely hundreds of other tools/programs): for path in sys.path: if hasattr(path, "load_data"): try: data =3D path.load_data(name) except IOError: pass else: return data # got it if isinstance(path, types.StringTypes) and = os.path.isdir(path): try: data =3D open(os.path.join(path, file), "rb").read() except IOError: pass else: return data # ... the latter can be used by code that looks for plugins using a name pattern (PIL's *ImagePlugins, for example): for path in sys.path: if hasattr(path, "get_module_names"): names =3D path.get_module_names() elif isinstance(path, types.StringTypes) and = os.path.isdir(path): names =3D os.listdir(path) else: continue for name in names: if name.endswith("ImagePlugin"): __import__(name) </F>
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