source file: /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/repr.py
file stats: 106 lines, 24 executed: 22.6% covered
1. """Redo the `...` (representation) but with limits on most sizes.""" 2. 3. __all__ = ["Repr","repr"] 4. 5. import sys 6. 7. class Repr: 8. def __init__(self): 9. self.maxlevel = 6 10. self.maxtuple = 6 11. self.maxlist = 6 12. self.maxarray = 5 13. self.maxdict = 4 14. self.maxstring = 30 15. self.maxlong = 40 16. self.maxother = 20 17. def repr(self, x): 18. return self.repr1(x, self.maxlevel) 19. def repr1(self, x, level): 20. typename = type(x).__name__ 21. if ' ' in typename: 22. parts = typename.split() 23. typename = '_'.join(parts) 24. if hasattr(self, 'repr_' + typename): 25. return getattr(self, 'repr_' + typename)(x, level) 26. else: 27. s = `x` 28. if len(s) > self.maxother: 29. i = max(0, (self.maxother-3)//2) 30. j = max(0, self.maxother-3-i) 31. s = s[:i] + '...' + s[len(s)-j:] 32. return s 33. def repr_tuple(self, x, level): 34. n = len(x) 35. if n == 0: return '()' 36. if level <= 0: return '(...)' 37. s = '' 38. for i in range(min(n, self.maxtuple)): 39. if s: s = s + ', ' 40. s = s + self.repr1(x[i], level-1) 41. if n > self.maxtuple: s = s + ', ...' 42. elif n == 1: s = s + ',' 43. return '(' + s + ')' 44. def repr_list(self, x, level): 45. n = len(x) 46. if n == 0: return '[]' 47. if level <= 0: return '[...]' 48. s = '' 49. for i in range(min(n, self.maxlist)): 50. if s: s = s + ', ' 51. s = s + self.repr1(x[i], level-1) 52. if n > self.maxlist: s = s + ', ...' 53. return '[' + s + ']' 54. 55. def repr_array(self, x, level): 56. n = len(x) 57. header = "array('%s', [" % x.typecode 58. if n == 0: 59. return header + "])" 60. if level <= 0: 61. return header + "...])" 62. s = '' 63. for i in range(min(n, self.maxarray)): 64. if s: 65. s += ', ' 66. s += self.repr1(x[i], level-1) 67. if n > self.maxarray: 68. s += ', ...' 69. return header + s + "])" 70. 71. def repr_dict(self, x, level): 72. n = len(x) 73. if n == 0: return '{}' 74. if level <= 0: return '{...}' 75. s = '' 76. keys = x.keys() 77. keys.sort() 78. for i in range(min(n, self.maxdict)): 79. if s: s = s + ', ' 80. key = keys[i] 81. s = s + self.repr1(key, level-1) 82. s = s + ': ' + self.repr1(x[key], level-1) 83. if n > self.maxdict: s = s + ', ...' 84. return '{' + s + '}' 85. def repr_str(self, x, level): 86. s = `x[:self.maxstring]` 87. if len(s) > self.maxstring: 88. i = max(0, (self.maxstring-3)//2) 89. j = max(0, self.maxstring-3-i) 90. s = `x[:i] + x[len(x)-j:]` 91. s = s[:i] + '...' + s[len(s)-j:] 92. return s 93. def repr_long(self, x, level): 94. s = `x` # XXX Hope this isn't too slow... 95. if len(s) > self.maxlong: 96. i = max(0, (self.maxlong-3)//2) 97. j = max(0, self.maxlong-3-i) 98. s = s[:i] + '...' + s[len(s)-j:] 99. return s 100. def repr_instance(self, x, level): 101. try: 102. s = `x` 103. # Bugs in x.__repr__() can cause arbitrary 104. # exceptions -- then make up something 105. except: 106. # On some systems (RH10) id() can be a negative number. 107. # work around this. 108. MAX = 2L*sys.maxint+1 109. return '<' + x.__class__.__name__ + ' instance at %x>'%(id(x)&MAX) 110. if len(s) > self.maxstring: 111. i = max(0, (self.maxstring-3)//2) 112. j = max(0, self.maxstring-3-i) 113. s = s[:i] + '...' + s[len(s)-j:] 114. return s 115. 116. aRepr = Repr() 117. repr = aRepr.repr