1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
# -*- test-case-name: tx_xmpp.test.test.test_formats -*-
#
# Copyright (c) Ralph Meijer.
# See LICENSE for details.
"""
Generic payload formats.
"""
from __future__ import division, absolute_import
NS_MOOD = "http://jabber.org/protocol/mood"
NS_TUNE = "http://jabber.org/protocol/tune"
class Mood:
"""
User mood.
This represents a user's mood, as defined in
U{XEP-0107<http://xmpp.org/extensions/xep-0107.html>}.
@ivar value: The mood value.
@ivar text: The optional natural-language description of, or reason
for the mood.
"""
def __init__(self, value, text=None):
self.value = value
self.text = text
def fromXml(self, element):
"""
Get a Mood instance from an XML representation.
This class method parses the given XML document into a L{Mood}
instances.
@param element: The XML mood document.
@type element: object providing
L{IElement<twisted.words.xish.domish.IElement>}
@return: A L{Mood} instance or C{None} if C{element} was not a mood
document or if there was no mood value element.
"""
if element.uri != NS_MOOD or element.name != "mood":
return None
value = None
text = None
for child in element.elements():
if child.uri != NS_MOOD:
continue
if child.name == "text":
text = str(child)
else:
value = child.name
if value:
return Mood(value, text)
else:
return None
fromXml = classmethod(fromXml)
class Tune:
"""
User tune.
This represents a user's mood, as defined in
U{XEP-0118<http://xmpp.org/extensions/xep-0118.html>}.
@ivar artist: The artist or performer of the song or piece.
@type artist: L{str}
@ivar length: The duration of the song or piece in seconds.
@type length: L{int}
@ivar source: The collection (e.g. album) or other source.
@type source: L{str}
@ivar title: The title of the song or piece
@type title: L{str}
@ivar track: A unique identifier for the tune; e.g. the track number within
the collection or the specific URI for the object.
@type track: L{str}
@ivar uri: A URI pointing to information about the song, collection, or
artist.
@type uri: L{str}
"""
artist = None
length = None
source = None
title = None
track = None
uri = None
def fromXml(self, element):
"""
Get a Tune instance from an XML representation.
This class method parses the given XML document into a L{Tune}
instances.
@param element: The XML tune document.
@type element: object providing
L{IElement<twisted.words.xish.domish.IElement>}
@return: A L{Tune} instance or C{None} if C{element} was not a tune
document.
"""
if element.uri != NS_TUNE or element.name != "tune":
return None
tune = Tune()
for child in element.elements():
if child.uri != NS_TUNE:
continue
if child.name in ("artist", "source", "title", "track", "uri"):
setattr(tune, child.name, str(child))
elif child.name == "length":
try:
tune.length = int(str(child))
except ValueError:
pass
return tune
fromXml = classmethod(fromXml)
|