summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0050/stanza.py
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-07-17 14:19:04 +0200
committerFlorent Le Coz <louiz@louiz.org>2014-07-17 14:19:04 +0200
commit5ab77c745270d7d5c016c1dc7ef2a82533a4b16e (patch)
tree259377cc666f8b9c7954fc4e7b8f7a912bcfe101 /sleekxmpp/plugins/xep_0050/stanza.py
parente5582694c07236e6830c20361840360a1dde37f3 (diff)
downloadslixmpp-5ab77c745270d7d5c016c1dc7ef2a82533a4b16e.tar.gz
slixmpp-5ab77c745270d7d5c016c1dc7ef2a82533a4b16e.tar.bz2
slixmpp-5ab77c745270d7d5c016c1dc7ef2a82533a4b16e.tar.xz
slixmpp-5ab77c745270d7d5c016c1dc7ef2a82533a4b16e.zip
Rename to slixmpp
Diffstat (limited to 'sleekxmpp/plugins/xep_0050/stanza.py')
-rw-r--r--sleekxmpp/plugins/xep_0050/stanza.py185
1 files changed, 0 insertions, 185 deletions
diff --git a/sleekxmpp/plugins/xep_0050/stanza.py b/sleekxmpp/plugins/xep_0050/stanza.py
deleted file mode 100644
index 2367c77b..00000000
--- a/sleekxmpp/plugins/xep_0050/stanza.py
+++ /dev/null
@@ -1,185 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2011 Nathanael C. Fritz, Lance J.T. Stout
- This file is part of SleekXMPP.
-
- See the file LICENSE for copying permission.
-"""
-
-from sleekxmpp.xmlstream import ElementBase, ET
-
-
-class Command(ElementBase):
-
- """
- XMPP's Adhoc Commands provides a generic workflow mechanism for
- interacting with applications. The result is similar to menu selections
- and multi-step dialogs in normal desktop applications. Clients do not
- need to know in advance what commands are provided by any particular
- application or agent. While adhoc commands provide similar functionality
- to Jabber-RPC, adhoc commands are used primarily for human interaction.
-
- Also see <http://xmpp.org/extensions/xep-0050.html>
-
- Example command stanzas:
- <iq type="set">
- <command xmlns="http://jabber.org/protocol/commands"
- node="run_foo"
- action="execute" />
- </iq>
-
- <iq type="result">
- <command xmlns="http://jabber.org/protocol/commands"
- node="run_foo"
- sessionid="12345"
- status="executing">
- <actions>
- <complete />
- </actions>
- <note type="info">Information!</note>
- <x xmlns="jabber:x:data">
- <field var="greeting"
- type="text-single"
- label="Greeting" />
- </x>
- </command>
- </iq>
-
- Stanza Interface:
- action -- The action to perform.
- actions -- The set of allowable next actions.
- node -- The node associated with the command.
- notes -- A list of tuples for informative notes.
- sessionid -- A unique identifier for a command session.
- status -- May be one of: canceled, completed, or executing.
-
- Attributes:
- actions -- A set of allowed action values.
- statuses -- A set of allowed status values.
- next_actions -- A set of allowed next action names.
-
- Methods:
- get_action -- Return the requested action.
- get_actions -- Return the allowable next actions.
- set_actions -- Set the allowable next actions.
- del_actions -- Remove the current set of next actions.
- get_notes -- Return a list of informative note data.
- set_notes -- Set informative notes.
- del_notes -- Remove any note data.
- add_note -- Add a single note.
- """
-
- name = 'command'
- namespace = 'http://jabber.org/protocol/commands'
- plugin_attrib = 'command'
- interfaces = set(('action', 'sessionid', 'node',
- 'status', 'actions', 'notes'))
- actions = set(('cancel', 'complete', 'execute', 'next', 'prev'))
- statuses = set(('canceled', 'completed', 'executing'))
- next_actions = set(('prev', 'next', 'complete'))
-
- def get_action(self):
- """
- Return the value of the action attribute.
-
- If the Iq stanza's type is "set" then use a default
- value of "execute".
- """
- if self.parent()['type'] == 'set':
- return self._get_attr('action', default='execute')
- return self._get_attr('action')
-
- def set_actions(self, values):
- """
- Assign the set of allowable next actions.
-
- Arguments:
- values -- A list containing any combination of:
- 'prev', 'next', and 'complete'
- """
- self.del_actions()
- if values:
- self._set_sub_text('{%s}actions' % self.namespace, '', True)
- actions = self.find('{%s}actions' % self.namespace)
- for val in values:
- if val in self.next_actions:
- action = ET.Element('{%s}%s' % (self.namespace, val))
- actions.append(action)
-
- def get_actions(self):
- """
- Return the set of allowable next actions.
- """
- actions = set()
- actions_xml = self.find('{%s}actions' % self.namespace)
- if actions_xml is not None:
- for action in self.next_actions:
- action_xml = actions_xml.find('{%s}%s' % (self.namespace,
- action))
- if action_xml is not None:
- actions.add(action)
- return actions
-
- def del_actions(self):
- """
- Remove all allowable next actions.
- """
- self._del_sub('{%s}actions' % self.namespace)
-
- def get_notes(self):
- """
- Return a list of note information.
-
- Example:
- [('info', 'Some informative data'),
- ('warning', 'Use caution'),
- ('error', 'The command ran, but had errors')]
- """
- notes = []
- notes_xml = self.findall('{%s}note' % self.namespace)
- for note in notes_xml:
- notes.append((note.attrib.get('type', 'info'),
- note.text))
- return notes
-
- def set_notes(self, notes):
- """
- Add multiple notes to the command result.
-
- Each note is a tuple, with the first item being one of:
- 'info', 'warning', or 'error', and the second item being
- any human readable message.
-
- Example:
- [('info', 'Some informative data'),
- ('warning', 'Use caution'),
- ('error', 'The command ran, but had errors')]
-
-
- Arguments:
- notes -- A list of tuples of note information.
- """
- self.del_notes()
- for note in notes:
- self.add_note(note[1], note[0])
-
- def del_notes(self):
- """
- Remove all notes associated with the command result.
- """
- notes_xml = self.findall('{%s}note' % self.namespace)
- for note in notes_xml:
- self.xml.remove(note)
-
- def add_note(self, msg='', ntype='info'):
- """
- Add a single note annotation to the command.
-
- Arguments:
- msg -- A human readable message.
- ntype -- One of: 'info', 'warning', 'error'
- """
- xml = ET.Element('{%s}note' % self.namespace)
- xml.attrib['type'] = ntype
- xml.text = msg
- self.xml.append(xml)