Exemple #1
0
def main():
    try:
        klogger.logger = klogger.get_logger("ketchlip", "webserver.log")

        klogger.info("Starting webserver on port " + str(PORT))

        MyHandler.set_www_root(config.config.www_root)
        index_file, url_lookup_file = config.config.base_dir + "index", config.config.base_dir + "url_lookup"
        SearchSingleton().load(index_file, url_lookup_file)

        file_observer = FileObserver(index_file)
        file_observer.register_listener(SearchSingleton())
        file_observer.start_observe()

        server = HTTPServer(('', PORT), MyHandler)
        klogger.info("HTTP server ready to serve on port " + str(PORT))
        server.serve_forever()
    except KeyboardInterrupt:
        klogger.info('^C received, shutting down server')
        if file_observer:
            file_observer.unregister_listener(SearchSingleton())
            file_observer.stop_observe()
        if server:
            server.socket.close()
    except Exception, e:
        klogger.exception(e)
def test_should_wait_to_notify_until_file_is_closed():

    try:
        # Given a file
        file_path = "/tmp/file_path"

        FILE = open(file_path,"w")
        FILE.write("foo")
        FILE.close()

        # FileObserver will observe file for changes
        file_observer = FileObserver(file_path)
        # For speediness we want to keep the timeouts as short as possible
        file_observer.POLLING_FREQUENCY_IN_SECONDS = 0
        file_observer.GRACE_TIME_IN_SECONDS = 1

        # Listener will get noticed by FileObserver when file is updated
        listener = Listener()
        file_observer.register_listener(listener)
        file_observer.start_observe()
        time.sleep(1)

        # Here we're simulating someone writing to the file
        FILE = open(file_path,"w")
        FILE.write("bar")

        # Assert that the file is still open
        eq_(False, FILE.closed)

        # Sleep and check Listener for messages (should be nothing)
        time.sleep(1)
        eq_(0, len(listener.messages))

        # Close the file and wait till grace time has passed
        FILE.close()
        time.sleep(1)

        # Now the listener should have received an update
        eq_("file changed", listener.message)
        eq_(1, len(listener.messages))

    finally:
        if FILE and not FILE.closed:
            FILE.close()
        if file_observer:
            file_observer.stop_observe()
def test_notify():
    file_path = "/tmp/file_path"

    FILE = open(file_path,"w")
    FILE.write("foo")
    FILE.close()

    file_observer = FileObserver(file_path)
    file_observer.POLLING_FREQUENCY_IN_SECONDS = 0
    file_observer.GRACE_TIME_IN_SECONDS = 0
    listener = Listener()

    file_observer.register_listener(listener)
    file_observer.start_observe()
    time.sleep(1)

    FILE = open(file_path,"w")
    FILE.write("bar")
    FILE.close()

    time.sleep(1)
    file_observer.stop_observe()
    eq_("file changed", listener.message)