]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Lib/repr.py
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 4/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Lib / repr.py
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Lib/repr.py b/AppPkg/Applications/Python/Python-2.7.10/Lib/repr.py
new file mode 100644 (file)
index 0000000..71a3a15
--- /dev/null
@@ -0,0 +1,132 @@
+"""Redo the builtin repr() (representation) but with limits on most sizes."""\r
+\r
+__all__ = ["Repr","repr"]\r
+\r
+import __builtin__\r
+from itertools import islice\r
+\r
+class Repr:\r
+\r
+    def __init__(self):\r
+        self.maxlevel = 6\r
+        self.maxtuple = 6\r
+        self.maxlist = 6\r
+        self.maxarray = 5\r
+        self.maxdict = 4\r
+        self.maxset = 6\r
+        self.maxfrozenset = 6\r
+        self.maxdeque = 6\r
+        self.maxstring = 30\r
+        self.maxlong = 40\r
+        self.maxother = 20\r
+\r
+    def repr(self, x):\r
+        return self.repr1(x, self.maxlevel)\r
+\r
+    def repr1(self, x, level):\r
+        typename = type(x).__name__\r
+        if ' ' in typename:\r
+            parts = typename.split()\r
+            typename = '_'.join(parts)\r
+        if hasattr(self, 'repr_' + typename):\r
+            return getattr(self, 'repr_' + typename)(x, level)\r
+        else:\r
+            s = __builtin__.repr(x)\r
+            if len(s) > self.maxother:\r
+                i = max(0, (self.maxother-3)//2)\r
+                j = max(0, self.maxother-3-i)\r
+                s = s[:i] + '...' + s[len(s)-j:]\r
+            return s\r
+\r
+    def _repr_iterable(self, x, level, left, right, maxiter, trail=''):\r
+        n = len(x)\r
+        if level <= 0 and n:\r
+            s = '...'\r
+        else:\r
+            newlevel = level - 1\r
+            repr1 = self.repr1\r
+            pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)]\r
+            if n > maxiter:  pieces.append('...')\r
+            s = ', '.join(pieces)\r
+            if n == 1 and trail:  right = trail + right\r
+        return '%s%s%s' % (left, s, right)\r
+\r
+    def repr_tuple(self, x, level):\r
+        return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',')\r
+\r
+    def repr_list(self, x, level):\r
+        return self._repr_iterable(x, level, '[', ']', self.maxlist)\r
+\r
+    def repr_array(self, x, level):\r
+        header = "array('%s', [" % x.typecode\r
+        return self._repr_iterable(x, level, header, '])', self.maxarray)\r
+\r
+    def repr_set(self, x, level):\r
+        x = _possibly_sorted(x)\r
+        return self._repr_iterable(x, level, 'set([', '])', self.maxset)\r
+\r
+    def repr_frozenset(self, x, level):\r
+        x = _possibly_sorted(x)\r
+        return self._repr_iterable(x, level, 'frozenset([', '])',\r
+                                   self.maxfrozenset)\r
+\r
+    def repr_deque(self, x, level):\r
+        return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque)\r
+\r
+    def repr_dict(self, x, level):\r
+        n = len(x)\r
+        if n == 0: return '{}'\r
+        if level <= 0: return '{...}'\r
+        newlevel = level - 1\r
+        repr1 = self.repr1\r
+        pieces = []\r
+        for key in islice(_possibly_sorted(x), self.maxdict):\r
+            keyrepr = repr1(key, newlevel)\r
+            valrepr = repr1(x[key], newlevel)\r
+            pieces.append('%s: %s' % (keyrepr, valrepr))\r
+        if n > self.maxdict: pieces.append('...')\r
+        s = ', '.join(pieces)\r
+        return '{%s}' % (s,)\r
+\r
+    def repr_str(self, x, level):\r
+        s = __builtin__.repr(x[:self.maxstring])\r
+        if len(s) > self.maxstring:\r
+            i = max(0, (self.maxstring-3)//2)\r
+            j = max(0, self.maxstring-3-i)\r
+            s = __builtin__.repr(x[:i] + x[len(x)-j:])\r
+            s = s[:i] + '...' + s[len(s)-j:]\r
+        return s\r
+\r
+    def repr_long(self, x, level):\r
+        s = __builtin__.repr(x) # XXX Hope this isn't too slow...\r
+        if len(s) > self.maxlong:\r
+            i = max(0, (self.maxlong-3)//2)\r
+            j = max(0, self.maxlong-3-i)\r
+            s = s[:i] + '...' + s[len(s)-j:]\r
+        return s\r
+\r
+    def repr_instance(self, x, level):\r
+        try:\r
+            s = __builtin__.repr(x)\r
+            # Bugs in x.__repr__() can cause arbitrary\r
+            # exceptions -- then make up something\r
+        except Exception:\r
+            return '<%s instance at %x>' % (x.__class__.__name__, id(x))\r
+        if len(s) > self.maxstring:\r
+            i = max(0, (self.maxstring-3)//2)\r
+            j = max(0, self.maxstring-3-i)\r
+            s = s[:i] + '...' + s[len(s)-j:]\r
+        return s\r
+\r
+\r
+def _possibly_sorted(x):\r
+    # Since not all sequences of items can be sorted and comparison\r
+    # functions may raise arbitrary exceptions, return an unsorted\r
+    # sequence in that case.\r
+    try:\r
+        return sorted(x)\r
+    except Exception:\r
+        return list(x)\r
+\r
+aRepr = Repr()\r
+repr = aRepr.repr\r