# allows bin/* to work without installation # this should be turned off when the programs are installed import sys, os, socket def fixSysPath(): root = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..')) + '/' # this is site-packages/zope.interface-4.5.0-py2.7-nspkg.pth, # slightly edited. import types has_mfs = sys.version_info > (3, 5); p = root + 'env/local/lib/python2.7/site-packages/zope' importlib = has_mfs and __import__('importlib.util'); has_mfs and __import__('importlib.machinery'); m = has_mfs and sys.modules.setdefault( 'zope', importlib.util.module_from_spec( importlib.machinery.PathFinder.find_spec( 'zope', [os.path.dirname(p)]))); m = m or sys.modules.setdefault('zope', types.ModuleType('zope')); mp = (m or []) and m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p) p = root + 'env/local/lib/python2.7/site-packages/greplin' importlib = has_mfs and __import__('importlib.util'); has_mfs and __import__('importlib.machinery'); m = has_mfs and sys.modules.setdefault('greplin', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('greplin', [os.path.dirname(p)]))); m = m or sys.modules.setdefault('greplin', types.ModuleType('greplin')); mp = (m or []) and m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p) sys.path = [ root, root + 'env/lib/python2.7', root + 'env/lib/python2.7/plat-x86_64-linux-gnu', root + 'env/lib/python2.7/lib-tk', root + 'env/lib/python2.7/lib-old', root + 'env/lib/python2.7/lib-dynload', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', root + 'env/local/lib/python2.7/site-packages', root + 'env/local/lib/python2.7/site-packages/gtk-2.0', root + 'env/lib/python2.7/site-packages', root + 'env/lib/python2.7/site-packages/gtk-2.0', ] fixSysPath() from twisted.python.failure import Failure try: import Tkinter except ImportError: pass else: def rce(self, exc, val, tb): sys.stderr.write("Exception in Tkinter callback\n") if True: sys.excepthook(exc, val, tb) else: Failure(val, exc, tb).printDetailedTraceback() Tkinter.Tk.report_callback_exception = rce import coloredlogs, logging, time try: import faulthandler faulthandler.enable() except ImportError: pass progName = sys.argv[0].split('/')[-1] log = logging.getLogger() # this has to get the root logger log.name = progName # but we can rename it for clarity class FractionTimeFilter(logging.Filter): def filter(self, record): record.fractionTime = ( time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(record.created)) + ("%.3f" % (record.created % 1)).lstrip('0')) # Don't filter the record. return 1 coloredlogs.install( level='DEBUG', fmt='%(fractionTime)s %(name)s[%(process)d] %(levelname)s %(message)s') logging.getLogger().handlers[0].addFilter(FractionTimeFilter()) def setTerminalTitle(s): if os.environ.get('TERM', '') in ['xterm', 'rxvt', 'rxvt-unicode-256color']: print "\033]0;%s\007" % s # not escaped/protected correctly if 'listsongs' not in sys.argv[0] and 'homepageConfig' not in sys.argv[0]: setTerminalTitle('[%s] %s' % (socket.gethostname(), ' '.join(sys.argv).replace('bin/', ''))) # see http://www.youtube.com/watch?v=3cIOT9kM--g for commands that make # profiles and set background images