trepan/processor/cmdproc.py
def print_location(proc_obj):
    """Show where we are. GUI's and front-end interfaces often
    use this to update displays. So it is helpful to make sure
    we give at least some place that's located in a file.
    """
    i_stack = proc_obj.curindex
    if i_stack is None or proc_obj.stack is None:
        return False
    core_obj = proc_obj.core
    dbgr_obj = proc_obj.debugger
    intf_obj = dbgr_obj.intf[-1]

    # Evaluation routines like "exec" don't show useful location
    # info. In these cases, we will use the position before that in
    # the stack.  Hence the looping below which in practices loops
    # once and sometimes twice.
    remapped_file = None
    source_text = None
    while i_stack >= 0:
        frame_lineno = proc_obj.stack[i_stack]
        i_stack -= 1
        frame, lineno = frame_lineno

#         # Next check to see that local variable breadcrumb exists and
#         # has the magic dynamic value.
#         # If so, it's us and we don't normally show this.a
#         if 'breadcrumb' in frame.f_locals:
#             if self.run == frame.f_locals['breadcrumb']:
#                 break

        filename = Mstack.frame2file(core_obj, frame, canonic=False)
        if '<string>' == filename and dbgr_obj.eval_string:
            remapped_file = filename
            filename = pyficache.unmap_file(filename)
            if '<string>' == filename:
                remapped = cmdfns.source_tempfile_remap('eval_string',
                                                        dbgr_obj.eval_string)
                pyficache.remap_file(filename, remapped)
                filename = remapped
                lineno = pyficache.unmap_file_line(filename, lineno)
                pass
            pass
        elif '<string>' == filename:
            source_text = deparse_fn(frame.f_code)
            filename = "<string: '%s'>" % source_text
            pass
        else:
            m = re.search('^<frozen (.*)>', filename)
            if m and m.group(1) in pyficache.file2file_remap:
                remapped_file = pyficache.file2file_remap[m.group(1)]
                pass
            elif filename in pyficache.file2file_remap:
                remapped_file = pyficache.unmap_file(filename)
                # FIXME: a remapped_file shouldn't be the same as its unmapped version
                if remapped_file == filename:
                    remapped_file = None
                    pass
                pass
            elif m and m.group(1) in sys.modules:
                remapped_file = m.group(1)
                pyficache.remap_file(filename, remapped_file)
            pass

        opts = {
            'reload_on_change' : proc_obj.settings('reload'),
            'output'           : proc_obj.settings('highlight')
            }

        if 'style' in proc_obj.debugger.settings:
            opts['style'] = proc_obj.settings('style')

        pyficache.update_cache(filename)
        line = pyficache.getline(filename, lineno, opts)
        if not line:
            if (not source_text and
                filename.startswith("<string: ") and proc_obj.curframe.f_code):
                # Deparse the code object into a temp file and remap the line from code
                # into the corresponding line of the tempfile
                co = proc_obj.curframe.f_code
                temp_filename, name_for_code = deparse_and_cache(co, proc_obj.errmsg)
                lineno = 1
                # _, lineno = pyficache.unmap_file_line(temp_filename, lineno, True)
                if temp_filename:
                    filename = temp_filename
                pass

            else:
                # FIXME:
                if source_text:
                    lines = source_text.split("\n")
                    temp_name='string-'
                else:
                    # try with good ol linecache and consider fixing pyficache
                    lines = linecache.getlines(filename)
                    temp_name = filename
                if lines:
                    # FIXME: DRY code with version in cmdproc.py print_location
                    prefix = os.path.basename(temp_name).split('.')[0]
                    fd = tempfile.NamedTemporaryFile(suffix='.py',
                                                     prefix=prefix,
                                                     delete=False)
                    with fd:
                        fd.write(''.join(lines))
                        remapped_file = fd.name
                        pyficache.remap_file(remapped_file, filename)
                    fd.close()
                    pass
            line = linecache.getline(filename, lineno,
                                     proc_obj.curframe.f_globals)
            if not line:
                m = re.search('^<frozen (.*)>', filename)
                if m and m.group(1):
                    remapped_file = m.group(1)
                    try_module = sys.modules.get(remapped_file)
                    if (try_module and inspect.ismodule(try_module) and
                        hasattr(try_module, '__file__')):
                        remapped_file = sys.modules[remapped_file].__file__
                        pyficache.remap_file(filename, remapped_file)
                        line = linecache.getline(remapped_file, lineno,
                                                 proc_obj.curframe.f_globals)
                    else:
                        remapped_file = m.group(1)
                        code = proc_obj.curframe.f_code
                        filename, line = cmdfns.deparse_getline(code, remapped_file,
                                                                lineno, opts)
                    pass
            pass

        try:
            match, reason = Mstack.check_path_with_frame(frame, filename)
            if not match:
                if filename not in warned_file_mismatches:
                    proc_obj.errmsg(reason)
                    warned_file_mismatches.add(filename)
        except:
            pass

        fn_name = frame.f_code.co_name
        last_i  = frame.f_lasti
        print_source_location_info(intf_obj.msg, filename, lineno, fn_name,
                                   remapped_file = remapped_file,
                                   f_lasti = last_i)
        if line and len(line.strip()) != 0:
            if proc_obj.event:
                print_source_line(intf_obj.msg, lineno, line,
                                  proc_obj.event2short[proc_obj.event])
            pass
        if '<string>' != filename: break
        pass

    if proc_obj.event in ['return', 'exception']:
        val = proc_obj.event_arg
        intf_obj.msg('R=> %s' % proc_obj._saferepr(val))
        pass
    return True
