Beispiel #1
0
 def saveglobals(self):
     """Save globals() into filename"""
     ns = self.get_current_namespace()
     from SMlib.utils.iofuncs import iofunctions
     settings = read_packet(self.i_request)
     filename = read_packet(self.i_request)
     more_excluded_names = ['In', 'Out'] if self.ipython_shell else None
     data = get_remote_data(ns, settings, mode='picklable',
                            more_excluded_names=more_excluded_names).copy()
     return iofunctions.save(data, filename)
Beispiel #2
0
 def saveglobals(self):
     """Save globals() into filename"""
     ns = self.get_current_namespace()
     from SMlib.utils.iofuncs import iofunctions
     settings = read_packet(self.i_request)
     filename = read_packet(self.i_request)
     more_excluded_names = ['In', 'Out'] if self.ipython_shell else None
     data = get_remote_data(ns,
                            settings,
                            mode='picklable',
                            more_excluded_names=more_excluded_names).copy()
     return iofunctions.save(data, filename)
Beispiel #3
0
 def setglobal(self, name):
     """
     Set global reference value
     """
     ns = self.get_reference_namespace(name)
     ns[name] = read_packet(self.i_request)
     self.refresh_after_eval = True
Beispiel #4
0
 def set_remote_view_settings(self):
     """
     Set the namespace remote view settings
     (see the namespace browser widget)
     """
     self.remote_view_settings = read_packet(self.i_request)
     self.enable_refresh_after_eval()
Beispiel #5
0
 def setglobal(self, name):
     """
     Set global reference value
     """
     ns = self.get_reference_namespace(name)
     ns[name] = read_packet(self.i_request)
     self.refresh_after_eval = True
Beispiel #6
0
 def set_remote_view_settings(self):
     """
     Set the namespace remote view settings
     (see the namespace browser widget)
     """
     self.remote_view_settings = read_packet(self.i_request)
     self.enable_refresh_after_eval()
Beispiel #7
0
 def loadglobals(self):
     """Load globals() from filename"""
     glbs = self.mglobals()
     from SMlib.utils.iofuncs import iofunctions
     filename = read_packet(self.i_request)
     ext = read_packet(self.i_request)
     load_func = iofunctions.load_funcs[ext]
     data, error_message = load_func(filename)
     if error_message:
         return error_message
     for key in data.keys():
         new_key = fix_reference_name(key, blacklist=glbs.keys())
         if new_key != key:
             data[new_key] = data.pop(key)
     try:
         glbs.update(data)
     except Exception, error:
         return str(error)
Beispiel #8
0
 def loadglobals(self):
     """Load globals() from filename"""
     glbs = self.mglobals()
     from SMlib.utils.iofuncs import iofunctions
     filename = read_packet(self.i_request)
     ext = read_packet(self.i_request)
     load_func = iofunctions.load_funcs[ext]
     data, error_message = load_func(filename)
     if error_message:
         return error_message
     for key in data.keys():
         new_key = fix_reference_name(key, blacklist=glbs.keys())
         if new_key != key:
             data[new_key] = data.pop(key)
     try:
         glbs.update(data)
     except Exception, error:
         return str(error)
Beispiel #9
0
 def run(self):
     """Start notification thread"""
     while True:
         if self.notify_socket is None:
             continue
         output = None
         try:
             try:
                 cdict = read_packet(self.notify_socket)
             except:
                 # This except statement is intended to handle a struct.error
                 # (but when writing 'except struct.error', it doesn't work)
                 # Note: struct.error is raised when the communication has 
                 # been interrupted and the received data is not a string 
                 # of length 8 as required by struct.unpack (see read_packet)
                 break
             if cdict is None:
                 # Another notification thread has just terminated and 
                 # then wrote 'None' in the notification socket
                 # (see the 'finally' statement below)
                 continue
             if not isinstance(cdict, dict):
                 raise TypeError("Invalid data type: %r" % cdict)
             command = cdict['command']
             data = cdict.get('data')
             if command == 'pdb_step':
                 fname, lineno = data
                 self.emit(SIGNAL('pdb(QString,int)'), fname, lineno)
                 self.emit(SIGNAL('refresh_namespace_browser()'))
             elif command == 'refresh':
                 self.emit(SIGNAL('refresh_namespace_browser()'))
             elif command == 'remote_view':
                 self.sig_process_remote_view.emit(data)
             elif command == 'ipykernel':
                 self.emit(SIGNAL('new_ipython_kernel(QString)'), data)
             elif command == 'open_file':
                 fname, lineno = data
                 self.emit(SIGNAL('open_file(QString,int)'), fname, lineno)
             else:
                 raise RuntimeError('Unsupported command: %r' % command)
             if DEBUG_INTROSPECTION:
                 logging.debug("received command: %r" % command)
         except:
             log_last_error(LOG_FILENAME, "notification thread")
         finally:
             try:
                 write_packet(self.notify_socket, output)
             except:
                 # The only reason why it should fail is that Spyder is 
                 # closing while this thread is still alive
                 break
