diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-02-22 02:46:26 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-02-22 02:46:26 +0000 |
commit | b111f7defd5e1cbc704d7a4cf500a139807b8b1f (patch) | |
tree | a76edf84550ddd67484d464652d79da221d644e6 /pym/portage/proxy/objectproxy.py | |
parent | 6c33a6b5314bf45de7106362b746fa86cc05a98a (diff) | |
download | portage-b111f7defd5e1cbc704d7a4cf500a139807b8b1f.tar.gz portage-b111f7defd5e1cbc704d7a4cf500a139807b8b1f.tar.bz2 portage-b111f7defd5e1cbc704d7a4cf500a139807b8b1f.zip |
Reduce bloat in portage.util by splitting ObjectProxy and lazyimport into a
new portage.proxy package.
svn path=/main/trunk/; revision=12676
Diffstat (limited to 'pym/portage/proxy/objectproxy.py')
-rw-r--r-- | pym/portage/proxy/objectproxy.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pym/portage/proxy/objectproxy.py b/pym/portage/proxy/objectproxy.py new file mode 100644 index 000000000..00d3f6157 --- /dev/null +++ b/pym/portage/proxy/objectproxy.py @@ -0,0 +1,66 @@ +# Copyright 2008-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +__all__ = ['ObjectProxy'] + +class ObjectProxy(object): + + """ + Object that acts as a proxy to another object, forwarding + attribute accesses and method calls. This can be useful + for implementing lazy initialization. + """ + + __slots__ = () + + def _get_target(self): + raise NotImplementedError(self) + + def __getattribute__(self, attr): + result = object.__getattribute__(self, '_get_target')() + return getattr(result, attr) + + def __setattr__(self, attr, value): + result = object.__getattribute__(self, '_get_target')() + setattr(result, attr, value) + + def __call__(self, *args, **kwargs): + result = object.__getattribute__(self, '_get_target')() + return result(*args, **kwargs) + + def __setitem__(self, key, value): + object.__getattribute__(self, '_get_target')()[key] = value + + def __getitem__(self, key): + return object.__getattribute__(self, '_get_target')()[key] + + def __delitem__(self, key): + del object.__getattribute__(self, '_get_target')()[key] + + def __contains__(self, key): + return key in object.__getattribute__(self, '_get_target')() + + def __iter__(self): + return iter(object.__getattribute__(self, '_get_target')()) + + def __len__(self): + return len(object.__getattribute__(self, '_get_target')()) + + def __repr__(self): + return repr(object.__getattribute__(self, '_get_target')()) + + def __str__(self): + return str(object.__getattribute__(self, '_get_target')()) + + def __hash__(self): + return hash(object.__getattribute__(self, '_get_target')()) + + def __eq__(self, other): + return object.__getattribute__(self, '_get_target')() == other + + def __ne__(self, other): + return object.__getattribute__(self, '_get_target')() != other + + def __nonzero__(self): + return bool(object.__getattribute__(self, '_get_target')()) |