mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
91: Fleshed out docstrings in plugable.Proxy
This commit is contained in:
parent
5a1223e943
commit
e3811f3f45
@ -91,6 +91,15 @@ class ProxyTarget(ReadOnly):
|
|||||||
|
|
||||||
|
|
||||||
class Proxy(ReadOnly):
|
class Proxy(ReadOnly):
|
||||||
|
"""
|
||||||
|
Allows access to only certain attributes on its target object (a
|
||||||
|
ProxyTarget).
|
||||||
|
|
||||||
|
Think of a proxy as an argreement that "I will have at most these
|
||||||
|
attributes". This is different from (although similar to) an interface,
|
||||||
|
which can be thought of as an agreement that "I will have at least these
|
||||||
|
attributes".
|
||||||
|
"""
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
'__base',
|
'__base',
|
||||||
'__target',
|
'__target',
|
||||||
@ -100,6 +109,13 @@ class Proxy(ReadOnly):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, base, target, name_attr='name'):
|
def __init__(self, base, target, name_attr='name'):
|
||||||
|
"""
|
||||||
|
`base` - the class defining the __public__ frozenset of attributes to
|
||||||
|
proxy
|
||||||
|
`target` - the target of the proxy (must be instance of `base`)
|
||||||
|
`name_attr` - the name of the str attribute on `target` to assign
|
||||||
|
to Proxy.name
|
||||||
|
"""
|
||||||
if not inspect.isclass(base):
|
if not inspect.isclass(base):
|
||||||
raise TypeError('arg1 must be a class, got %r' % base)
|
raise TypeError('arg1 must be a class, got %r' % base)
|
||||||
if not isinstance(target, base):
|
if not isinstance(target, base):
|
||||||
@ -114,15 +130,26 @@ class Proxy(ReadOnly):
|
|||||||
self.__lock__()
|
self.__lock__()
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
|
"""
|
||||||
|
Iterates though the attribute names this proxy is allowing access to.
|
||||||
|
"""
|
||||||
for name in sorted(self.__public__):
|
for name in sorted(self.__public__):
|
||||||
yield name
|
yield name
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
|
"""
|
||||||
|
If this proxy allowes access to an attribute named `key`, return that
|
||||||
|
attrribute.
|
||||||
|
"""
|
||||||
if key in self.__public__:
|
if key in self.__public__:
|
||||||
return getattr(self.__target, key)
|
return getattr(self.__target, key)
|
||||||
raise KeyError('no proxy attribute %r' % key)
|
raise KeyError('no proxy attribute %r' % key)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
|
"""
|
||||||
|
If this proxy allowes access to an attribute named `name`, return that
|
||||||
|
attrribute.
|
||||||
|
"""
|
||||||
if name in self.__public__:
|
if name in self.__public__:
|
||||||
return getattr(self.__target, name)
|
return getattr(self.__target, name)
|
||||||
raise AttributeError('no proxy attribute %r' % name)
|
raise AttributeError('no proxy attribute %r' % name)
|
||||||
|
Loading…
Reference in New Issue
Block a user