Use nummedobj from pyutil.

This commit is contained in:
Itamar Turner-Trauring 2020-08-03 11:33:21 -04:00
parent bfbca87f26
commit 1703230a2a
2 changed files with 1 additions and 43 deletions

View File

@ -1,4 +1,4 @@
from allmydata.util import nummedobj
from pyutil import nummedobj
from foolscap.logging import log
from twisted.python import log as tw_log

View File

@ -1,42 +0,0 @@
import collections, itertools, functools
objnums = collections.defaultdict(itertools.count)
@functools.total_ordering
class NummedObj(object):
"""
This is useful for nicer debug printouts. Instead of objects of the same class being
distinguished from one another by their memory address, they each get a unique number, which
can be read as "the first object of this class", "the second object of this class", etc. This
is especially useful because separate runs of a program will yield identical debug output,
(assuming that the objects get created in the same order in each run). This makes it possible
to diff outputs from separate runs to see what changed, without having to ignore a difference
on every line due to different memory addresses of objects.
"""
def __init__(self, klass=None):
"""
@param klass: in which class are you counted? If default value of `None', then self.__class__ will be used.
"""
if klass is None:
klass = self.__class__
self._classname = klass.__name__
self._objid = objnums[self._classname].next()
def __repr__(self):
return "<%s #%d>" % (self._classname, self._objid,)
def __lt__(self, other):
if isinstance(other, NummedObj):
return (self._objid, self._classname,) < (other._objid, other._classname,)
return NotImplemented
def __eq__(self, other):
if isinstance(other, NummedObj):
return (self._objid, self._classname,) == (other._objid, other._classname,)
return NotImplemented
def __hash__(self):
return id(self)