home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1765 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  5.4 KB  |  165 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import IPython.ipapi as IPython
  5. import socket
  6. import select
  7. import os
  8. import threading
  9. import subprocess
  10. import re
  11. ERRCONDS = select.POLLHUP | select.POLLERR
  12. SERVER = None
  13. ip = IPython.ipapi.get()
  14.  
  15. class IpyServer(threading.Thread):
  16.     
  17.     def __init__(self, sname):
  18.         super(IpyServer, self).__init__()
  19.         self.keep_running = True
  20.         self._IpyServer__sname = sname
  21.         self.socket = socket.socket(socket.AF_UNIX)
  22.         self.poller = select.poll()
  23.         self.current_conns = dict()
  24.         self.setDaemon(True)
  25.  
  26.     
  27.     def listen(self):
  28.         self.socket.bind(self._IpyServer__sname)
  29.         self.socket.listen(1)
  30.  
  31.     
  32.     def __handle_error(self, socket):
  33.         if socket == self.socket.fileno():
  34.             self.keep_running = False
  35.             for a in self.current_conns.values():
  36.                 a.close()
  37.             
  38.             return False
  39.         y = self.current_conns[socket]
  40.         del self.current_conns[socket]
  41.         y.close()
  42.         self.poller.unregister(socket)
  43.  
  44.     
  45.     def serve_me(self):
  46.         self.listen()
  47.         self.poller.register(self.socket, select.POLLIN | ERRCONDS)
  48.         while self.keep_running:
  49.             
  50.             try:
  51.                 avail = self.poller.poll(1)
  52.             except:
  53.                 continue
  54.  
  55.             if not avail:
  56.                 continue
  57.             
  58.             for sock, conds in avail:
  59.                 if conds & ERRCONDS:
  60.                     if self._IpyServer__handle_error(sock):
  61.                         continue
  62.                     else:
  63.                         break
  64.                 
  65.                 if sock == self.socket.fileno():
  66.                     y = self.socket.accept()[0]
  67.                     self.poller.register(y, select.POLLIN | ERRCONDS)
  68.                     self.current_conns[y.fileno()] = y
  69.                 else:
  70.                     y = self.current_conns.get(sock)
  71.                 self.handle_request(y)
  72.             
  73.         os.remove(self._IpyServer__sname)
  74.  
  75.     run = serve_me
  76.     
  77.     def stop(self):
  78.         self.keep_running = False
  79.  
  80.     
  81.     def handle_request(self, sock):
  82.         sock.settimeout(1)
  83.         while self.keep_running:
  84.             
  85.             try:
  86.                 x = sock.recv(4096)
  87.             except socket.timeout:
  88.                 continue
  89.  
  90.             break
  91.         self.do_it(x)
  92.  
  93.     
  94.     def do_it(self, data):
  95.         data = data.split('\n')
  96.         cmds = list()
  97.         for line in data:
  98.             cmds.append(line)
  99.         
  100.         ip.runlines(cmds)
  101.  
  102.  
  103.  
  104. def shutdown_server(self):
  105.     if SERVER:
  106.         SERVER.stop()
  107.         SERVER.join(3)
  108.     
  109.     raise IPython.ipapi.TryNext
  110.  
  111. ip.set_hook('shutdown_hook', shutdown_server, 10)
  112.  
  113. def setup(sessionname = '', socketdir = os.path.expanduser('~/.ipython/')):
  114.     global SERVER
  115.     if sessionname:
  116.         session = sessionname
  117.     elif os.environ.get('IPY_SESSION'):
  118.         session = os.environ.get('IPY_SESSION')
  119.     else:
  120.         session = 'IPYS'
  121.     vimhook.vimserver = session
  122.     vimhook.ipyserver = os.path.join(socketdir, session)
  123.     if not SERVER:
  124.         SERVER = IpyServer(vimhook.ipyserver)
  125.         SERVER.start()
  126.     
  127.  
  128.  
  129. def vimhook(self, fname, line):
  130.     env = os.environ.copy()
  131.     vserver = vimhook.vimserver.upper()
  132.     check = subprocess.Popen('gvim --serverlist', stdout = subprocess.PIPE, shell = True)
  133.     check.wait()
  134.     cval = _[1]
  135.     vimhook.extras = ''
  136.     env['IPY_SESSION'] = vimhook.vimserver
  137.     env['IPY_SERVER'] = vimhook.ipyserver
  138.     if line is None:
  139.         line = ''
  140.     else:
  141.         line = '+' + line
  142.     vim_cmd = 'gvim --servername %s %s %s %s' % (vimhook.vimserver, vimargs, line, fname)
  143.     subprocess.call(vim_cmd, env = env, shell = True)
  144.  
  145. vimhook.vimserver = ''
  146. vimhook.ipyserver = ''
  147. ip.set_hook('editor', vimhook)
  148. newtab = re.compile('-t(?:\\s|$)')
  149.  
  150. def vim(self, argstr):
  151.     
  152.     def do_arg(pat, rarg):
  153.         x = len(pat.findall(argstr))
  154.         if x:
  155.             a = pat.sub('', argstr)
  156.             return (rarg, a)
  157.         return ('', argstr)
  158.  
  159.     (t, argstr) = do_arg(newtab, '-tab')
  160.     vimhook.extras = t
  161.     argstr = 'edit -x ' + argstr
  162.     ip.magic(argstr)
  163.  
  164. ip.expose_magic('vim', vim)
  165.