public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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 ---


             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