From 20b6e154d08c41d4f06bcfb6393a7fd938fa6bcb Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Fri, 12 Dec 2014 09:10:50 -0800 Subject: [PATCH] Alternate pprint for values As discussed in https://github.com/zestyping/q/pull/21 I've made some changes to the pprint change proposed there. * This will save long values into a separate file. * This makes pprint of the variable the default. I think this is a good idea because it will handle things like dicts nested within lists and other builtin types. --- q.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/q.py b/q.py index ceacd74..b461d6a 100644 --- a/q.py +++ b/q.py @@ -74,6 +74,7 @@ class Q(object): import inspect import os import pydoc + import pprint import sys import random import re @@ -192,6 +193,13 @@ class Q(object): len(self.re.match(r'^ *', line).group()) for line in lines) return [line[indent:].rstrip() for line in lines] + def save_large_value(self, value): + if isinstance(value, self.TEXT_TYPES): + value = value.encode('utf-8') + path = self.OUTPUT_PATH + '%08d.txt' % self.random.randrange(1e8) + self.FileWriter(path).write('w', value) + return path + def safe_repr(self, value): # TODO: Use colour to distinguish '...' elision from actual '...' # TODO: Show a nicer repr for SRE.Match objects. @@ -199,11 +207,17 @@ class Q(object): result = self.TEXT_REPR.repr(value) if isinstance(value, self.BASESTRING_TYPES) and len(value) > 80: # If the string is big, save it to a file for later examination. - if isinstance(value, self.TEXT_TYPES): - value = value.encode('utf-8') - path = self.OUTPUT_PATH + '%08d.txt' % self.random.randrange(1e8) - self.FileWriter(path).write('w', value) + path = self.save_large_value(value) result += ' (file://' + path + ')' + else: + # Use pretty print if no specific choices were found + pp = self.pprint.PrettyPrinter(indent=1) + formatted = pp.pformat(value) + if len(formatted) > 80: + path = self.save_large_value(formatted) + result += ' (file://' + path + ')' + else: + result = formatted return result def get_call_exprs(self, line): -- 2.10.2