Package pyxmpp :: Module stanzaprocessor :: Class StanzaProcessor

[hide private]

# Class StanzaProcessor

source code

Known Subclasses:
  - streambase.StreamBase

Universal stanza handler/router class.

Provides facilities to set up custom handlers for various types of stanzas.

Instance Methods | [hide private]

__add_handler(self, handler_list, typ, namespace, priority, handler) Add a handler function to a prioritized handler list. | source code

__init__(self) Initialize a StanzaProcessor object. | source code

__try_handlers(self, handler_list, typ, stanza) Search the handler list for handlers matching given stanza type and payload namespace. | source code

_set_response_handlers(self, iq, res_handler, err_handler, timeout_handler=None, timeout=300) Same as `Stream.set_response_handlers` but assume self.lock is acquired. | source code

check_to(self, to) Check "to" attribute of received stream header. | source code

fix_in_stanza(self, stanza) Modify incoming stanza before processing it. | source code

fix_out_stanza(self, stanza) Modify outgoing stanza before sending into the stream. | source code

process_iq(self, stanza) Process IQ stanza received. | source code

process_message(self, stanza) Process message stanza. | source code

process_presence(self, stanza) Process presence stanza. | source code

`bool`

process_response(self, response) Examines out the response returned by a stanza handler and sends all stanzas provided. | source code

process_stanza(self, stanza) Process stanza received from the stream. | source code

route_stanza(self, stanza) Process stanza not addressed to us. | source code

send(self, stanza) Send a stanza somwhere. | source code

set_iq_get_handler(self, element, namespace, handler) Set <iq type="get"/> handler. | source code

set_iq_set_handler(self, element, namespace, handler) Set <iq type="set"/> handler. | source code

set_message_handler(self, typ, handler, namespace=None, priority=100) Set a handler for <message/> stanzas. | source code

set_presence_handler(self, typ, handler, namespace=None, priority=100) Set a handler for <presence/> stanzas. | source code

set_response_handlers(self, iq, res_handler, err_handler, timeout_handler=None, timeout=300) Set response handler for an IQ "get" or "set" stanza. | source code

unset_iq_get_handler(self, element, namespace) Remove <iq type="get"/> handler. | source code

unset_iq_set_handler(self, element, namespace) Remove <iq type="set"/> handler. | source code

Instance Variables | [hide private]

| initiator : `True` if local stream endpoint is the initiating entity.
| lock : lock object used to synchronize access to the StanzaProcessor object.
| me : local JID.
| peer : remote stream endpoint JID.
| process_all_stanzas : when `True` then all stanzas received are considered local.

Method Details | [hide private]

### __add_handler(self, handler_list, typ, namespace, priority, handler)

source code

Add a handler function to a prioritized handler list.

Parameters:
  - `handler_list` - : a handler list.
  - `typ` - : stanza type.
  - `namespace` - : stanza payload namespace.
  - `priority` - : handler priority. Must be >=0 and <=100. Handlers with lower priority list will be tried first.

### __try_handlers(self, handler_list, typ, stanza)

source code

Search the handler list for handlers matching given stanza type and payload namespace. Run the handlers found ordering them by priority until the first one which returns `True`.

Parameters:
  - `handler_list` - : list of available handlers
  - `typ` - : stanza type (value of its "type" attribute)
  - `stanza` - : the stanza to handle
Returns:
  result of the last handler or `False` if no handler was found.

### check_to(self, to)

source code

Check "to" attribute of received stream header.

Should be overriden in derived classes which require other logic for handling that attribute.

Returns:
  `to` if it is equal to self.me, None otherwise.

### fix_in_stanza(self, stanza)

source code

Modify incoming stanza before processing it.

This implementation does nothig. It should be overriden in derived classes if needed.

### fix_out_stanza(self, stanza)

source code

Modify outgoing stanza before sending into the stream.

This implementation does nothig. It should be overriden in derived classes if needed.

### process_iq(self, stanza)

source code

Process IQ stanza received.

If a matching handler is available pass the stanza to it. Otherwise ignore it if it is "error" or "result" stanza or return "feature-not-implemented" error.

Parameters:
  - `stanza` - : the stanza received

### process_message(self, stanza)

source code

Process message stanza.

Pass it to a handler of the stanza's type and payload namespace. If no handler for the actual stanza type succeeds then hadlers for type "normal" are used.

Parameters:
  - `stanza` - : message stanza to be handled

### process_presence(self, stanza)

source code

Process presence stanza.

Pass it to a handler of the stanza's type and payload namespace.

Parameters:
  - `stanza` - : presence stanza to be handled

### process_response(self, response)

source code