Beispiel #10
0
 def run(self):
     """Start notification thread"""
     while True:
         if self.notify_socket is None:
             continue
         output = None
         try:
             try:
                 cdict = read_packet(self.notify_socket)
             except:
                 # This except statement is intended to handle a struct.error
                 # (but when writing 'except struct.error', it doesn't work)
                 # Note: struct.error is raised when the communication has
                 # been interrupted and the received data is not a string
                 # of length 8 as required by struct.unpack (see read_packet)
                 break
             if cdict is None:
                 # Another notification thread has just terminated and
                 # then wrote 'None' in the notification socket
                 # (see the 'finally' statement below)
                 continue
             if not isinstance(cdict, dict):
                 raise TypeError("Invalid data type: %r" % cdict)
             command = cdict['command']
             data = cdict.get('data')
             if command == 'pdb_step':
                 fname, lineno = data
                 self.emit(SIGNAL('pdb(QString,int)'), fname, lineno)
                 self.emit(SIGNAL('refresh_namespace_browser()'))
             elif command == 'refresh':
                 self.emit(SIGNAL('refresh_namespace_browser()'))
             elif command == 'remote_view':
                 self.sig_process_remote_view.emit(data)
             elif command == 'ipykernel':
                 self.emit(SIGNAL('new_ipython_kernel(QString)'), data)
             elif command == 'open_file':
                 fname, lineno = data
                 self.emit(SIGNAL('open_file(QString,int)'), fname, lineno)
             else:
                 raise RuntimeError('Unsupported command: %r' % command)
             if DEBUG_INTROSPECTION:
                 logging.debug("received command: %r" % command)
         except:
             log_last_error(LOG_FILENAME, "notification thread")
         finally:
             try:
                 write_packet(self.notify_socket, output)
             except:
                 # The only reason why it should fail is that Spyder is
                 # closing while this thread is still alive
                 break
Beispiel #11
0
 def run(self):
     """Start server"""
     sock = socket.socket(socket.AF_INET)
     sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     sock.bind( ("127.0.0.1", self.port) )
     
     while True:
         sock.listen(2)
         
         try:
             conn, _addr = sock.accept()
         except socket.error as e:
             # See Issue 1275 for details on why errno EINTR is
             # silently ignored here.
             eintr = errno.WSAEINTR if os.name == 'nt' else errno.EINTR
             if e.args[0] == eintr:
                 continue
             raise
         shell_id = read_packet(conn)
         
         if shell_id is not None:
             self.send_socket(shell_id, conn)
Beispiel #12
0
    def run(self):
        """Start server"""
        sock = socket.socket(socket.AF_INET)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(("127.0.0.1", self.port))

        while True:
            sock.listen(2)

            try:
                conn, _addr = sock.accept()
            except socket.error as e:
                # See Issue 1275 for details on why errno EINTR is
                # silently ignored here.
                eintr = errno.WSAEINTR if os.name == 'nt' else errno.EINTR
                if e.args[0] == eintr:
                    continue
                raise
            shell_id = read_packet(conn)

            if shell_id is not None:
                self.send_socket(shell_id, conn)
Beispiel #13
0
    def run(self):
        self.ipython_shell = None
        while True:
            output = pickle.dumps(None, pickle.HIGHEST_PROTOCOL)
            glbs = self.mglobals()
            try:
                if DEBUG_MONITOR:
                    logging.debug("****** Introspection request /Begin ******")
                command = PACKET_NOT_RECEIVED
                try:
                    timeout = self.timeout if self.auto_refresh else None
                    command = read_packet(self.i_request, timeout=timeout)
                    if command is None:
                        continue
                    timed_out = False
                except socket.timeout:
                    timed_out = True
                except struct.error:
                    # This should mean that Spyder GUI has crashed
                    if DEBUG_MONITOR:
                        logging.debug("struct.error -> quitting monitor")
                    break
                if timed_out:
                    if DEBUG_MONITOR:
                        logging.debug(
                            "connection timed out -> updating remote view")
                    self.update_remote_view()
                    if DEBUG_MONITOR:
                        logging.debug(
                            "****** Introspection request /End ******")
                    continue
                if DEBUG_MONITOR:
                    logging.debug("command: %r" % command)
                lcls = self.mlocals()
                result = eval(command, glbs, lcls)
                if DEBUG_MONITOR:
                    logging.debug(" result: %r" % result)
                if self.pdb_obj is None:
                    lcls["_"] = result
                # old com implementation: (see solution (1) in Issue 434)
                output = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
