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