diff options
Diffstat (limited to 'subversion/bindings/swig/include/proxy.py')
-rw-r--r-- | subversion/bindings/swig/include/proxy.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/subversion/bindings/swig/include/proxy.py b/subversion/bindings/swig/include/proxy.py new file mode 100644 index 0000000..ca4a64d --- /dev/null +++ b/subversion/bindings/swig/include/proxy.py @@ -0,0 +1,41 @@ + def set_parent_pool(self, parent_pool=None): + """Create a new proxy object for TYPE""" + import libsvn.core, weakref + self.__dict__["_parent_pool"] = \ + parent_pool or libsvn.core.application_pool; + if self.__dict__["_parent_pool"]: + self.__dict__["_is_valid"] = weakref.ref( + self.__dict__["_parent_pool"]._is_valid) + + def assert_valid(self): + """Assert that this object is using valid pool memory""" + if "_is_valid" in self.__dict__: + assert self.__dict__["_is_valid"](), "Variable has already been deleted" + + def __getattr__(self, name): + """Get an attribute from this object""" + self.assert_valid() + + value = _swig_getattr(self, self.__class__, name) + + # If we got back a different object than we have, we need to copy all our + # metadata into it, so that it looks identical + members = self.__dict__.get("_members") + if members is not None: + _copy_metadata_deep(value, members.get(name)) + + # Verify that the new object is good + _assert_valid_deep(value) + + return value + + def __setattr__(self, name, value): + """Set an attribute on this object""" + self.assert_valid() + + # Save a copy of the object, so that the garbage + # collector won't kill the object while it's in + # SWIG-land + self.__dict__.setdefault("_members",{})[name] = value + + return _swig_setattr(self, self.__class__, name, value) |