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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
        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)