WebKit.AutoReloadingAppServer | index /usr/local/share/webware/WebKit/AutoReloadingAppServer.py

`AutoReloadingAppServer
This module defines `AutoReloadingAppServer`, a replacement for `AppServer`
that adds a file-monitoring and restarting to the AppServer. Used mostly like:
from AutoReloadingAppServer import AutoReloadingAppServer as AppServer
If `UseImportSpy` is set to False in AppServer.config, or FAM support is
not available, this requires regular polling. The interval for the polling
in seconds can be set with `AutoReloadPollInterval` in AppServer.config.`

Modules

``

errno | os | select | sys

Classes

``

WebKit.AppServer.AppServer(WebKit.ConfigurableForServerSidePath.ConfigurableForServerSidePath)
  AutoReloadingAppServer

class AutoReloadingAppServer(WebKit.AppServer.AppServer)

``

`AppServer AutoReloading.
This class adds functionality to `AppServer`, to notice changes to
source files, including servlets, PSPs, templates or changes to the
Webware source file themselves, and reload the server as necessary
to pick up the changes.
The server will also be restarted if a file which Webware *tried*
to import is modified. This is so that changes to a file containing
a syntax error (which would have prevented it from being imported)
will also cause the server to restart.
`

Method resolution order:
  AutoReloadingAppServer
  WebKit.AppServer.AppServer
  WebKit.ConfigurableForServerSidePath.ConfigurableForServerSidePath
  MiscUtils.Configurable.Configurable
  __builtin__.object

Methods defined here:

__init__(self, path=None)
  `Activate AutoReloading.`

activateAutoReload(self)
  `Start the monitor thread.`

deactivateAutoReload(self)
  `Stop the monitor thread.`

defaultConfig(self)
  `Return the default configuration.`

fileMonitorThreadLoop(self)
  `This the the main loop for the monitoring thread.
  Runs in its own thread, polling the files for changes directly
  (i.e., going through every file that's being used and checking
  its last-modified time, seeing if it's been changed since it
  was initially loaded).`

fileMonitorThreadLoopFAM(self)
  `Monitoring thread loop, but using the FAM library.`

monitorNewModule(self, filepath, mtime=None)
  `Add new file to be monitored.
  This is a callback which ImportSpy invokes to notify us of new files
  to monitor. This is only used when we are using FAM.`

restartIfNecessary(self)
  `Check if the app server should be restarted.
  This should be called regularly to see if a restart is required.
  The server can only restart from the main thread, other threads
  can't do the restart. So this polls to see if `shouldRestart`
  has been called.`

shouldRestart(self)
  `Tell the main thread to restart the server.`

shutDown(self)
  `Shut down the monitoring thread.
  This is done in addition to the normal shutdown procedure.`

Static methods defined here:

restart()
  `Do the actual restart.
  Call `shouldRestart` from outside the class.`

Methods inherited from WebKit.AppServer.AppServer:

application(self)
  `Return the Application singleton.`

checkForInstall(self)
  `Check whether Webware was installed.
  Exits with an error message if Webware was not installed.
  Called from `__init__`.`

closeThread(self)
  `This method is called when the shutdown sequence is initiated.`

configFilename(self)
  `Return the name of the AppServer configuration file.`

configReplacementValues(self)
  `Get config values that need to be escaped.`

createApplication(self)
  `Create and return an application object. Invoked by __init__.`

initiateShutdown(self)
  `Ask the master thread to begin the shutdown.`

isPersistent(self)
  `Check whether the AppServer is persistent.
  When using `OneShot`, the AppServer will exist only for a single
  request, otherwise it will stay around indefinitely.`

loadPlugIn(self, path)
  `Load and return the given plug-in.
  May return None if loading was unsuccessful (in which case this method
  prints a message saying so). Used by `loadPlugIns` (note the **s**).`

loadPlugIns(self)
  `Load all plug-ins.
  A plug-in allows you to extend the functionality of WebKit without
  necessarily having to modify its source. Plug-ins are loaded by
  AppServer at startup time, just before listening for requests.
  See the docs in `WebKit.PlugIn` for more info.`

numRequests(self)
  `Return the number of requests.
  Returns the number of requests received by this app server
  since it was launched.`

plugIn(self, name, default=<class 'MiscUtils.NoDefault'>)
  `Return the plug-in with the given name.`

plugIns(self)
  `Return a list of the plug-ins loaded by the app server.
  Each plug-in is a Python package.`

printStartUpMessage(self)
  `Invoked by __init__, prints a little intro.`

readyForRequests(self)
  `Declare ready for getting requests.
  Should be invoked by subclasses when they are finally ready to
  accept requests. Records some stats and prints a message.`

recordPID(self)
  `Save the pid of the AppServer to a file.`

serverSidePath(self, path=None)
  `Return the absolute server-side path of the WebKit app server.
  If the optional path is passed in, then it is joined with the
  server side directory to form a path relative to the app server.`

startTime(self)
  `Return the time the app server was started.
  The time is given as seconds, like time().`

version(self)
  `Return WebKit version.`

webKitPath(self)
  `Return teh WebKit path.`

webwarePath(self)
  `Return the Webware path.`

Methods inherited from WebKit.ConfigurableForServerSidePath.ConfigurableForServerSidePath:

setting(self, name, default=<class 'MiscUtils.NoDefault'>)
  `Return setting, using the server side path when indicated.
  Returns the setting, filtered by serverSidePath(),
  if the name ends with ``Filename`` or ``Dir``.`

Methods inherited from MiscUtils.Configurable.Configurable:

commandLineConfig(self)
  `Return the settings that came from the command-line.
  These settings come via addCommandLineSetting().`

config(self)
  `Return the configuration of the object as a dictionary.
  This is a combination of defaultConfig() and userConfig().
  This method caches the config.`

configName(self)
  `Return the name of the configuration file without the extension.
  This is the portion of the config file name before the '.config'.
  This is used on the command-line.`

hasSetting(self, name)
  `Check whether a configuration setting has been changed.`

printConfig(self, dest=None)
  `Print the configuration to the given destination.
  The default destination is stdout. A fixed with font is assumed
  for aligning the values to start at the same column.`

setSetting(self, name, value)
  `Set a particular configuration setting.`

userConfig(self)
  `Return the user config overrides.
  These settings can be found in the optional config file.
  Returns {} if there is no such file.
  The config filename is taken from configFilename().`

Data descriptors inherited from MiscUtils.Configurable.Configurable:

__dict__
  `dictionary for instance variables (if defined)`

__weakref__
  `list of weak references to the object (if defined)`

Functions

``

getFAM(modules)
  `Get FAM object based on the modules specified.
  Currently supported are
  pyinotify: http://github.com/seb-m/pyinotify
  python-gamin (gamin): http://www.gnome.org/~veillard/gamin/
  python-fam (_fam): http://python-fam.sourceforge.net`

sleep(...)
  `sleep(seconds)
  Delay execution for a given number of seconds. The argument may be
  a floating point number for subsecond precision.`

Data
`` |  | defaultConfig = {'AutoReload': False, 'AutoReloadPollInterval': 1, 'UseFAMModules': 'pyinotify gamin _fam', 'UseImportSpy': True}