source: wokkel/formats.py @ 96:8e6130587088

Last change on this file since 96:8e6130587088 was 96:8e6130587088, checked in by Ralph Meijer <ralphm@…>, 9 years ago

Remove copyright dates from individual source files, only update LICENSE.

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