summaryrefslogtreecommitdiffstats
path: root/ipalib/public.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipalib/public.py')
-rw-r--r--ipalib/public.py52
1 files changed, 49 insertions, 3 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index e5e579f1..941011b6 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -49,10 +49,45 @@ class cmd(plugable.Plugin):
print repr(self)
+class obj_proxy(plugable.Proxy):
+ __slots__ = (
+ 'mthd',
+ 'prop',
+ )
+
+
class obj(plugable.Plugin):
- proxy = generic_proxy
+ proxy = obj_proxy
+ __mthd = None
+ __prop = None
+
+ def __get_mthd(self):
+ return self.__mthd
+ mthd = property(__get_mthd)
+
+ def __get_prop(self):
+ return self.__prop
+ prop = property(__get_prop)
+
+ def finalize(self, api):
+ super(obj, self).finalize(api)
+ self.__mthd = self.__create_ns('mthd')
+ self.__prop = self.__create_ns('prop')
+
+ def __create_ns(self, name):
+ return plugable.NameSpace(self.__filter(name))
+
+ def __filter(self, name):
+ for i in getattr(self.api, name):
+ if i.obj_name == self.name:
+ yield i._clone(i.attr_name)
+ATTR_SLOTS = (
+ 'obj_name',
+ 'attr_name',
+)
+
class attr(plugable.Plugin):
__obj = None
proxy = generic_proxy
@@ -84,12 +119,23 @@ class attr(plugable.Plugin):
self.__obj = api.obj[self.obj_name]
+class mthd_proxy(plugable.Proxy):
+ __slots__ = (
+ '__call__',
+ 'get_doc',
+ ) + ATTR_SLOTS
+
class mthd(attr, cmd):
- proxy = generic_proxy
+ proxy = mthd_proxy
+class prop_proxy(plugable.Proxy):
+ __slots__ = (
+ 'get_doc',
+ ) + ATTR_SLOTS
+
class prop(attr):
- proxy = generic_proxy
+ proxy = prop_proxy
def get_doc(self, _):
return _('prop doc')