The big question for a developer who is new to Pythomnic is this: where to start ?
As Pythomnic is all about processing client's requests, this is the same as asking - when a request arrives through one of the enabled interfaces, which application module is invoked to perform the actual processing ?
The answer requires reiterating the interface structure. Each interface has two halves - external and internal, each in its separate Python module. The external half is static and will handle the protocol details which do not change. The internal half is also called a receiver, it is a regular reloadable module, and it starts the request processing. For example, XML-RPC interface consists of two modules - xmlrpc_interface.py and xmlrpc_interface_receiver.py, both residing in _static subdirectory.
It is therefore the interface.py module which contains all the protocol-specific processing and interface_receiver.py module which performs the actual application-specific processing.
Then, some protocols, specifically SOAP and XML-RPC are predesigned for RPC and their requests contain a name of the target module and/or method. The receivers for those protocols parse this information and directly invoke the required methods, they do not need not to be modified themselves. For example, if a SOAP request arrives with URL http://soap.server:8000/Module and operation Method, the receiver directly invokes the method with the set of named kwargs:
result = pmnc.Module.Method(**kwargs)
Similarly for XML-RPC, a request with URL http://xmlrpc.server:8000/Module and method name Method, or URL http://xmlrpc.server:8000/ and method Module.Method invokes the method with the set of positioned args:
result = pmnc.Module.Method(*args)
The other protocols don't have any call information embedded in the request, therefore each request is passed to a single specific fixed method of the receiver module, which then needs to be modified.
For example, each JMS message received from a JMS interface will be passed to incoming_message method in jms_interface_receiver. By default, this method does nothing, it just logs the message. To implement processing of JMS messages, you should copy the jms_interface_receiver.py module from _static subdirectory where it resides by default to the modules subdirectory, logically making it an application module.
Any module from modules subdirectory takes precedence over the identically-named module from _static (since "modules" > "_static"), hence the next time the receiver module is accessed, it is its copy from modules, not from _static.
That's all, now you can start up the cage and begin implementing your own message processing by editing the incoming_message method in modules/jms_receiver_interface.py.
Similarly, by copying and editing a receiver you should begin the Pythomnic development.