WebKit version 0.9 released on 11/13/05
It has taken much longer than usual to finish this release, and it is impossible to track and list every change. So the following will mention only a few of the many changes, improvements and bugfixes that have been made.
-u(unbuffered output) and
-O(optimize) parameters and passes them to Python. These parameters must precede any other parameters. Other parameters will be passed to
-dallowing to point the default context to a location not inside the working directory, so you can keep your code completely separate from the working directory. It also accepts
-loptions to add multiple application library dirs to the Python path, and options to set the ownership of the working directory files. To see all options, run the command without any parameters.
EnterDebuggerOnExceptionoption to Application.config. If True, and if the AppServer is running from an interactive terminal, an uncaught exception will cause the AppServer to enter the debugger, allowing the developer to call functions, investigate variables, etc. See Python debugger (pdb) docs for more information. You will certainly want to turn this off when deploying the site. Defaults to False (off).
UseCookieSessionsthat defaults to True. If set to False, then a session cookie will never be sent in the response. Use this along with
UseAutomaticPathSessionsto only use path sessions and never use cookie sessions.
HTTPRequest.setSessionId()method which allows the use of session IDs that are sent via means other than cookies or URL parameters (an example would be via an XML-RPC parameter). See the docstring for more details.
DebugAppServer, a single-threaded app server that makes it possible to debug servlets using a standard Python debugger. Tested on Windows only, using both PythonWin and JEdit with the JPyDbg plugin. See WebKit/DebugAppServer.py for details.
IncludeEditLinkin Application.config, an  link will be put next to each line in tracebacks. That link will point to a file of type application/x-webkit-edit-file, which you should configure your browser to run with Webware/bin/editfile.py. If you configure editfile.py correctly, then it will automatically open the respective Python module with your favorite Python editor and put the cursor on the erroneous line.
WebKit.Objectnow inherits Python's object. This affects all other classes for which Super() should now work.
mimetypes.guess_type()cannot return something meaningful) are now served up with a mime type of application/octet-stream instead of text/html.
xmlrpclib.Faultexceptions to be passed through unmolested.
Pagehas been refactored into
HTTPContentcan be used as a base class for servlets which generate non-HTML content. As
HTTPContent(which inherits from
Pagestill contains all the methods it previously did, and this change should not require any changes to end-user code.
XMLRPCServletsare now allowed to return None as part of their marshaled response. This improves usability in an all-Python environment at the possible cost of compatibility problems with non-Python clients. To revert to the old behavior, where an attempt to respond with
Nonecaused an exception, add
allow_none = Falseto your
XMLRPCServlet-derived servlets at class level (adding
self.allow_none = Falsein the
__init__should also work).
RPCServletso that there's a way for a method to get the transaction object if needed.
Previously, attempting to start an already-running AppServer would fail when it couldn't grab the socket to listen on, but it would have already overwritten the pid file.
Now pid file handling is much improved:
PidFilesetting in AppServer.config. By default, the pid is written to appserverpid.txt in the working directory (or WebKit path if you're not using a working directory).
Nonein AppServer.config. This seems to be a good idea on Windows because Windows often reuses the same pid right away, so if the appserver crashes, and it tries to restart and it happens to reuse the same pid, the restart will fail.
The shutdown handling has been improved. Sending SIGHUP now results in exiting with exit code 3 which is used for reloading via the AppServer script.
Portsetting in AppServer.config has been deprecated in favor of the new
Portsetting in your config file will still be honored, but you are encouraged to update your AppServer.config as the
Portsetting will be removed in the future.
OldStyleActionsand re-implemented support of the
methodNameForAction()transformation. Note that "old style" actions took an additional
transactionparameter, but otherwise the action handling is now downward compatible.
WebKit.HTTPContent, removed both the internal method
_actionSet()and the internal dictionary
_actionDictwhich cached the list of actions for the servlet. This was redundant code, and its removal allows a servlet to use dynamic actions (i.e. to make the action list dependent on the permissions of the logged-in user).
The semantics for the awake-respond-sleep cycle have changed so that Servlet.sleep() is always called, even when an unhandled exception occurs in Servlet.awake() or Servlet.respond(). Servlet.sleep() is called even when Page.endResponse() or Page.sendRedirectAndEnd() have been called to end servlet processing prematurely. This behavior differs from previous versions, in which sleep() was called only if awake() succeeded.
The intent of this change is to guarantee servlets the chance to free resources, without having to be prepared to catch all possible exceptions within awake() to do so.
The programmer should ensure that sleep does not attempt to free resources which were never allocated, as sleep() may be called even when awake() did not succeed.
def awake(...): initialize resource A initialize resource B def sleep(...): if resource B was initialized: finalize resource B if resource A was initialized: finalize resource A