From: "André Erdmann" <dywi@mailerd.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/util/
Date: Thu, 29 Aug 2013 12:36:32 +0000 (UTC) [thread overview]
Message-ID: <1377767677.c5c196a9a80e19a1f61379db1c9b9592cf6a1fc6.dywi@gentoo> (raw)
commit: c5c196a9a80e19a1f61379db1c9b9592cf6a1fc6
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Aug 29 09:14:37 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Aug 29 09:14:37 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=c5c196a9
roverlay/util/objects: weak-referenced object view
expose a (sub-)set of an object's information without depending on its existence
(= keeping it in memory due to reference count).
---
roverlay/util/objects.py | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/roverlay/util/objects.py b/roverlay/util/objects.py
index dd19046..28cc4e8 100644
--- a/roverlay/util/objects.py
+++ b/roverlay/util/objects.py
@@ -4,6 +4,8 @@
# Distributed under the terms of the GNU General Public License;
# either version 2 of the License, or (at your option) any later version.
+import weakref
+
class MethodNotImplementedError ( NotImplementedError ):
def __init__ ( self, obj, method, msg=None ):
if isinstance ( obj, str ):
@@ -67,3 +69,40 @@ def abstractmethod ( func=None ):
def not_implemented ( func=None ):
return _get_exception_wrapper ( MethodNotImplementedError, func )
# --- end of not_implemented (...) ---
+
+
+class ObjectView ( object ):
+
+ class ObjectDisappeared ( Exception ):
+ pass
+ # --- end of ObjectDisappeared ---
+
+ def __init__ ( self, obj ):
+ super ( ObjectView, self ).__init__()
+ self.obj_ref = weakref.ref ( obj ) if obj is not None else None
+ # --- end of __init__ (...) ---
+
+ def __bool__ ( self ):
+ return ( self.obj_ref is not None and self.obj_ref() is not None )
+ # --- end of __bool__ (...) ---
+
+ def deref_unsafe ( self ):
+ return None if self.obj_ref is None else self.obj_ref()
+ # --- end of deref_unsafe (...) ---
+
+ def deref_safe ( self ):
+ obj = None if self.obj_ref is None else self.obj_ref()
+ if obj is None:
+ raise self.__class__.ObjectDisappeared()
+ else:
+ return obj
+ # --- end of deref_safe (...) ---
+
+ deref = deref_safe
+
+ @abstractmethod
+ def update ( self ):
+ pass
+ # --- end of update (...) ---
+
+# --- end of ObjectView ---
next reply other threads:[~2013-08-29 12:36 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-29 12:36 André Erdmann [this message]
-- strict thread matches above, loose matches on Subject: below --
2016-07-07 4:19 [gentoo-commits] proj/R_overlay:master commit in: roverlay/util/ Benda XU
2015-01-26 17:41 André Erdmann
2014-08-23 19:03 André Erdmann
2014-06-05 22:09 André Erdmann
2014-06-05 22:09 André Erdmann
2014-04-01 16:38 André Erdmann
2014-02-16 16:30 André Erdmann
2014-01-25 18:14 André Erdmann
2013-12-11 18:40 André Erdmann
2013-09-20 15:57 André Erdmann
2013-09-12 16:36 André Erdmann
2013-09-12 16:36 André Erdmann
2013-09-10 14:40 André Erdmann
2013-09-05 10:24 André Erdmann
2013-09-05 9:25 André Erdmann
2013-09-05 9:25 André Erdmann
2013-09-03 15:50 André Erdmann
2013-09-03 15:50 André Erdmann
2013-09-03 12:21 André Erdmann
2013-09-03 8:35 André Erdmann
2013-09-02 16:21 André Erdmann
2013-08-30 14:49 André Erdmann
2013-08-30 14:49 André Erdmann
2013-08-29 13:53 André Erdmann
2013-08-29 12:36 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-23 13:52 André Erdmann
2013-08-23 13:51 André Erdmann
2013-08-22 9:01 André Erdmann
2013-08-16 6:44 André Erdmann
2013-08-13 8:56 André Erdmann
2013-08-01 12:44 André Erdmann
2013-07-30 18:40 André Erdmann
2013-07-29 14:56 André Erdmann
2013-07-23 14:57 André Erdmann
2013-07-23 14:57 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-23 14:57 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-18 19:25 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-23 7:51 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-12 13:57 André Erdmann
2013-06-20 23:40 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-06-22 15:24 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1377767677.c5c196a9a80e19a1f61379db1c9b9592cf6a1fc6.dywi@gentoo \
--to=dywi@mailerd.de \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox