home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import IPython.ipapi as IPython
- import socket
- import select
- import os
- import threading
- import subprocess
- import re
- ERRCONDS = select.POLLHUP | select.POLLERR
- SERVER = None
- ip = IPython.ipapi.get()
-
- class IpyServer(threading.Thread):
-
- def __init__(self, sname):
- super(IpyServer, self).__init__()
- self.keep_running = True
- self._IpyServer__sname = sname
- self.socket = socket.socket(socket.AF_UNIX)
- self.poller = select.poll()
- self.current_conns = dict()
- self.setDaemon(True)
-
-
- def listen(self):
- self.socket.bind(self._IpyServer__sname)
- self.socket.listen(1)
-
-
- def __handle_error(self, socket):
- if socket == self.socket.fileno():
- self.keep_running = False
- for a in self.current_conns.values():
- a.close()
-
- return False
- y = self.current_conns[socket]
- del self.current_conns[socket]
- y.close()
- self.poller.unregister(socket)
-
-
- def serve_me(self):
- self.listen()
- self.poller.register(self.socket, select.POLLIN | ERRCONDS)
- while self.keep_running:
-
- try:
- avail = self.poller.poll(1)
- except:
- continue
-
- if not avail:
- continue
-
- for sock, conds in avail:
- if conds & ERRCONDS:
- if self._IpyServer__handle_error(sock):
- continue
- else:
- break
-
- if sock == self.socket.fileno():
- y = self.socket.accept()[0]
- self.poller.register(y, select.POLLIN | ERRCONDS)
- self.current_conns[y.fileno()] = y
- else:
- y = self.current_conns.get(sock)
- self.handle_request(y)
-
- os.remove(self._IpyServer__sname)
-
- run = serve_me
-
- def stop(self):
- self.keep_running = False
-
-
- def handle_request(self, sock):
- sock.settimeout(1)
- while self.keep_running:
-
- try:
- x = sock.recv(4096)
- except socket.timeout:
- continue
-
- break
- self.do_it(x)
-
-
- def do_it(self, data):
- data = data.split('\n')
- cmds = list()
- for line in data:
- cmds.append(line)
-
- ip.runlines(cmds)
-
-
-
- def shutdown_server(self):
- if SERVER:
- SERVER.stop()
- SERVER.join(3)
-
- raise IPython.ipapi.TryNext
-
- ip.set_hook('shutdown_hook', shutdown_server, 10)
-
- def setup(sessionname = '', socketdir = os.path.expanduser('~/.ipython/')):
- global SERVER
- if sessionname:
- session = sessionname
- elif os.environ.get('IPY_SESSION'):
- session = os.environ.get('IPY_SESSION')
- else:
- session = 'IPYS'
- vimhook.vimserver = session
- vimhook.ipyserver = os.path.join(socketdir, session)
- if not SERVER:
- SERVER = IpyServer(vimhook.ipyserver)
- SERVER.start()
-
-
-
- def vimhook(self, fname, line):
- env = os.environ.copy()
- vserver = vimhook.vimserver.upper()
- check = subprocess.Popen('gvim --serverlist', stdout = subprocess.PIPE, shell = True)
- check.wait()
- cval = _[1]
- vimhook.extras = ''
- env['IPY_SESSION'] = vimhook.vimserver
- env['IPY_SERVER'] = vimhook.ipyserver
- if line is None:
- line = ''
- else:
- line = '+' + line
- vim_cmd = 'gvim --servername %s %s %s %s' % (vimhook.vimserver, vimargs, line, fname)
- subprocess.call(vim_cmd, env = env, shell = True)
-
- vimhook.vimserver = ''
- vimhook.ipyserver = ''
- ip.set_hook('editor', vimhook)
- newtab = re.compile('-t(?:\\s|$)')
-
- def vim(self, argstr):
-
- def do_arg(pat, rarg):
- x = len(pat.findall(argstr))
- if x:
- a = pat.sub('', argstr)
- return (rarg, a)
- return ('', argstr)
-
- (t, argstr) = do_arg(newtab, '-tab')
- vimhook.extras = t
- argstr = 'edit -x ' + argstr
- ip.magic(argstr)
-
- ip.expose_magic('vim', vim)
-