def reload(modules, changed_module, filename): global reloading reloading = True success = True log(type='RELOAD:begin', prefix='RELOADING: ', text=shortened_filename(filename), severity=ERROR, module=changed_module.__name__, modules=dict((m.__name__, m.__file__) for m in modules)) try: for clear_func in clear_funcs: clear_func() mtimes.clear() linecache.checkcache() for m in modules: sys.modules.pop(m.__name__, None) load_main() except Exception: success = False log_exc() raise finally: log(type='RELOAD:end', severity=DEBUG, success=success, text='Reloaded successfully' if success else 'Reloaded with errors') reloading = False
def reload(): global last_check_time now = time() if abs(now - last_check_time) <= options.RELOADING_CHECK_INTERVAL: return with lock: if abs(now - last_check_time) <= options.RELOADING_CHECK_INTERVAL: return last_check_time = now changed = {} for fname, mtime, trans in trans_files: try: new_mtime = get_mtime(fname) except: # file not found? new_mtime = None if new_mtime != mtime: changed[fname] = new_mtime if not changed: return erroneous = set() log(type='RELOAD:begin', prefix='RELOADING: ', text=shortened_filename(fname), severity=ERROR, files=[ fname for fname, mtime, trans in trans_files ], changed=changed) try: translations.clear() for i, (fname, mtime, trans) in enumerate(trans_files): if fname in changed: new_mtime = changed[fname] trans = {} if new_mtime is not None: try: trans = load(fname) except: erroneous.add(fname) log_exc() trans_files[i] = fname, new_mtime, trans update(translations, trans) finally: log(type='RELOAD:end', severity=DEBUG, success=not erroneous, erroneous=erroneous, text='Reloaded with errors' if erroneous else 'Reloaded successfully')