diff options
Diffstat (limited to 'ipalib/public.py')
-rw-r--r-- | ipalib/public.py | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/ipalib/public.py b/ipalib/public.py index e5e579f1e..941011b6f 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') |