git.fiddlerwoaroof.com
sitecustomize3.py
5e6d4108
 __license__ = '''\
 # Copyright (c) 2011 Edward Langley
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
 # are met:
 #
 # Redistributions of source code must retain the above copyright notice,
 # this list of conditions and the following disclaimer.
 #
 # Redistributions in binary form must reproduce the above copyright
 # notice, this list of conditions and the following disclaimer in the
 # documentation and/or other materials provided with the distribution.
 #
 # Neither the name of the project's author nor the names of its
 # contributors may be used to endorse or promote products derived from
 # this software without specific prior written permission.
 #
 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.'''
 
 import re
 import functools
 import os.path
 import inspect
 def inst(x): return x()
 @inst
 class __Null(object): pass
 def getTerminalSize():
     def ioctl_GWINSZ(fd):
         try:
             import fcntl, termios, struct, os
             cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))
         except:
             return None
         return cr
     cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
     if not cr:
         try:
             fd = os.open(os.ctermid(), os.O_RDONLY)
             cr = ioctl_GWINSZ(fd)
             os.close(fd)
         except:
             pass
     if not cr:
         try:
             cr = (env['LINES'], env['COLUMNS'])
         except:
             cr = (25, 80)
     return int(cr[1]), int(cr[0])
 
 
 def cmp(a,b): return (a > b) - (a < b)
 
 def sort_(nms):
   return sorted(nms, key = functools.cmp_to_key(lambda x,y: cmp(x.lower().lstrip('_').rpartition('__')[2], y.lower().lstrip('_').rpartition('__')[2])))
 
 def sort_decorator(func):
   @functools.wraps(func)
   def _inner(*a, **kw):
     result = func(*a, **kw)
     return sort_(result)
   return _inner
 
 def pprint_decorator(func):
   @functools.wraps(func)
   def _inner(*args, **kwargs):
     result = func(*args, **kwargs)
     return pprint(result)
   return _inner
 
 def dir_decorator(func):
     @functools.wraps(func)
     def _inner(nm=__Null, match=__Null):
             # print(get_interpframe())
             result = None
             if nm is __Null: result = get_interpframe().f_globals.keys()
             else:
                     result = func(nm)
                     if match is not __Null:
                             x = [x for x in result if x.startswith(match)]
                             if x: result = x
                             else:
                                     x = [x for x in result if x.endswith(match)]
                                     if x: result = x
                                     else:
                                             omatch = match
                                             if not hasattr(match, 'match'): match = re.compile(match)
                                             x = [x for x in result if match.match(x)]
                                             if x: result = x
                                             else:
                                                     raise ValueError('No symbols match %s' % omatch)
                             if x: result = x
             return result
     return _inner
 
 def _pprint(nms):
     length = max(len(s) for s in nms)
     count = 0
     cc = 1
     while (cc*length) < ((getTerminalSize()[0])-2*cc):
         cc+=1
     cc -= 1
     if cc <= 0: cc = 1
     final_newline = False
     for v, c in enumerate(nms):
         final_newline = False
         print(c.strip().ljust(length),end='')
         if v % cc == cc-1:
             final_newline = True
             print()
     if not final_newline:
         print()
 
 pprint = _pprint
 
 try:
   __builtins__['pdir'] = pprint_decorator(sort_decorator(dir_decorator(dir)))
   __builtins__['fwprint'] = pprint
 except:
   __builtins__.pdir = pprint_decorator(sort_decorator(dir_decorator(dir)))
   __builtins__.fwprint = pprint
 
 try:
   import rlcompleter
   import readline
 except ImportError:
   pass
 
 readline.parse_and_bind ("tab complete")
 
 import tempfile, subprocess
 def get_interpframe(): return inspect.getouterframes(inspect.currentframe())[-1][0]
 
 def e(name=None):
   def load_file():
     result = tempfile.NamedTemporaryFile(delete=False, dir=os.path.join(os.environ['HOME'], 'sandbox','unsorted'), prefix='pythonsnippets_', suffix='.py')
     print(__license__.encode(), '\n\n'.encode(), file=result)
     result.flush()
     return result
 
   if name is not None:
     def load_file():
       existed = True
 
       nm = os.path.join(os.environ['HOME'], 'sandbox', '%s.py' % name)
       mode = 'r+'
       if not os.path.exists(nm):
         mode = 'w'
         existed = False
 
       result = open(nm, mode)
       if not existed:
         print(__license__.encode(), '\n\n'.encode(), file=result)
         result.flush()
       return result
 
   f = load_file()
   print ('editing %s, press Enter to continue...' % f.name)
 
   try:
     try: subprocess.call(['vim', '+31', r'+start', f.name])
     except Exception as e: print (e)
     f.close()
     f = open(f.name)
     a = f.read()
     exec (a in get_interpframe().f_globals)
   finally:
     f.close()
 
 def ls(name):
   load_file = lambda: open('/Users/edwlan/sandbox/unsorted/pythonsnippets_%s.py' % name)
   try:
     f = load_file()
   except IOError:
     load_file = lambda: open('/Users/edwlan/sandbox/%s.py' % name)
     f = load_file()
 
   raw_input('loading %s, press Enter to continue...' % f.name)
   try:
     exec (f.read() in get_interpframe().f_globals)
   finally:
     f.close()
 
 
 try:
   __builtins__['e'] = e
   __builtins__['ls'] = ls
 except:
   __builtins__.e = e
   __builtins__.ls = ls
 
 #histfile = os.path.join(os.environ["HOME"], ".pyhist2.7")
 #try: readline.read_history_file(histfile)
 #except IOError: pass
 
 try:
   import pip
   try:
     def ip(name):
       try: pip.main(['install', name])
       except SystemExit: pass
     __builtins__['ip'] = ip
   except:
     __builtins__.ip = ip
 except ImportError:
   pass
 
 
 #import atexit
 #atexit.register(readline.write_history_file, histfile)