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

`JSON-RPC servlet base class
Written by Jean-Francois Pieronne`

Modules

``

traceback |  |  |

Classes

``

WebKit.HTTPContent.HTTPContent(WebKit.HTTPServlet.HTTPServlet)
  JSONRPCServlet

class JSONRPCServlet(WebKit.HTTPContent.HTTPContent)

``

`A superclass for Webware servlets using JSON-RPC techniques.
JSONRPCServlet can be used to make coding JSON-RPC applications easier.
Subclasses should override the method json_methods() which returns a list
of method names. These method names refer to Webware Servlet methods that
are able to be called by an JSON-RPC-enabled web page. This is very similar
in functionality to Webware's actions.
Some basic security measures against JavaScript hijacking are taken by
default which can be deactivated if you're not dealing with sensitive data.
You can further increase security by adding shared secret mechanisms.
`

Method resolution order:
  JSONRPCServlet
  WebKit.HTTPContent.HTTPContent
  WebKit.HTTPServlet.HTTPServlet
  WebKit.Servlet.Servlet
  __builtin__.object

Methods defined here:

__init__(self)

actions(self)

defaultAction(self)

jsonCall(self)
  `Execute method with arguments on the server side.
  Returns Javascript function to be executed by the client immediately.`

respondToGet(self, transaction)

writeError(self, msg)

writeResult(self, data)

Static methods defined here:

exposedMethods()
  `Return a list or a set of all exposed RPC methods.`

Methods inherited from WebKit.HTTPContent.HTTPContent:

application(self)
  `The `Application` instance we're using.`

awake(self, transaction)
  `Let servlet awake.
  Makes instance variables from the transaction. This is
  where Page becomes unthreadsafe, as the page is tied to
  the transaction. This is also what allows us to
  implement functions like `write`, where you don't
  need to pass in the transaction or response.`

canBeThreaded(self)
  `Declares whether servlet can be threaded.
  Returns False because of the instance variables we set up in `awake`.`

endResponse(self)
  `End response.
  When this method is called during `awake` or `respond`,
  servlet processing will end immediately,
  and the accumulated response will be sent.
  Note that `sleep` will still be called, providing a
  chance to clean up or free any resources.`

forward(self, url)
  `Forward request.
  Forwards this request to another servlet.
  See `Application.forward` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.`

handleAction(self, action)
  `Handle action.
  Invoked by `_respond` when a legitimate action has
  been found in a form. Invokes `preAction`, the actual
  action method and `postAction`.
  Subclasses rarely override this method.`

includeURL(self, url)
  `Include output from other servlet.
  Includes the response of another servlet
  in the current servlet's response.
  See `Application.includeURL` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.`

methodNameForAction(self, name)
  `Return method name for an action name.
  Invoked by _respond() to determine the method name for a given action
  name which has been derived as the value of an ``_action_`` field.
  Since this is usually the label of an HTML submit button in a form,
  it is often needed to transform it in order to get a valid method name
  (for instance, blanks could be replaced by underscores and the like).
  This default implementation of the name transformation is the identity,
  it simply returns the name. Subclasses should override this method
  when action names don't match their method names; they could "mangle"
  the action names or look the method names up in a dictionary.`

postAction(self, actionName)
  `Things to do after action.
  Invoked by self after invoking a action method.
  Subclasses may override to customize and may or may not
  invoke super as they see fit.
  The `actionName` is passed to this method,
  although it seems a generally bad idea to rely on this.
  However, it's still provided just in case you need that hook.
  By default this does nothing.`

preAction(self, actionName)
  `Things to do before action.
  Invoked by self prior to invoking a action method.
  The `actionName` is passed to this method,
  although it seems a generally bad idea to rely on this.
  However, it's still provided just in case you need that hook.
  By default this does nothing.`

request(self)
  `The request (`HTTPRequest`) we're handling.`

respondToPost(self, transaction)
  `Respond to POST.
  Invoked in response to a POST request method. All methods
  are passed to `_respond`.`

