home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import time
- import os
- import threading
- import sys
- import types
- import imp
- import inspect
- import traceback
- import atexit
- import weakref
-
- def _get_compiled_ext():
- for ext, mode, typ in imp.get_suffixes():
- if typ == imp.PY_COMPILED:
- return ext
-
-
- PY_COMPILED_EXT = _get_compiled_ext()
-
- class ModuleReloader(object):
- failed = { }
- modules = { }
- skip_modules = { }
- check_all = True
- old_objects = { }
-
- def check(self, check_all = False):
- if check_all or self.check_all:
- modules = sys.modules.keys()
- else:
- modules = self.modules.keys()
- for modname in modules:
- m = sys.modules.get(modname, None)
- if modname in self.skip_modules:
- continue
-
- if not hasattr(m, '__file__'):
- continue
-
- if m.__name__ == '__main__':
- continue
-
- filename = m.__file__
- dirname = os.path.dirname(filename)
- (path, ext) = os.path.splitext(filename)
- if ext.lower() == '.py':
- ext = PY_COMPILED_EXT
- filename = os.path.join(dirname, path + PY_COMPILED_EXT)
-
- if ext != PY_COMPILED_EXT:
- continue
-
-
- try:
- pymtime = os.stat(filename[:-1]).st_mtime
- if pymtime <= os.stat(filename).st_mtime:
- continue
-
- if self.failed.get(filename[:-1], None) == pymtime:
- continue
- except OSError:
- continue
-
-
- try:
- superreload(m, reload, self.old_objects)
- if filename[:-1] in self.failed:
- del self.failed[filename[:-1]]
- continue
- print >>sys.stderr, '[autoreload of %s failed: %s]' % (modname, traceback.format_exc(1))
- self.failed[filename[:-1]] = pymtime
- continue
-
-
-
-
-
- def update_function(old, new):
- for name in [
- 'func_code',
- 'func_defaults',
- 'func_doc',
- 'func_closure',
- 'func_globals',
- 'func_dict']:
-
- try:
- setattr(old, name, getattr(new, name))
- continue
- except (AttributeError, TypeError):
- continue
-
-
-
-
-
- def update_class(old, new):
- for key in old.__dict__.keys():
- old_obj = getattr(old, key)
-
- try:
- new_obj = getattr(new, key)
- except AttributeError:
-
- try:
- delattr(old, key)
- continue
- except (AttributeError, TypeError):
- continue
-
-
- except:
- None<EXCEPTION MATCH>(AttributeError, TypeError)
-
- if update_generic(old_obj, new_obj):
- continue
-
-
- try:
- setattr(old, key, getattr(new, key))
- continue
- except (AttributeError, TypeError):
- continue
-
-
-
-
-
- def update_property(old, new):
- update_generic(old.fdel, new.fdel)
- update_generic(old.fget, new.fget)
- update_generic(old.fset, new.fset)
-
-
- def isinstance2(a, b, typ):
- if isinstance(a, typ):
- pass
- return isinstance(b, typ)
-
- UPDATE_RULES = [
- ((lambda a, b: isinstance2(a, b, types.ClassType)), update_class),
- ((lambda a, b: isinstance2(a, b, types.TypeType)), update_class),
- ((lambda a, b: isinstance2(a, b, types.FunctionType)), update_function),
- ((lambda a, b: isinstance2(a, b, property)), update_property),
- ((lambda a, b: isinstance2(a, b, types.MethodType)), (lambda a, b: update_function(a.im_func, b.im_func)))]
-
- def update_generic(a, b):
- for type_check, update in UPDATE_RULES:
- if type_check(a, b):
- update(a, b)
- return True
-
- return False
-
-
- class StrongRef(object):
-
- def __init__(self, obj):
- self.obj = obj
-
-
- def __call__(self):
- return self.obj
-
-
-
- def superreload(module, reload = reload, old_objects = { }):
- for name, obj in module.__dict__.items():
- if not hasattr(obj, '__module__') or obj.__module__ != module.__name__:
- continue
-
- key = (module.__name__, name)
-
- try:
- old_objects.setdefault(key, []).append(weakref.ref(obj))
- continue
- except TypeError:
- if isinstance(obj, types.ClassType):
- old_objects.setdefault(key, []).append(StrongRef(obj))
-
- isinstance(obj, types.ClassType)
-
-
-
-
- try:
- old_name = module.__name__
- module.__dict__.clear()
- module.__dict__['__name__'] = old_name
- except (TypeError, AttributeError, KeyError):
- None<EXCEPTION MATCH>TypeError
- None<EXCEPTION MATCH>TypeError
- except:
- None<EXCEPTION MATCH>TypeError
-
- module = reload(module)
- for name, new_obj in module.__dict__.items():
- key = (module.__name__, name)
- if key not in old_objects:
- continue
-
- new_refs = []
- for old_ref in old_objects[key]:
- old_obj = old_ref()
- if old_obj is None:
- continue
-
- new_refs.append(old_ref)
- update_generic(old_obj, new_obj)
-
- if new_refs:
- old_objects[key] = new_refs
- continue
- del old_objects[key]
-
- return module
-
- reloader = ModuleReloader()
- import IPython.ipapi as IPython
- ip = IPython.ipapi.get()
- autoreload_enabled = False
-
- def runcode_hook(self):
- if not autoreload_enabled:
- raise IPython.ipapi.TryNext
- autoreload_enabled
-
- try:
- reloader.check()
- except:
- pass
-
-
-
- def enable_autoreload():
- global autoreload_enabled
- autoreload_enabled = True
-
-
- def disable_autoreload():
- global autoreload_enabled
- autoreload_enabled = False
-
-
- def autoreload_f(self, parameter_s = ''):
- if parameter_s == '':
- reloader.check(True)
- elif parameter_s == '0':
- disable_autoreload()
- elif parameter_s == '1':
- reloader.check_all = False
- enable_autoreload()
- elif parameter_s == '2':
- reloader.check_all = True
- enable_autoreload()
-
-
-
- def aimport_f(self, parameter_s = ''):
- modname = parameter_s
- if not modname:
- to_reload = reloader.modules.keys()
- to_reload.sort()
- to_skip = reloader.skip_modules.keys()
- to_skip.sort()
- if reloader.check_all:
- print 'Modules to reload:\nall-expect-skipped'
- else:
- print 'Modules to reload:\n%s' % ' '.join(to_reload)
- print '\nModules to skip:\n%s' % ' '.join(to_skip)
- elif modname.startswith('-'):
- modname = modname[1:]
-
- try:
- del reloader.modules[modname]
- except KeyError:
- pass
-
- reloader.skip_modules[modname] = True
- else:
-
- try:
- del reloader.skip_modules[modname]
- except KeyError:
- pass
-
- reloader.modules[modname] = True
- __import__(modname)
- basename = modname.split('.')[0]
- mod = sys.modules[basename]
- ip.to_user_ns({
- basename: mod })
-
-
- def init():
- ip.expose_magic('autoreload', autoreload_f)
- ip.expose_magic('aimport', aimport_f)
- ip.set_hook('pre_runcode_hook', runcode_hook)
-
- init()
-