On Fri, Feb 14, 2003 at 11:13:25AM +0000, Michael Hudson wrote: > I know Guido's squashed the idea, but how would you issue a warning on > use of a module level global? You could arrange to have a subclass of module that warns in __getattribute__: >>> os1 = reload(mwd).ModuleWithDeprecations('os', os, ['sep']) <module '?' (built-in)> {} >>> os1.path <module 'posixpath' from '/usr/lib/python2.2/posixpath.pyc'> >>> os1.sep __main__:1: DeprecationWarning: os.sep is deprecated '/' >>> os1.__deprecated__ {'sep': '/'} >>> 'sep' in dir(os1) 0 If ModuleWithDeprecations was coded in C, the performance impact (which would only occur on AttributeErrors) would probably be small, and no more than one test+branch for modules with nothing __deprecated__. import types import warnings class ModuleWithDeprecations(types.ModuleType): def __init__(self, name, module, deprecated): types.ModuleType.__init__(self, name) print self, self.__dict__ self.__dict__.update(module.__dict__) self.__deprecated__ = {} for item in deprecated: self.__deprecated__[item] = self.__dict__[item] del self.__dict__[item] def __getattribute__(self, attr): try: return types.ModuleType.__getattribute__(self, attr) except AttributeError: if attr in self.__deprecated__: warnings.warn("%s.%s is deprecated" % (self.__name__, attr), DeprecationWarning, 2) return self.__deprecated__[attr] else: raise
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