def print_location(proc_obj):
    """Show where we are. GUI's and front-end interfaces often
    use this to update displays. So it is helpful to make sure
    we give at least some place that's located in a file.
    """
    i_stack = proc_obj.curindex
    if i_stack is None or proc_obj.stack is None:
        return False
    core_obj = proc_obj.core
    dbgr_obj = proc_obj.debugger
    intf_obj = dbgr_obj.intf[-1]

    # Evaluation routines like "exec" don't show useful location
    # info. In these cases, we will use the position before that in
    # the stack.  Hence the looping below which in practices loops
    # once and sometimes twice.
    remapped_file = None
    source_text = None
    while i_stack >= 0:
        frame_lineno = proc_obj.stack[i_stack]
        i_stack -= 1
        frame, lineno = frame_lineno

#         # Next check to see that local variable breadcrumb exists and
#         # has the magic dynamic value.
#         # If so, it's us and we don't normally show this.a
#         if 'breadcrumb' in frame.f_locals:
#             if self.run == frame.f_locals['breadcrumb']:
#                 break

        filename = Mstack.frame2file(core_obj, frame, canonic=False)
        if '<string>' == filename and dbgr_obj.eval_string:
            remapped_file = filename
            filename = pyficache.unmap_file(filename)
            if '<string>' == filename:
                remapped = cmdfns.source_tempfile_remap('eval_string',
                                                        dbgr_obj.eval_string)
                pyficache.remap_file(filename, remapped)
                filename = remapped
                lineno = pyficache.unmap_file_line(filename, lineno)
                pass
            pass
        elif '<string>' == filename:
            source_text = deparse_fn(frame.f_code)
            filename = "<string: '%s'>" % source_text
            pass
        else:
            m = re.search('^<frozen (.*)>', filename)
            if m and m.group(1) in pyficache.file2file_remap:
                remapped_file = pyficache.file2file_remap[m.group(1)]
                pass
            elif filename in pyficache.file2file_remap:
                remapped_file = pyficache.unmap_file(filename)
                # FIXME: a remapped_file shouldn't be the same as its unmapped version
                if remapped_file == filename:
                    remapped_file = None
                    pass
                pass
            elif m and m.group(1) in sys.modules:
                remapped_file = m.group(1)
                pyficache.remap_file(filename, remapped_file)
            pass

        opts = {
            'reload_on_change' : proc_obj.settings('reload'),
            'output'           : proc_obj.settings('highlight')
            }

        if 'style' in proc_obj.debugger.settings:
            opts['style'] = proc_obj.settings('style')

        pyficache.update_cache(filename)
        line = pyficache.getline(filename, lineno, opts)
        if not line:
            if (not source_text and
                filename.startswith("<string: ") and proc_obj.curframe.f_code):
                # Deparse the code object into a temp file and remap the line from code
                # into the corresponding line of the tempfile
                co = proc_obj.curframe.f_code
                temp_filename, name_for_code = deparse_and_cache(co, proc_obj.errmsg)
                lineno = 1
                # _, lineno = pyficache.unmap_file_line(temp_filename, lineno, True)
                if temp_filename:
                    filename = temp_filename
                pass

            else:
                # FIXME:
                if source_text:
                    lines = source_text.split("\n")
                    temp_name='string-'
                else:
                    # try with good ol linecache and consider fixing pyficache
                    lines = linecache.getlines(filename)
                    temp_name = filename
                if lines:
                    # FIXME: DRY code with version in cmdproc.py print_location
                    prefix = os.path.basename(temp_name).split('.')[0]
                    fd = tempfile.NamedTemporaryFile(suffix='.py',
                                                     prefix=prefix,
                                                     delete=False)
                    with fd:
                        fd.write(''.join(lines))
                        remapped_file = fd.name
                        pyficache.remap_file(remapped_file, filename)
                    fd.close()
                    pass
            line = linecache.getline(filename, lineno,
                                     proc_obj.curframe.f_globals)
            if not line:
                m = re.search('^<frozen (.*)>', filename)
                if m and m.group(1):
                    remapped_file = m.group(1)
                    try_module = sys.modules.get(remapped_file)
                    if (try_module and inspect.ismodule(try_module) and
                        hasattr(try_module, '__file__')):
                        remapped_file = sys.modules[remapped_file].__file__
                        pyficache.remap_file(filename, remapped_file)
                        line = linecache.getline(remapped_file, lineno,
                                                 proc_obj.curframe.f_globals)
                    else:
                        remapped_file = m.group(1)
                        code = proc_obj.curframe.f_code
                        filename, line = cmdfns.deparse_getline(code, remapped_file,
                                                                lineno, opts)
                    pass
            pass

        try:
            match, reason = Mstack.check_path_with_frame(frame, filename)
            if not match:
                if filename not in warned_file_mismatches:
                    proc_obj.errmsg(reason)
                    warned_file_mismatches.add(filename)
        except:
            pass

        fn_name = frame.f_code.co_name
        last_i  = frame.f_lasti
        print_source_location_info(intf_obj.msg, filename, lineno, fn_name,
                                   remapped_file = remapped_file,
                                   f_lasti = last_i)
        if line and len(line.strip()) != 0:
            if proc_obj.event:
                print_source_line(intf_obj.msg, lineno, line,
                                  proc_obj.event2short[proc_obj.event])
            pass
        if '<string>' != filename: break
        pass

    if proc_obj.event in ['return', 'exception']:
        val = proc_obj.event_arg
        intf_obj.msg('R=> %s' % proc_obj._saferepr(val))
        pass
    return True
