diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-08 21:49:09 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-08 21:49:09 +0000 |
commit | 1744723d11b2fbc93f43699f79df40d5d0b9305d (patch) | |
tree | 5972f79dadc9637f640e7bd4b63bb70240e7130c /ipalib/plugable.py | |
parent | 3fe13d5945df224643374da477f68e04d4f443e5 (diff) | |
download | freeipa.git-1744723d11b2fbc93f43699f79df40d5d0b9305d.tar.gz freeipa.git-1744723d11b2fbc93f43699f79df40d5d0b9305d.tar.xz freeipa.git-1744723d11b2fbc93f43699f79df40d5d0b9305d.zip |
88: Renamed ReadOnly._lock() to ReadOnly.__lock__(); updated subclasses and unit tests
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r-- | ipalib/plugable.py | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py index ecbd5855..092e3bdd 100644 --- a/ipalib/plugable.py +++ b/ipalib/plugable.py @@ -36,6 +36,39 @@ def check_identifier(name): raise errors.NameSpaceError(name, regex) +class ReadOnly(object): + """ + Base class for classes with read-only attributes. + """ + __locked = False + + def __lock__(self): + assert self.__locked is False + self.__locked = True + + def __setattr__(self, name, value): + """ + Raises an AttributeError if ReadOnly.__lock__() has already been called; + otherwise calls object.__setattr__() + """ + if self.__locked: + raise AttributeError('read-only: cannot set %s.%s' % + (self.__class__.__name__, name) + ) + return object.__setattr__(self, name, value) + + def __delattr__(self, name): + """ + Raises an AttributeError if ReadOnly.__lock__() has already been called; + otherwise calls object.__delattr__() + """ + if self.__locked: + raise AttributeError('read-only: cannot del %s.%s' % + (self.__class__.__name__, name) + ) + return object.__delattr__(self, name) + + class Abstract(object): __public__ = frozenset() @@ -96,37 +129,7 @@ class Plugin(object): ) -class ReadOnly(object): - """ - Base class for classes with read-only attributes. - """ - __locked = False - - def _lock(self): - assert self.__locked is False - self.__locked = True - - def __setattr__(self, name, value): - """ - Raises an AttributeError if ReadOnly._lock() has already been called; - otherwise calls object.__setattr__() - """ - if self.__locked: - raise AttributeError('read-only: cannot set %s.%s' % - (self.__class__.__name__, name) - ) - return object.__setattr__(self, name, value) - def __delattr__(self, name): - """ - Raises an AttributeError if ReadOnly._lock() has already been called; - otherwise calls object.__delattr__() - """ - if self.__locked: - raise AttributeError('read-only: cannot del %s.%s' % - (self.__class__.__name__, name) - ) - return object.__delattr__(self, name) class Proxy(ReadOnly): @@ -150,7 +153,7 @@ class Proxy(ReadOnly): self.__public__ = base.__public__ assert type(self.__public__) is frozenset check_identifier(self.name) - self._lock() + self.__lock__() def __iter__(self): @@ -200,7 +203,7 @@ class NameSpace(ReadOnly): self.__d[proxy.name] = proxy assert not hasattr(self, proxy.name) setattr(self, proxy.name, proxy) - self._lock() + self.__lock__() def __iter__(self): """ @@ -328,7 +331,7 @@ class API(ReadOnly): def __init__(self, *allowed): keys = tuple(b.__name__ for b in allowed) self.register = Registrar(*allowed) - self._lock() + self.__lock__() def __call__(self): """ |