Rev 148: Start working on __repr__ to be more compact visually. in http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection

John Arbash Meinel john at arbash-meinel.com
Tue Dec 29 04:07:32 GMT 2009


At http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection

------------------------------------------------------------
revno: 148
revision-id: john at arbash-meinel.com-20091229040713-poo0arn5mixechyz
parent: john at arbash-meinel.com-20091229034439-otwc36e6zas9ddkv
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: mem-object-collection
timestamp: Mon 2009-12-28 22:07:13 -0600
message:
  Start working on __repr__ to be more compact visually.
-------------- next part --------------
=== modified file 'meliae/_loader.pyx'
--- a/meliae/_loader.pyx	2009-12-29 03:44:39 +0000
+++ b/meliae/_loader.pyx	2009-12-29 04:07:13 +0000
@@ -18,6 +18,7 @@
     ctypedef unsigned long size_t
     ctypedef struct PyObject:
         pass
+    PyObject *Py_None
     void *PyMem_Malloc(size_t)
     void PyMem_Free(void *)
 
@@ -328,7 +329,6 @@
                 return 0
             return self._obj.referrer_list.size
 
-
     def __getitem__(self, offset):
         cdef long off
 
@@ -346,6 +346,38 @@
             #       'no-such-object' proxy would be nicer than returning nothing
             raise
 
+    def __repr__(self):
+        if self._obj.ref_list == NULL:
+            refs = ''
+        else:
+            refs = ' %drefs' % (self._obj.ref_list.size,)
+        if self._obj.referrer_list == NULL:
+            referrers = ''
+        else:
+            referrers = ' %dpar' % (self._obj.referrer_list.size,)
+        if self._obj.value == NULL or self._obj.value == Py_None:
+            val = ''
+        else:
+            val = ' %r' % (<object>self._obj.value,)
+        if self._obj.total_size == 0:
+            total_size_str = ''
+        else:
+            total_size = float(self._obj.total_size)
+            order = 'B'
+            if total_size > 800.0:
+                total_size = total_size / 1024.0
+                order = 'K'
+            if total_size > 800.0:
+                total_size = total_size / 1024.0
+                order = 'M'
+            if total_size > 800.0:
+                total_size = total_size / 1024.0
+                order = 'G'
+            total_size_str = ' %.1f%stot' % (total_size, order)
+        return '%s(%d %dB%s%s%s%s)' % (
+            self.type_str, self.address, self.size,
+            refs, referrers, val, total_size_str)
+
 
 cdef class MemObjectCollection:
     """Track a bunch of _MemObject instances."""

=== modified file 'meliae/loader.py'
--- a/meliae/loader.py	2009-12-29 03:44:39 +0000
+++ b/meliae/loader.py	2009-12-29 04:07:13 +0000
@@ -564,7 +564,7 @@
     # _fill_total_size(objs)
     return ObjManager(objs, show_progress=show_prog)
 
-_load = _load_moc
+#_load = _load_moc
 
 
 def remove_expensive_references(source, total_objs=0, show_progress=False):

=== modified file 'meliae/tests/test__loader.py'
--- a/meliae/tests/test__loader.py	2009-12-29 03:44:39 +0000
+++ b/meliae/tests/test__loader.py	2009-12-29 04:07:13 +0000
@@ -400,3 +400,30 @@
         mop255.referrers = [1234567]
         self.assertEqual(1, mop255.num_referrers)
         self.assertEqual([1234567], mop255.referrers)
+
+    def test__repr__(self):
+        mop = self.moc.add(1234, 'str', 24)
+        self.assertEqual('str(1234 24B)', repr(mop))
+        mop = self.moc.add(1235, 'tuple', 12, [4567, 8900])
+        self.assertEqual('tuple(1235 12B 2refs)', repr(mop))
+        mop = self.moc.add(1236, 'module', 12, [4568, 8900], name='named')
+        # TODO: Will we show the refs? If so, we will want to truncate
+        self.assertEqual("module(1236 12B 2refs 'named')", repr(mop))
+        mop = self.moc.add(1237, 'module', 12, range(20), name='named')
+        self.assertEqual("module(1237 12B 20refs 'named')", repr(mop))
+        mop = self.moc.add(1238, 'foo', 12, [10], referrer_list=[20, 30])
+        self.assertEqual("foo(1238 12B 1refs 2par)", repr(mop))
+        mop = self.moc.add(1239, 'str', 24, value='teststr')
+        self.assertEqual("str(1239 24B 'teststr')", repr(mop))
+        # TODO: Will we want to truncate value?
+        mop.value = 'averylongstringwithmorestuff'
+        self.assertEqual("str(1239 24B 'averylongstringwithmorestuff')",
+                         repr(mop))
+        mop = self.moc.add(1240, 'int', 12, value=12345)
+        self.assertEqual('int(1240 12B 12345)', repr(mop))
+        mop.total_size = 12
+        self.assertEqual('int(1240 12B 12345 12.0Btot)', repr(mop))
+        mop.total_size = 1024
+        self.assertEqual('int(1240 12B 12345 1.0Ktot)', repr(mop))
+        mop.total_size = int(1024*1024*10.5)
+        self.assertEqual('int(1240 12B 12345 10.5Mtot)', repr(mop))



More information about the bazaar-commits mailing list