Viewing file: GtkAttributesFacade.py (2.05 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
"""This module contains the GtkAttributesFacade class."""
from gobject import GObject
class GtkAttributesFacade:
"""Wrap a GTK instance to simplify the way attributes are referenced.
Given a GTK instance i, make it possible for any functions i.get_foo() and i.set_foo(value) to be accessed via i.foo like a normal attribute.
The following attributes are used:
instance - This is the GTK instance that is being wrapped.
"""
def __init__(self, instance): """Accept the instance.""" self.__dict__["instance"] = instance
def __setattr__(self, name, value): """Simplify the way attributes are referenced.
When trying to do self.foo = something, if there is a self.instance.set_foo() method, use it. Otherwise, just set the attribute in self.
Return value so that chaining is possible. """ setter = "set_" + name if hasattr(self.instance, setter): apply(getattr(self.instance, setter), [value]) else: self.__dict__[name] = value return value
def __getattr__(self, name): """Simplify the way attributes are referenced.
Remember that this method is called after a failed lookup in self. Try looking for self.instance.foo. Next, try looking for a self.instance.get_foo() method, and call it if it exists. Otherwise, raise an exception.
If a value is successfully looked up, and if it is a subclass of GObject, wrap it in a GtkAttributesFacade before returning it. """ getter = "get_" + name if hasattr(self.instance, name): ret = getattr(self.instance, name) elif hasattr(self.instance, getter): ret = apply(getattr(self.instance, getter)) else: raise AttributeError( "%s instance has no attribute '%s'" % (self.instance.__class__.__name__, name)) if isinstance(ret, GObject): ret = GtkAttributesFacade(ret) return ret
|