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)
|