Thanks for the clarification Jiří; I'm sorry that I misunderstood what you were asking. And thanks for the responding Nathan. That was more enlightening that what I was going to say. I'll just add that there is a request object that can get passed from one controller to another. It has an attributed called 'session' which is a dictionary that you can add things to. However, anything that is passed in the session dictionary must be json serializable, so it can only handle basic Python objects (i.e. strings, numbers, or lists and dictionaries can only contain strings or numbers, etc.). Using persistent stores gives you more options.
Re Question: I've entered an issue to normalize that. We can discuss details on a scrum call at some point.
Re Feature: I can't think of a really compelling use case for passing Python parameters, but there may be some value from accessing the normal handoff handlers through Python rather than through the REST api. Here are some thoughts:
There could be a method on the app_base class that returns a HandoffManager object (similar to the JobManager). The HandoffManager would have a method that would list the handoff_capabilities similar to the way the REST endpoint does. It could also wrap all of the handoff handlers so that they could be called through the HandoffManager.
So far this doesn't provide any extra capabilities beyond the REST interface that is already implemented. However, in an an app it may be more convenient to call handoff functions this way rather than constructing a url that conforms to the REST api.
If we did end up finding a good use case for passing Python objects between apps then this implementation would easily allow for a second type of HandoffHandler to be listed in the HandoffManager: an internal or app_to_app HandoffHandler. This would allow registering handlers that can accept Python parameters. The InternalHandoffHandler could be a subclass of HandoffHandler, or we could just add an attribute (internal=True) to the existing class.