hupper API

hupper.start_reloader(worker_path, reload_interval=1, verbose=1, monitor_factory=None, worker_args=None, worker_kwargs=None)[source]

Start a monitor and then fork a worker process which starts by executing the importable function at worker_path.

If this function is called from a worker process that is already being monitored then it will return a reference to the current hupper.interfaces.IReloaderProxy which can be used to communicate with the monitor.

worker_path must be a dotted string pointing to a globally importable function that will be executed to start the worker. An example could be myapp.cli.main. In most cases it will point at the same function that is invoking start_reloader in the first place.

reload_interval is a value in seconds and will be used to throttle restarts.

verbose controls the output. Set to 0 to turn off any logging of activity and turn up to 2 for extra output.

monitor_factory is an instance of hupper.interfaces.IFileMonitorFactory. If left unspecified, this will try to create a hupper.watchdog.WatchdogFileMonitor if watchdog is installed and will fallback to the less efficient hupper.polling.PollingFileMonitor otherwise.

hupper.is_active()[source]

Return True if the current process being monitored by a parent process.

hupper.get_reloader()[source]

Get a reference to the current hupper.interfaces.IReloaderProxy.

Raises a RuntimeError if the current process is not actively being monitored by a parent process.

hupper.is_watchdog_supported()[source]

Return True if watchdog is available.

class hupper.reloader.Reloader(worker_path, monitor_factory, reload_interval=1, verbose=1, worker_args=None, worker_kwargs=None)[source]

A wrapper class around a file monitor which will handle changes by restarting a new worker process.

run()[source]

Execute the reloader forever, blocking the current thread.

This will invoke sys.exit(1) if interrupted.

run_once()[source]

Execute the worker once.

This method will return after a file change is detected.

class hupper.interfaces.IReloaderProxy[source]
abstract trigger_reload()[source]

Signal the monitor to execute a reload.

abstract watch_files(files)[source]

Signal to the monitor to track some custom paths.

class hupper.interfaces.IFileMonitor[source]
abstract add_path(path)[source]

Start monitoring a new path.

abstract join()[source]

Block until the monitor has stopped.

abstract start()[source]

Start the monitor. This method should not block.

abstract stop()[source]

Trigger the monitor to stop.

This should be called before invoking join().

class hupper.interfaces.IFileMonitorFactory[source]
__call__(callback)[source]

Return an IFileMonitor instance.

callback is a callable to be invoked by the IFileMonitor when file changes are detected. It should accept the path of the changed file as its only parameter.

class hupper.polling.PollingFileMonitor(callback, poll_interval=1)[source]

An hupper.interfaces.IFileMonitor that stats the files at periodic intervals.

callback is a callable that accepts a path to a changed file.

poll_interval is a value in seconds between scans of the files on disk. Do not set this too low or it will eat your CPU and kill your drive.

add_path(path)[source]

Start monitoring a new path.

run()[source]

Method representing the thread’s activity.

You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.

stop()[source]

Trigger the monitor to stop.

This should be called before invoking join().

class hupper.watchdog.WatchdogFileMonitor(callback)[source]

An hupper.interfaces.IFileMonitor that uses watchdog to watch for file changes uses inotify.

callback is a callable that accepts a path to a changed file.

add_path(path)[source]

Start monitoring a new path.

on_any_event(event)[source]

Catch-all event handler.

Parameters:

event (FileSystemEvent) – The event object representing the file system event.