diff options
Diffstat (limited to 'Lib')
-rwxr-xr-x | Lib/cProfile.py | 27 | ||||
-rw-r--r-- | Lib/curses/wrapper.py | 3 | ||||
-rw-r--r-- | Lib/distutils/command/bdist_msi.py | 2 | ||||
-rw-r--r-- | Lib/distutils/command/bdist_wininst.py | 2 | ||||
-rw-r--r-- | Lib/json/__init__.py | 22 | ||||
-rw-r--r-- | Lib/json/decoder.py | 12 | ||||
-rw-r--r-- | Lib/json/encoder.py | 10 | ||||
-rwxr-xr-x | Lib/profile.py | 28 | ||||
-rw-r--r-- | Lib/pstats.py | 55 | ||||
-rw-r--r-- | Lib/trace.py | 8 |
10 files changed, 91 insertions, 78 deletions
diff --git a/Lib/cProfile.py b/Lib/cProfile.py index 5d04341d71..3e924ba28a 100755 --- a/Lib/cProfile.py +++ b/Lib/cProfile.py @@ -36,7 +36,7 @@ def run(statement, filename=None, sort=-1): result = prof.print_stats(sort) return result -def runctx(statement, globals, locals, filename=None): +def runctx(statement, globals, locals, filename=None, sort=-1): """Run statement under profiler, supplying your own globals and locals, optionally saving results in filename. @@ -53,7 +53,7 @@ def runctx(statement, globals, locals, filename=None): if filename is not None: prof.dump_stats(filename) else: - result = prof.print_stats() + result = prof.print_stats(sort) return result # Backwards compatibility. @@ -169,7 +169,8 @@ def main(): parser.add_option('-o', '--outfile', dest="outfile", help="Save stats to <outfile>", default=None) parser.add_option('-s', '--sort', dest="sort", - help="Sort order when printing to stdout, based on pstats.Stats class", default=-1) + help="Sort order when printing to stdout, based on pstats.Stats class", + default=-1) if not sys.argv[1:]: parser.print_usage() @@ -178,14 +179,18 @@ def main(): (options, args) = parser.parse_args() sys.argv[:] = args - if (len(sys.argv) > 0): - sys.path.insert(0, os.path.dirname(sys.argv[0])) - fp = open(sys.argv[0]) - try: - script = fp.read() - finally: - fp.close() - run('exec(%r)' % script, options.outfile, options.sort) + if len(args) > 0: + progname = args[0] + sys.path.insert(0, os.path.dirname(progname)) + with open(progname, 'rb') as fp: + code = compile(fp.read(), progname, 'exec') + globs = { + '__file__': progname, + '__name__': '__main__', + '__package__': None, + '__cached__': None, + } + runctx(code, globs, None, options.outfile, options.sort) else: parser.print_usage() return parser diff --git a/Lib/curses/wrapper.py b/Lib/curses/wrapper.py index 9f1d86785d..3cdaa82d0a 100644 --- a/Lib/curses/wrapper.py +++ b/Lib/curses/wrapper.py @@ -17,10 +17,9 @@ def wrapper(func, *args, **kwds): wrapper(). """ - res = None try: # Initialize curses - stdscr=curses.initscr() + stdscr = curses.initscr() # Turn off echoing of keys, and enter cbreak mode, # where no buffering is performed on keyboard input diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py index c4be47b579..8a458d8536 100644 --- a/Lib/distutils/command/bdist_msi.py +++ b/Lib/distutils/command/bdist_msi.py @@ -148,7 +148,7 @@ class bdist_msi(Command): if not self.skip_build and self.distribution.has_ext_modules()\ and self.target_version != short_version: raise DistutilsOptionError( - "target version can only be %s, or the '--skip_build'" + "target version can only be %s, or the '--skip-build'" " option must be specified" % (short_version,)) else: self.versions = list(self.all_versions) diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py index d6d01c630d..3aa1dac7f3 100644 --- a/Lib/distutils/command/bdist_wininst.py +++ b/Lib/distutils/command/bdist_wininst.py @@ -89,7 +89,7 @@ class bdist_wininst(Command): short_version = get_python_version() if self.target_version and self.target_version != short_version: raise DistutilsOptionError( - "target version can only be %s, or the '--skip_build'" \ + "target version can only be %s, or the '--skip-build'" \ " option must be specified" % (short_version,)) self.target_version = short_version diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 6a185188e7..5d8cb19990 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -125,14 +125,12 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ``.write()``-supporting file-like object). If ``skipkeys`` is true then ``dict`` keys that are not basic types - (``str``, ``unicode``, ``int``, ``float``, ``bool``, ``None``) will be - skipped instead of raising a ``TypeError``. + (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped + instead of raising a ``TypeError``. - If ``ensure_ascii`` is false, then the some chunks written to ``fp`` - may be ``unicode`` instances, subject to normal Python ``str`` to - ``unicode`` coercion rules. Unless ``fp.write()`` explicitly - understands ``unicode`` (as in ``codecs.getwriter()``) this is likely - to cause an error. + If ``ensure_ascii`` is false, then the strings written to ``fp`` can + contain non-ASCII characters if they appear in strings contained in + ``obj``. Otherwise, all such characters are escaped in JSON strings. If ``check_circular`` is false, then the circular reference check for container types will be skipped and a circular reference will @@ -185,12 +183,12 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, """Serialize ``obj`` to a JSON formatted ``str``. If ``skipkeys`` is false then ``dict`` keys that are not basic types - (``str``, ``unicode``, ``int``, ``float``, ``bool``, ``None``) will be - skipped instead of raising a ``TypeError``. + (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped + instead of raising a ``TypeError``. - If ``ensure_ascii`` is false, then the return value will be a - ``unicode`` instance subject to normal Python ``str`` to ``unicode`` - coercion rules instead of being escaped to an ASCII ``str``. + If ``ensure_ascii`` is false, then the return value can contain non-ASCII + characters if they appear in strings contained in ``obj``. Otherwise, all + such characters are escaped in JSON strings. If ``check_circular`` is false, then the circular reference check for container types will be skipped and a circular reference will diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py index 475b3908b6..3e7405b220 100644 --- a/Lib/json/decoder.py +++ b/Lib/json/decoder.py @@ -263,9 +263,9 @@ class JSONDecoder(object): +---------------+-------------------+ | array | list | +---------------+-------------------+ - | string | unicode | + | string | str | +---------------+-------------------+ - | number (int) | int, long | + | number (int) | int | +---------------+-------------------+ | number (real) | float | +---------------+-------------------+ @@ -318,8 +318,8 @@ class JSONDecoder(object): def decode(self, s, _w=WHITESPACE.match): - """Return the Python representation of ``s`` (a ``str`` or ``unicode`` - instance containing a JSON document) + """Return the Python representation of ``s`` (a ``str`` instance + containing a JSON document). """ obj, end = self.raw_decode(s, idx=_w(s, 0).end()) @@ -329,8 +329,8 @@ class JSONDecoder(object): return obj def raw_decode(self, s, idx=0): - """Decode a JSON document from ``s`` (a ``str`` or ``unicode`` - beginning with a JSON document) and return a 2-tuple of the Python + """Decode a JSON document from ``s`` (a ``str`` beginning with + a JSON document) and return a 2-tuple of the Python representation and the index in ``s`` where the document ended. This can be used to decode a JSON document from a string that may diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index d068e72216..13359856d2 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -77,9 +77,9 @@ class JSONEncoder(object): +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ - | str, unicode | string | + | str | string | +-------------------+---------------+ - | int, long, float | number | + | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ @@ -102,12 +102,12 @@ class JSONEncoder(object): """Constructor for JSONEncoder, with sensible defaults. If skipkeys is false, then it is a TypeError to attempt - encoding of keys that are not str, int, long, float or None. If + encoding of keys that are not str, int, float or None. If skipkeys is True, such items are simply skipped. If ensure_ascii is true, the output is guaranteed to be str - objects with all incoming unicode characters escaped. If - ensure_ascii is false, the output will be unicode object. + objects with all incoming non-ASCII characters escaped. If + ensure_ascii is false, the output can contain non-ASCII characters. If check_circular is true, then lists, dicts, and custom encoded objects will be checked for circular references during encoding to diff --git a/Lib/profile.py b/Lib/profile.py index 2a96ba8dfb..3b239d14bf 100755 --- a/Lib/profile.py +++ b/Lib/profile.py @@ -75,7 +75,7 @@ def run(statement, filename=None, sort=-1): else: return prof.print_stats(sort) -def runctx(statement, globals, locals, filename=None): +def runctx(statement, globals, locals, filename=None, sort=-1): """Run statement under profiler, supplying your own globals and locals, optionally saving results in filename. @@ -90,7 +90,7 @@ def runctx(statement, globals, locals, filename=None): if filename is not None: prof.dump_stats(filename) else: - return prof.print_stats() + return prof.print_stats(sort) # Backwards compatibility. def help(): @@ -598,20 +598,28 @@ def main(): parser.add_option('-o', '--outfile', dest="outfile", help="Save stats to <outfile>", default=None) parser.add_option('-s', '--sort', dest="sort", - help="Sort order when printing to stdout, based on pstats.Stats class", default=-1) + help="Sort order when printing to stdout, based on pstats.Stats class", + default=-1) if not sys.argv[1:]: parser.print_usage() sys.exit(2) (options, args) = parser.parse_args() - - if (len(args) > 0): - sys.argv[:] = args - sys.path.insert(0, os.path.dirname(sys.argv[0])) - with open(sys.argv[0], 'rb') as fp: - script = fp.read() - run('exec(%r)' % script, options.outfile, options.sort) + sys.argv[:] = args + + if len(args) > 0: + progname = args[0] + sys.path.insert(0, os.path.dirname(progname)) + with open(progname, 'rb') as fp: + code = compile(fp.read(), progname, 'exec') + globs = { + '__file__': progname, + '__name__': '__main__', + '__package__': None, + '__cached__': None, + } + runctx(code, globs, None, options.outfile, options.sort) else: parser.print_usage() return parser diff --git a/Lib/pstats.py b/Lib/pstats.py index d8562454a6..81d9d0d58c 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -5,7 +5,7 @@ # Based on prior profile module by Sjoerd Mullender... # which was hacked somewhat by: Guido van Rossum # -# see profile.doc and profile.py for more info. +# see profile.py for more info. # Copyright 1994, by InfoSeek Corporation, all rights reserved. # Written by James Roskind @@ -65,7 +65,7 @@ class Stats: minor key of 'the name of the function'. Look at the two tables in sort_stats() and get_sort_arg_defs(self) for more examples. - All methods return self, so you can string together commands like: + All methods return self, so you can string together commands like: Stats('foo', 'goo').strip_dirs().sort_stats('calls').\ print_stats(5).print_callers(5) """ @@ -149,7 +149,7 @@ class Stats: if not arg_list: return self if len(arg_list) > 1: self.add(*arg_list[1:]) other = arg_list[0] - if type(self) != type(other) or self.__class__ != other.__class__: + if type(self) != type(other): other = Stats(other) self.files += other.files self.total_calls += other.total_calls @@ -217,12 +217,12 @@ class Stats: if not field: self.fcn_list = 0 return self - if len(field) == 1 and type(field[0]) == type(1): + if len(field) == 1 and isinstance(field[0], int): # Be compatible with old profiler field = [ {-1: "stdname", - 0:"calls", - 1:"time", - 2: "cumulative" } [ field[0] ] ] + 0: "calls", + 1: "time", + 2: "cumulative"}[field[0]] ] sort_arg_defs = self.get_sort_arg_defs() sort_tuple = () @@ -299,48 +299,53 @@ class Stats: def eval_print_amount(self, sel, list, msg): new_list = list - if type(sel) == type(""): + if isinstance(sel, str): + try: + rex = re.compile(sel) + except re.error: + msg += " <Invalid regular expression %r>\n" % sel + return new_list, msg new_list = [] for func in list: - if re.search(sel, func_std_string(func)): + if rex.search(func_std_string(func)): new_list.append(func) else: count = len(list) - if type(sel) == type(1.0) and 0.0 <= sel < 1.0: + if isinstance(sel, float) and 0.0 <= sel < 1.0: count = int(count * sel + .5) new_list = list[:count] - elif type(sel) == type(1) and 0 <= sel < count: + elif isinstance(sel, int) and 0 <= sel < count: count = sel new_list = list[:count] if len(list) != len(new_list): - msg = msg + " List reduced from %r to %r due to restriction <%r>\n" % ( - len(list), len(new_list), sel) + msg += " List reduced from %r to %r due to restriction <%r>\n" % ( + len(list), len(new_list), sel) return new_list, msg def get_print_list(self, sel_list): width = self.max_name_len if self.fcn_list: - list = self.fcn_list[:] + stat_list = self.fcn_list[:] msg = " Ordered by: " + self.sort_type + '\n' else: - list = self.stats.keys() + stat_list = list(self.stats.keys()) msg = " Random listing order was used\n" for selection in sel_list: - list, msg = self.eval_print_amount(selection, list, msg) + stat_list, msg = self.eval_print_amount(selection, stat_list, msg) - count = len(list) + count = len(stat_list) - if not list: - return 0, list + if not stat_list: + return 0, stat_list print(msg, file=self.stream) if count < len(self.stats): width = 0 - for func in list: + for func in stat_list: if len(func_std_string(func)) > width: width = len(func_std_string(func)) - return width+2, list + return width+2, stat_list def print_stats(self, *amount): for filename in self.files: @@ -561,12 +566,10 @@ if __name__ == '__main__': def __init__(self, profile=None): cmd.Cmd.__init__(self) self.prompt = "% " + self.stats = None + self.stream = sys.stdout if profile is not None: - self.stats = Stats(profile) - self.stream = self.stats.stream - else: - self.stats = None - self.stream = sys.stdout + self.do_read(profile) def generic(self, fn, line): args = line.split() diff --git a/Lib/trace.py b/Lib/trace.py index 7260d3e6d6..5a776623d3 100644 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -487,8 +487,8 @@ class Trace: import __main__ dict = __main__.__dict__ if not self.donothing: - sys.settrace(self.globaltrace) threading.settrace(self.globaltrace) + sys.settrace(self.globaltrace) try: exec(cmd, dict, dict) finally: @@ -500,8 +500,8 @@ class Trace: if globals is None: globals = {} if locals is None: locals = {} if not self.donothing: - sys.settrace(self.globaltrace) threading.settrace(self.globaltrace) + sys.settrace(self.globaltrace) try: exec(cmd, globals, locals) finally: @@ -616,7 +616,7 @@ class Trace: print('%.2f' % (time.time() - self.start_time), end=' ') bname = os.path.basename(filename) print("%s(%d): %s" % (bname, lineno, - linecache.getline(filename, lineno)), end=' ') + linecache.getline(filename, lineno)), end='') return self.localtrace def localtrace_trace(self, frame, why, arg): @@ -629,7 +629,7 @@ class Trace: print('%.2f' % (time.time() - self.start_time), end=' ') bname = os.path.basename(filename) print("%s(%d): %s" % (bname, lineno, - linecache.getline(filename, lineno)), end=' ') + linecache.getline(filename, lineno)), end='') return self.localtrace def localtrace_count(self, frame, why, arg): |