home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Lib / repr.py < prev    next >
Text File  |  1994-03-02  |  3KB  |  96 lines

  1. # Redo the `...` (representation) but with limits on most sizes.
  2.  
  3. import string
  4.  
  5. class Repr:
  6.     def __init__(self):
  7.         self.maxlevel = 6
  8.         self.maxtuple = 6
  9.         self.maxlist = 6
  10.         self.maxdict = 4
  11.         self.maxstring = 30
  12.         self.maxlong = 40
  13.         self.maxother = 20
  14.     def repr(self, x):
  15.         return self.repr1(x, self.maxlevel)
  16.     def repr1(self, x, level):
  17.         typename = `type(x)`[7:-2] # "<type '......'>"
  18.         if ' ' in typename:
  19.             parts = string.split(typename)
  20.             typename = string.joinfields(parts, '_')
  21.         try:
  22.             f = eval('self.repr_' + typename)
  23.         except AttributeError:
  24.             s = `x`
  25.             if len(s) > self.maxother:
  26.                 i = max(0, (self.maxother-3)/2)
  27.                 j = max(0, self.maxother-3-i)
  28.                 s = s[:i] + '...' + s[len(s)-j:]
  29.             return s
  30.         return f(x, level)
  31.     def repr_tuple(self, x, level):
  32.         n = len(x)
  33.         if n == 0: return '()'
  34.         if level <= 0: return '(...)'
  35.         s = ''
  36.         for i in range(min(n, self.maxtuple)):
  37.             if s: s = s + ', '
  38.             s = s + self.repr1(x[i], level-1)
  39.         if n > self.maxtuple: s = s + ', ...'
  40.         elif n == 1: s = s + ','
  41.         return '(' + s + ')'
  42.     def repr_list(self, x, level):
  43.         n = len(x)
  44.         if n == 0: return '[]'
  45.         if level <= 0: return '[...]'
  46.         s = ''
  47.         for i in range(min(n, self.maxlist)):
  48.             if s: s = s + ', '
  49.             s = s + self.repr1(x[i], level-1)
  50.         if n > self.maxlist: s = s + ', ...'
  51.         return '[' + s + ']'
  52.     def repr_dictionary(self, x, level):
  53.         n = len(x)
  54.         if n == 0: return '{}'
  55.         if level <= 0: return '{...}'
  56.         s = ''
  57.         keys = x.keys()
  58.         keys.sort()
  59.         for i in range(min(n, self.maxdict)):
  60.             if s: s = s + ', '
  61.             key = keys[i]
  62.             s = s + self.repr1(key, level-1)
  63.             s = s + ': ' + self.repr1(x[key], level-1)
  64.         if n > self.maxlist: s = s + ', ...'
  65.         return '{' + s + '}'
  66.     def repr_string(self, x, level):
  67.         s = `x[:self.maxstring]`
  68.         if len(s) > self.maxstring:
  69.             i = max(0, (self.maxstring-3)/2)
  70.             j = max(0, self.maxstring-3-i)
  71.             s = s[:i] + '...' + s[len(s)-j:]
  72.         return s
  73.     def repr_long_int(self, x, level):
  74.         s = `x` # XXX Hope this isn't too slow...
  75.         if len(s) > self.maxlong:
  76.             i = max(0, (self.maxlong-3)/2)
  77.             j = max(0, self.maxlong-3-i)
  78.             s = s[:i] + '...' + s[len(s)-j:]
  79.         return s
  80.     def repr_instance(self, x, level):
  81.         try:
  82.             s = `x`
  83.             # Bugs in x.__repr__() can cause arbitrary
  84.             # exceptions -- then make up something
  85.         except:
  86.             return '<' + x.__class__.__name__ + ' instance at ' + \
  87.                   hex(id(x))[2:] + '>'
  88.         if len(s) > self.maxstring:
  89.             i = max(0, (self.maxstring-3)/2)
  90.             j = max(0, self.maxstring-3-i)
  91.             s = s[:i] + '...' + s[len(s)-j:]
  92.         return s
  93.  
  94. aRepr = Repr()
  95. repr = aRepr.repr
  96.