def run(self, args): """Get file information""" if len(args) == 0: if not self.proc.curframe: self.errmsg("No frame - no default file.") return False filename = self.proc.curframe.f_code.co_filename else: filename = args[0] pass m = filename + " is" filename_cache = self.core.filename_cache if filename in filename_cache: m += " cached in debugger" if filename_cache[filename] != filename: m += " as:" m = Mmisc.wrapped_lines(m, filename_cache[filename] + ".", self.settings["width"]) else: m += "." pass self.msg(m) else: matches = [file for file in file_list() if file.endswith(filename)] if len(matches) > 1: self.msg("Multiple files found ending filename string:") for match_file in matches: self.msg("\t%s" % match_file) pass elif len(matches) == 1: canonic_name = pyficache.unmap_file(matches[0]) m += " matched debugger cache file:\n " + canonic_name self.msg(m) else: self.msg(m + " not cached in debugger.") pass canonic_name = self.core.canonic(filename) self.msg(Mmisc.wrapped_lines("Canonic name:", canonic_name, self.settings["width"])) for name in (canonic_name, filename): if name in sys.modules: for key in [k for k, v in list(sys.modules.items()) if name == v]: self.msg("module: %s", key) pass pass pass for arg in args[1:]: processed_arg = False if arg in ["all", "size"]: if pyficache.size(canonic_name): self.msg("File has %d lines." % pyficache.size(canonic_name)) pass processed_arg = True pass if arg in ["all", "sha1"]: self.msg("SHA1 is %s." % pyficache.sha1(canonic_name)) processed_arg = True pass if arg in ["all", "brkpts"]: lines = pyficache.trace_line_numbers(canonic_name) if lines: self.section("Possible breakpoint line numbers:") fmt_lines = columnize.columnize(lines, ljust=False, arrange_vertical=False, lineprefix=" ") self.msg(fmt_lines) pass processed_arg = True pass if not processed_arg: self.errmsg("Don't understand sub-option %s." % arg) pass pass return
def run(self, args): """Get file information""" if len(args) == 0: if not self.proc.curframe: self.errmsg("No frame - no default file.") return False filename = self.proc.curframe.f_code.co_filename else: filename = args[0] pass m = filename + ' is' filename_cache = self.core.filename_cache if filename in filename_cache: m += " cached in debugger" if filename_cache[filename] != filename: m += ' as:' m = Mmisc.wrapped_lines(m, filename_cache[filename] + '.', self.settings['width']) else: m += '.' pass self.msg(m) else: matches = [ file for file in self.file_list() if file.endswith(filename) ] if (len(matches) > 1): self.msg("Multiple files found ending filename string:") for match_file in matches: self.msg("\t%s" % match_file) pass elif len(matches) == 1: canonic_name = pyficache.unmap_file(matches[0]) m += " matched debugger cache file:\n " + canonic_name self.msg(m) else: self.msg(m + ' not cached in debugger.') pass canonic_name = self.core.canonic(filename) self.msg( Mmisc.wrapped_lines('Canonic name:', canonic_name, self.settings['width'])) for name in (canonic_name, filename): if name in sys.modules: for key in [ k for k, v in list(sys.modules.items()) if name == v ]: self.msg("module: %s", key) pass pass pass for arg in args[1:]: processed_arg = False if arg in ['all', 'size']: if pyficache.size(canonic_name): self.msg("File has %d lines." % pyficache.size(canonic_name)) pass processed_arg = True pass if arg in ['all', 'sha1']: self.msg("SHA1 is %s." % pyficache.sha1(canonic_name)) processed_arg = True pass if arg in ['all', 'brkpts']: lines = pyficache.trace_line_numbers(canonic_name) if lines: self.section("Possible breakpoint line numbers:") fmt_lines = columnize.columnize(lines, ljust=False, arrange_vertical=False, lineprefix=' ') self.msg(fmt_lines) pass processed_arg = True pass if not processed_arg: self.errmsg("Don't understand sub-option %s." % arg) pass pass return
def test_sha1(self): global TEST_DIR test_file = os.path.join(TEST_DIR, 'short-file') self.assertEqual('1134f95ea84a3dcc67d7d1bf41390ee1a03af6d2', pyficache.sha1(test_file)) return
def run(self, args): """**info files** [*filename* [**all** | **brkpts** | **lines** | **sha1** | **size**]] Show information about the current file. If no filename is given and the program is running then the current file associated with the current stack entry is used. Sub options which can be shown about a file are: * **brkpts** Line numbers where there are statement boundaries. These lines can be used in breakpoint commands. * **sha1** A SHA1 hash of the source text. The following may be useful in comparing source code. * **size** The number of lines in the file. * **all** All of the above information. """ if len(args) == 0: if not self.proc.curframe: self.errmsg("No frame - no default file.") return False filename = self.proc.curframe.f_code.co_filename else: filename = args[0] pass m = filename + " is" filename_cache = self.core.filename_cache if filename in filename_cache: m += " cached in debugger" if filename_cache[filename] != filename: m += " as:" m = Mmisc.wrapped_lines(m, filename_cache[filename] + ".", self.settings["width"]) else: m += "." pass self.msg(m) else: matches = [file for file in file_list() if file.endswith(filename)] if len(matches) > 1: self.msg("Multiple files found ending filename string:") for match_file in matches: self.msg("\t%s" % match_file) pass elif len(matches) == 1: canonic_name = pyficache.unmap_file(matches[0]) m += " matched debugger cache file:\n " + canonic_name self.msg(m) else: self.msg(m + " not cached in debugger.") pass canonic_name = self.core.canonic(filename) self.msg( Mmisc.wrapped_lines("Canonic name:", canonic_name, self.settings["width"])) for name in (canonic_name, filename): if name in sys.modules: for key in [ k for k, v in list(sys.modules.items()) if name == v ]: self.msg("module: %s", key) pass pass pass for arg in args[1:]: processed_arg = False if arg in ["all", "size"]: if pyficache.size(canonic_name): self.msg("File has %d lines." % pyficache.size(canonic_name)) pass processed_arg = True pass if arg in ["all", "sha1"]: self.msg("SHA1 is %s." % pyficache.sha1(canonic_name)) processed_arg = True pass if arg in ["all", "brkpts"]: lines = pyficache.trace_line_numbers(canonic_name) if lines: self.section("Possible breakpoint line numbers:") fmt_lines = columnize.columnize( list(lines), ljust=False, arrange_vertical=False, lineprefix=" ", ) self.msg(fmt_lines) pass processed_arg = True pass if not processed_arg: self.errmsg("Don't understand sub-option %s." % arg) pass pass return