Examines out the response returned by a stanza handler and sends all stanzas provided.

Returns: `bool`
  - `True`: if `response` is Stanza, iterable or `True` (meaning the stanza was processed).
  - `False`: when `response` is `False` or `None`

### process_stanza(self, stanza)

source code

Process stanza received from the stream.

First "fix" the stanza with self.fix_in_stanza(), then pass it to self.route_stanza() if it is not directed to self.me and self.process_all_stanzas is not True. Otherwise stanza is passwd to self.process_iq(), self.process_message() or self.process_presence() appropriately.

Parameters:
  - `stanza` - : the stanza received.
Returns:
  `True` when stanza was handled

### route_stanza(self, stanza)

source code

Process stanza not addressed to us.

Return "recipient-unavailable" return if it is not "error" nor "result" stanza.

This method should be overriden in derived classes if they are supposed to handle stanzas not addressed directly to local stream endpoint.

Parameters:
  - `stanza` - : presence stanza to be processed

### send(self, stanza)

source code

Send a stanza somwhere. This one does nothing. Should be overriden in derived classes.

Parameters:
  - `stanza` (: pyxmpp.stanza.Stanza) - : the stanza to send.

### set_iq_get_handler(self, element, namespace, handler)

source code

Set <iq type="get"/> handler.

Only one handler may be defined per one namespaced element. If a handler for the element was already set it will be lost after calling this method.

Parameters:
  - `element` - : payload element name
  - `namespace` - : payload element namespace URI
  - `handler` - : function to be called when a stanza with defined element is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response.

### set_iq_set_handler(self, element, namespace, handler)

source code

Set <iq type="set"/> handler.

Only one handler may be defined per one namespaced element. If a handler for the element was already set it will be lost after calling this method.

Parameters:
  - `element` - : payload element name
  - `namespace` - : payload element namespace URI
  - `handler` - : function to be called when a stanza with defined element is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response.

### set_message_handler(self, typ, handler, namespace=None, priority=100)

source code

Set a handler for <message/> stanzas.

Multiple <message /> handlers with the same type/namespace/priority may be set. Order of calling handlers with the same priority is not defined. Handlers will be called in priority order until one of them returns True or any stanza(s) to send (even empty list will do).

Parameters:
  - `typ` - : message type. `None` will be treated the same as "normal", and will be the default for unknown types (those that have no handler associated).
  - `namespace` - : payload namespace. If `None` that message with any payload (or even with no payload) will match.
  - `priority` - : priority value for the handler. Handlers with lower priority value are tried first.
  - `handler` - : function to be called when a message stanza with defined type and payload namespace is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response.

### set_presence_handler(self, typ, handler, namespace=None, priority=100)

source code

Set a handler for <presence/> stanzas.

Multiple <presence /> handlers with the same type/namespace/priority may be set. Order of calling handlers with the same priority is not defined. Handlers will be called in priority order until one of them returns True or any stanza(s) to send (even empty list will do).

Parameters:
  - `typ` - : presence type. "available" will be treated the same as `None`.
  - `namespace` - : payload namespace. If `None` that presence with any payload (or even with no payload) will match.
  - `priority` - : priority value for the handler. Handlers with lower priority value are tried first.
  - `handler` - : function to be called when a presence stanza with defined type and payload namespace is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response.

### set_response_handlers(self, iq, res_handler, err_handler, timeout_handler=None, timeout=300)

source code

Set response handler for an IQ "get" or "set" stanza.

This should be called before the stanza is sent.

Parameters:
  - `iq` - : an IQ stanza
  - `res_handler` - : result handler for the stanza. Will be called when matching <iq type="result"/> is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response.
  - `err_handler` - : error handler for the stanza. Will be called when matching <iq type="error"/> is received. Its only argument will be the stanza received. The handler may return a stanza or list of stanzas which should be sent in response but this feature should rather not be used (it is better not to respond to 'error' stanzas).
  - `timeout_handler` - : timeout handler for the stanza. Will be called when no matching <iq type="result"/> or <iq type="error"/> is received in next `timeout` seconds. The handler should accept two arguments and ignore them.
  - `timeout` - : timeout value for the stanza. After that time if no matching <iq type="result"/> nor <iq type="error"/> stanza is received, then timeout_handler (if given) will be called.

### unset_iq_get_handler(self, element, namespace)

source code

Remove <iq type="get"/> handler.

Parameters:
  - `element` - : payload element name
  - `namespace` - : payload element namespace URI

### unset_iq_set_handler(self, element, namespace)

source code

Remove <iq type="set"/> handler.

Parameters:
  - `element` - : payload element name.
  - `namespace` - : payload element namespace URI.