response(self)
  `The response (`HTTPResponse`) we're handling.`

sendRedirectAndEnd(self, url, status=None)
  `Send redirect and end.
  Sends a redirect back to the client and ends the response.
  This is a very popular pattern.`

sendRedirectPermanentAndEnd(self, url)
  `Send permanent redirect and end.`

sendRedirectSeeOtherAndEnd(self, url)
  `Send redirect to a URL to be retrieved with GET and end.
  This is the proper method for the Post/Redirect/Get pattern.`

sendRedirectTemporaryAndEnd(self, url)
  `Send temporary redirect and end.`

session(self)
  `The session object.
  This provides a state for the current user
  (associated with a browser instance, really).
  If no session exists, then a session will be created.`

sessionEncode(self, url=None)
  `Utility function to access `Session.sessionEncode`.
  Takes a url and adds the session ID as a parameter.
  This is for cases where you don't know if the client
  will accepts cookies.`

sleep(self, transaction)
  `Let servlet sleep again.
  We unset some variables. Very boring.`

transaction(self)
  `The `Transaction` we're currently handling.`

write(self, *args)
  `Write to output.
  Writes the arguments, which are turned to strings (with `str`)
  and concatenated before being written to the response.
  Unicode strings must be encoded before they can be written.`

writeExceptionReport(self, handler)
  `Write extra information to the exception report.
  The `handler` argument is the exception handler, and
  information is written there (using `writeTitle`,
  `write`, and `writeln`). This information is added
  to the exception report.
  See `WebKit.ExceptionHandler` for more information.`

writeln(self, *args)
  `Write to output with newline.
  Writes the arguments (like `write`), adding a newline after.
  Unicode strings must be encoded before they can be written.`

Static methods inherited from WebKit.HTTPContent.HTTPContent:

callMethodOfServlet(url, method, *args, **kwargs)
  `Call a method of another servlet.
  See `Application.callMethodOfServlet` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.`

urlDecode(s)
  `Turn special % characters into actual characters.
  This method does the same as the `urllib.unquote_plus()` function.`

urlEncode(s)
  `Quotes special characters using the % substitutions.
  This method does the same as the `urllib.quote_plus()` function.`

Methods inherited from WebKit.HTTPServlet.HTTPServlet:

respond(self, trans)
  `Respond to a request.
  Invokes the appropriate respondToSomething() method depending on the
  type of request (e.g., GET, POST, PUT, ...).`

respondToHead(self, trans)
  `Respond to a HEAD request.
  A correct but inefficient implementation.`

Static methods inherited from WebKit.HTTPServlet.HTTPServlet:

lastModified(trans)
  `Get time of last modification.
  Return this object's Last-Modified time (as a float),
  or None (meaning don't know or not applicable).`

notImplemented(trans)

Methods inherited from WebKit.Servlet.Servlet:

close(self)

log(self, message)
  `Log a message.
  This can be invoked to print messages concerning the servlet.
  This is often used by self to relay important information back
  to developers.`

name(self)
  `Return the name which is simple the name of the class.
  Subclasses should *not* override this method.
  It is used for logging and debugging.`

open(self)

runMethodForTransaction(self, trans, method, *args, **kw)

serverSidePath(self, path=None)
  `Return the filesystem path of the page on the server.`

setFactory(self, factory)

Static methods inherited from WebKit.Servlet.Servlet:

canBeReused()
  `Returns whether a single servlet instance can be reused.
  The default is True, but subclasses con override to return False.
  Keep in mind that performance may seriously be degraded if instances
  can't be reused. Also, there's no known good reasons not to reuse
  an instance. Remember the awake() and sleep() methods are invoked
  for every transaction. But just in case, your servlet can refuse
  to be reused.`

runTransaction(trans)

Data descriptors inherited from WebKit.Servlet.Servlet:

__dict__
  `dictionary for instance variables (if defined)`

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

Functions

``

StringIO(...)
  `StringIO([s]) -- Return a StringIO-like stream for reading or writing`