#                # new com implementation: (see solution (2) in Issue 434)
#                output = pickle.dumps((command, result),
#                                      pickle.HIGHEST_PROTOCOL)
            except SystemExit:
                break
            except:
                if DEBUG_MONITOR:
                    logging.debug("error!")
                log_last_error(LOG_FILENAME, command)
            finally:
                try:
                    if DEBUG_MONITOR:
                        logging.debug("updating remote view")
                    if self.refresh_after_eval:
                        self.update_remote_view()
                        self.refresh_after_eval = False
                    if DEBUG_MONITOR:
                        logging.debug("sending result")
                        logging.debug(
                            "****** Introspection request /End ******")
                    if command is not PACKET_NOT_RECEIVED:
                        if write_packet is None:
                            # This may happen during interpreter shutdown
                            break
                        else:
                            write_packet(self.i_request,
                                         output,
                                         already_pickled=True)
                except AttributeError, error:
                    if "'NoneType' object has no attribute" in str(error):
                        # This may happen during interpreter shutdown
                        break
                    else:
                        raise
                except TypeError, error:
                    if "'NoneType' object is not subscriptable" in str(error):
                        # This may happen during interpreter shutdown
                        break
                    else:
                        raise
Beispiel #14
0
 def setenv(self):
     """Set os.environ"""
     env = read_packet(self.i_request)
     os.environ = env
Beispiel #15
0
    def run(self):
        self.ipython_shell = None
        while True:
            output = pickle.dumps(None, pickle.HIGHEST_PROTOCOL)
            glbs = self.mglobals()
            try:
                if DEBUG_MONITOR:
                    logging.debug("****** Introspection request /Begin ******")
                command = PACKET_NOT_RECEIVED
                try:
                    timeout = self.timeout if self.auto_refresh else None
                    command = read_packet(self.i_request, timeout=timeout)
                    if command is None:
                        continue
                    timed_out = False
                except socket.timeout:
                    timed_out = True
                except struct.error:
                    # This should mean that Spyder GUI has crashed
                    if DEBUG_MONITOR:
                        logging.debug("struct.error -> quitting monitor")
                    break
                if timed_out:
                    if DEBUG_MONITOR:
                        logging.debug("connection timed out -> updating remote view")
                    self.update_remote_view()
                    if DEBUG_MONITOR:
                        logging.debug("****** Introspection request /End ******")
                    continue
                if DEBUG_MONITOR:
                    logging.debug("command: %r" % command)
                lcls = self.mlocals()
                result = eval(command, glbs, lcls)
                if DEBUG_MONITOR:
                    logging.debug(" result: %r" % result)
                if self.pdb_obj is None:
                    lcls["_"] = result
                # old com implementation: (see solution (1) in Issue 434)
                output = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
#                # new com implementation: (see solution (2) in Issue 434)
#                output = pickle.dumps((command, result),
#                                      pickle.HIGHEST_PROTOCOL)
            except SystemExit:
                break
            except:
                if DEBUG_MONITOR:
                    logging.debug("error!")
                log_last_error(LOG_FILENAME, command)
            finally:
                try:
                    if DEBUG_MONITOR:
                        logging.debug("updating remote view")
                    if self.refresh_after_eval:
                        self.update_remote_view()
                        self.refresh_after_eval = False
                    if DEBUG_MONITOR:
                        logging.debug("sending result")
                        logging.debug("****** Introspection request /End ******")
                    if command is not PACKET_NOT_RECEIVED:
                        if write_packet is None:
                            # This may happen during interpreter shutdown
                            break
                        else:
                            write_packet(self.i_request, output,
                                         already_pickled=True)
                except AttributeError, error:
                    if "'NoneType' object has no attribute" in str(error):
                        # This may happen during interpreter shutdown
                        break
                    else:
                        raise
                except TypeError, error:
                    if "'NoneType' object is not subscriptable" in str(error):
                        # This may happen during interpreter shutdown
                        break
                    else:
                        raise
Beispiel #16
0
 def setenv(self):
     """Set os.environ"""
     env = read_packet(self.i_request)
     os.environ = env