3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 01:09:22 +01:00

utils, Irc: add abstraction to warn on deprecated attribute usage (#273)

This commit is contained in:
James Lu 2017-02-24 22:28:26 -08:00
parent 47f0b7626f
commit 7f070448b7
2 changed files with 17 additions and 1 deletions

View File

@ -33,7 +33,7 @@ class ProtocolError(Exception):
### Internal classes (users, servers, channels) ### Internal classes (users, servers, channels)
class Irc(): class Irc(utils.DeprecatedAttributesObject):
"""Base IRC object for PyLink.""" """Base IRC object for PyLink."""
def __init__(self, netname, proto, conf): def __init__(self, netname, proto, conf):
@ -42,6 +42,8 @@ class Irc():
(a string), the name of the protocol module to use for this connection, (a string), the name of the protocol module to use for this connection,
and a configuration object. and a configuration object.
""" """
self.deprecated_attributes = {'conf': 'Deprecated since 1.2; consider switching to conf.conf'}
self.loghandlers = [] self.loghandlers = []
self.name = netname self.name = netname
self.conf = conf self.conf = conf

View File

@ -560,3 +560,17 @@ class IRCParser(argparse.ArgumentParser):
def error(self, message): def error(self, message):
raise InvalidArgumentsError(message) raise InvalidArgumentsError(message)
class DeprecatedAttributesObject():
"""
Object implementing deprecated attributes and warnings on access.
"""
def __getattribute__(self, attr):
# Note: "self.deprecated_attributes" calls this too, so the != check is
# needed to prevent a recursive loop!
if attr != 'deprecated_attributes' and attr in self.deprecated_attributes:
log.warning('Attribute %s.%s is deprecated: %s' % (self.__class__.__name__, attr,
self.deprecated_attributes.get(attr)))
return object.__getattribute__(self, attr)