def print_location ( proc_obj ) : i_stack = proc_obj . curindex if i_stack is None or proc_obj . stack is None : return False core_obj = proc_obj . core dbgr_obj = proc_obj . debugger intf_obj = dbgr_obj . intf [ - 1 ] # Evaluation routines like "exec" don't show useful location # info. In these cases, we will use the position before that in # the stack.  Hence the looping below which in practices loops # once and sometimes twice. remapped_file = None source_text = None while i_stack >= 0 : frame_lineno = proc_obj . stack [ i_stack ] i_stack -= 1 frame , lineno = frame_lineno #         # Next check to see that local variable breadcrumb exists and #         # has the magic dynamic value. #         # If so, it's us and we don't normally show this.a #         if 'breadcrumb' in frame.f_locals: #             if self.run == frame.f_locals['breadcrumb']: #                 break filename = Mstack . frame2file ( core_obj , frame , canonic = False ) if '<string>' == filename and dbgr_obj . eval_string : remapped_file = filename filename = pyficache . unmap_file ( filename ) if '<string>' == filename : remapped = cmdfns . source_tempfile_remap ( 'eval_string' , dbgr_obj . eval_string ) pyficache . remap_file ( filename , remapped ) filename = remapped lineno = pyficache . unmap_file_line ( filename , lineno ) pass pass elif '<string>' == filename : source_text = deparse_fn ( frame . f_code ) filename = "<string: '%s'>" % source_text pass else : m = re . search ( '^<frozen (.*)>' , filename ) if m and m . group ( 1 ) in pyficache . file2file_remap : remapped_file = pyficache . file2file_remap [ m . group ( 1 ) ] pass elif filename in pyficache . file2file_remap : remapped_file = pyficache . unmap_file ( filename ) # FIXME: a remapped_file shouldn't be the same as its unmapped version if remapped_file == filename : remapped_file = None pass pass elif m and m . group ( 1 ) in sys . modules : remapped_file = m . group ( 1 ) pyficache . remap_file ( filename , remapped_file ) pass opts = { 'reload_on_change' : proc_obj . settings ( 'reload' ) , 'output' : proc_obj . settings ( 'highlight' ) } if 'style' in proc_obj . debugger . settings : opts [ 'style' ] = proc_obj . settings ( 'style' ) pyficache . update_cache ( filename ) line = pyficache . getline ( filename , lineno , opts ) if not line : if ( not source_text and filename . startswith ( "<string: " ) and proc_obj . curframe . f_code ) : # Deparse the code object into a temp file and remap the line from code # into the corresponding line of the tempfile co = proc_obj . curframe . f_code temp_filename , name_for_code = deparse_and_cache ( co , proc_obj . errmsg ) lineno = 1 # _, lineno = pyficache.unmap_file_line(temp_filename, lineno, True) if temp_filename : filename = temp_filename pass else : # FIXME: if source_text : lines = source_text . split ( "\n" ) temp_name = 'string-' else : # try with good ol linecache and consider fixing pyficache lines = linecache . getlines ( filename ) temp_name = filename if lines : # FIXME: DRY code with version in cmdproc.py print_location prefix = os . path . basename ( temp_name ) . split ( '.' ) [ 0 ] fd = tempfile . NamedTemporaryFile ( suffix = '.py' , prefix = prefix , delete = False ) with fd : fd . write ( '' . join ( lines ) ) remapped_file = fd . name pyficache . remap_file ( remapped_file , filename ) fd . close ( ) pass line = linecache . getline ( filename , lineno , proc_obj . curframe . f_globals ) if not line : m = re . search ( '^<frozen (.*)>' , filename ) if m and m . group ( 1 ) : remapped_file = m . group ( 1 ) try_module = sys . modules . get ( remapped_file ) if ( try_module and inspect . ismodule ( try_module ) and hasattr ( try_module , '__file__' ) ) : remapped_file = sys . modules [ remapped_file ] . __file__ pyficache . remap_file ( filename , remapped_file ) line = linecache . getline ( remapped_file , lineno , proc_obj . curframe . f_globals ) else : remapped_file = m . group ( 1 ) code = proc_obj . curframe . f_code filename , line = cmdfns . deparse_getline ( code , remapped_file , lineno , opts ) pass pass try : match , reason = Mstack . check_path_with_frame ( frame , filename ) if not match : if filename not in warned_file_mismatches : proc_obj . errmsg ( reason ) warned_file_mismatches . add ( filename ) except : pass fn_name = frame . f_code . co_name last_i = frame . f_lasti print_source_location_info ( intf_obj . msg , filename , lineno , fn_name , remapped_file = remapped_file , f_lasti = last_i ) if line and len ( line . strip ( ) ) != 0 : if proc_obj . event : print_source_line ( intf_obj . msg , lineno , line , proc_obj . event2short [ proc_obj . event ] ) pass if '<string>' != filename : break pass if proc_obj . event in [ 'return' , 'exception' ] : val = proc_obj . event_arg intf_obj . msg ( 'R=> %s' % proc_obj . _saferepr ( val ) ) pass return True
Show where we are. GUI's and front-end interfaces often
    use this to update displays. So it is helpful to make sure
    we give at least some place that's located in a file.
Show where we are . GUI s and front - end interfaces often use this to update displays . So it is helpful to make sure we give at least some place that s located in a file .