def _wait_for_edit(extra_files=[], interval=1): """Waits until one of the files we're using have changed """ from itertools import chain mtimes = {} while 1: for filename in chain(_iter_module_files(), extra_files or ()): try: mtime = os.stat(filename).st_mtime except OSError: continue old_time = mtimes.get(filename) if old_time is None: mtimes[filename] = mtime continue elif mtime > old_time: return time.sleep(interval)
def _reloader_stat_loop(extra_files=None, interval=1): """ When this function is run from the main thread, it will force other threads to exit when any modules currently loaded change. Copyright notice. This function is based on the autoreload.py from the CherryPy trac which originated from WSGIKit which is now dead. :param extra_files: a list of additional files it should watch. """ mtimes = {} def touch(fname, times=None): """ emulate bash `touch` """ with file(fname, 'a+'): os.utime(fname, times) while 1: for filename in chain(_iter_module_files(), extra_files or ()): try: mtime = os.stat(filename).st_mtime except OSError: continue old_time = mtimes.get(filename) if old_time is None: mtimes[filename] = mtime continue elif mtime > old_time: _log('info', ' * Detected change in %r, reloading,' % ( filename )) touch(self.tmp_file) sys.exit(3) time.sleep(interval)