annotate sat/test/helpers_plugins.py @ 3252:54934ee3f69c

tools (image): added a guess_type method to guess media type: media type is guessed first from filename, then if it's not enough, the file is opened to try to guess type. If it still can be determined, None is returned.
author Goffi <goffi@goffi.org>
date Tue, 14 Apr 2020 20:29:37 +0200
parents 559a625a236b
children be6d91572633
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
3
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT: a jabber client
3136
9d0df638c8b4 dates update
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1412
diff changeset
6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
7
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # This program is free software: you can redistribute it and/or modify
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
11 # (at your option) any later version.
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
12
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # This program is distributed in the hope that it will be useful,
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
16 # GNU Affero General Public License for more details.
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
17
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
20
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
21 """ Helpers class for plugin dependencies """
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
22
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
23 from twisted.internet import defer
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
24
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
25 from wokkel.muc import Room, User
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
26 from wokkel.generic import parseXml
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
27 from wokkel.disco import DiscoItem, DiscoItems
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
28
1270
037ec0795a85 test: fixes import for wokkel.rsm
souliane <souliane@mailoo.org>
parents: 1269
diff changeset
29 # temporary until the changes are integrated to Wokkel
2413
70399d1acb47 tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
30 from sat_tmp.wokkel.rsm import RSMResponse
1270
037ec0795a85 test: fixes import for wokkel.rsm
souliane <souliane@mailoo.org>
parents: 1269
diff changeset
31
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
32 from .constants import Const as C
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
33 from sat.plugins import plugin_xep_0045
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
34 from collections import OrderedDict
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
35
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
36
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
37 class FakeMUCClient(object):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
38 def __init__(self, plugin_parent):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
39 self.plugin_parent = plugin_parent
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
40 self.host = plugin_parent.host
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
41 self.joined_rooms = {}
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
42
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
43 def join(self, room_jid, nick, options=None, profile_key=C.PROF_KEY_NONE):
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
44 """
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
45 @param room_jid: the room JID
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
46 @param nick: nick to be used in the room
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
47 @param options: joining options
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
48 @param profile_key: the profile key of the user joining the room
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
49 @return: the deferred joined wokkel.muc.Room instance
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
50 """
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
51 profile = self.host.memory.getProfileName(profile_key)
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
52 roster = {}
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
53
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
54 # ask the other profiles to fill our roster
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
55 for i in range(0, len(C.PROFILE)):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
56 other_profile = C.PROFILE[i]
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
57 if other_profile == profile:
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
58 continue
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
59 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
60 other_room = self.plugin_parent.clients[other_profile].joined_rooms[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
61 room_jid
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
62 ]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
63 roster.setdefault(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
64 other_room.nick, User(other_room.nick, C.PROFILE_DICT[other_profile])
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
65 )
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
66 for other_nick in other_room.roster:
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
67 roster.setdefault(other_nick, other_room.roster[other_nick])
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
68 except (AttributeError, KeyError):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
69 pass
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
70
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
71 # rename our nick if it already exists
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
72 while nick in list(roster.keys()):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
73 if C.PROFILE_DICT[profile].userhost() == roster[nick].entity.userhost():
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
74 break # same user with different resource --> same nickname
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
75 nick = nick + "_"
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
76
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
77 room = Room(room_jid, nick)
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
78 room.roster = roster
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
79 self.joined_rooms[room_jid] = room
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
80
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
81 # fill the other rosters with the new entry
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
82 for i in range(0, len(C.PROFILE)):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
83 other_profile = C.PROFILE[i]
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
84 if other_profile == profile:
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
85 continue
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
86 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
87 other_room = self.plugin_parent.clients[other_profile].joined_rooms[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
88 room_jid
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
89 ]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
90 other_room.roster.setdefault(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
91 room.nick, User(room.nick, C.PROFILE_DICT[profile])
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
92 )
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
93 except (AttributeError, KeyError):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
94 pass
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
95
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
96 return defer.succeed(room)
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
97
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
98 def leave(self, roomJID, profile_key=C.PROF_KEY_NONE):
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
99 """
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
100 @param roomJID: the room JID
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
101 @param profile_key: the profile key of the user joining the room
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
102 @return: a dummy deferred
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
103 """
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
104 profile = self.host.memory.getProfileName(profile_key)
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
105 room = self.joined_rooms[roomJID]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
106 # remove ourself from the other rosters
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
107 for i in range(0, len(C.PROFILE)):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
108 other_profile = C.PROFILE[i]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
109 if other_profile == profile:
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
110 continue
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
111 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
112 other_room = self.plugin_parent.clients[other_profile].joined_rooms[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
113 roomJID
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
114 ]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
115 del other_room.roster[room.nick]
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
116 except (AttributeError, KeyError):
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
117 pass
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
118 del self.joined_rooms[roomJID]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
119 return defer.Deferred()
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
120
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
121
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
122 class FakeXEP_0045(plugin_xep_0045.XEP_0045):
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
123 def __init__(self, host):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
124 self.host = host
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
125 self.clients = {}
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
126 for profile in C.PROFILE:
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
127 self.clients[profile] = FakeMUCClient(self)
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
128
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
129 def join(self, room_jid, nick, options={}, profile_key="@DEFAULT@"):
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
130 """
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
131 @param roomJID: the room JID
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
132 @param nick: nick to be used in the room
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
133 @param options: ignore
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
134 @param profile_key: the profile of the user joining the room
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
135 @return: the deferred joined wokkel.muc.Room instance or None
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
136 """
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
137 profile = self.host.memory.getProfileName(profile_key)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
138 if room_jid in self.clients[profile].joined_rooms:
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
139 return defer.succeed(None)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
140 room = self.clients[profile].join(room_jid, nick, profile_key=profile)
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
141 return room
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
142
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
143 def joinRoom(self, muc_index, user_index):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
144 """Called by tests
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
145 @return: the nickname of the user who joined room"""
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
146 muc_jid = C.MUC[muc_index]
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
147 nick = C.JID[user_index].user
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
148 profile = C.PROFILE[user_index]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
149 self.join(muc_jid, nick, profile_key=profile)
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
150 return self.getNick(muc_index, user_index)
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
151
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
152 def leave(self, room_jid, profile_key="@DEFAULT@"):
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
153 """
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
154 @param roomJID: the room JID
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
155 @param profile_key: the profile of the user leaving the room
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
156 @return: a dummy deferred
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
157 """
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
158 profile = self.host.memory.getProfileName(profile_key)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
159 if room_jid not in self.clients[profile].joined_rooms:
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
160 raise plugin_xep_0045.UnknownRoom("This room has not been joined")
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
161 return self.clients[profile].leave(room_jid, profile)
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
162
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
163 def leaveRoom(self, muc_index, user_index):
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
164 """Called by tests
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
165 @return: the nickname of the user who left the room"""
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
166 muc_jid = C.MUC[muc_index]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
167 nick = self.getNick(muc_index, user_index)
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
168 profile = C.PROFILE[user_index]
829
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
169 self.leave(muc_jid, profile_key=profile)
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
170 return nick
187d2443c82d test: improvements for the helpers classes:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
171
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
172 def getRoom(self, muc_index, user_index):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
173 """Called by tests
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
174 @return: a wokkel.muc.Room instance"""
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
175 profile = C.PROFILE[user_index]
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
176 muc_jid = C.MUC[muc_index]
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
177 try:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
178 return self.clients[profile].joined_rooms[muc_jid]
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
179 except (AttributeError, KeyError):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
180 return None
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
181
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
182 def getNick(self, muc_index, user_index):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
183 try:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
184 return self.getRoomNick(C.MUC[muc_index], C.PROFILE[user_index])
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
185 except (KeyError, AttributeError):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
186 return ""
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
187
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
188 def getNickOfUser(self, muc_index, user_index, profile_index, secure=True):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
189 try:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
190 room = self.clients[C.PROFILE[profile_index]].joined_rooms[C.MUC[muc_index]]
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
191 return self.getRoomNickOfUser(room, C.JID[user_index])
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
192 except (KeyError, AttributeError):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
193 return None
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
194
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
195
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
196 class FakeXEP_0249(object):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
197 def __init__(self, host):
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
198 self.host = host
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
199
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
200 def invite(self, target, room, options={}, profile_key="@DEFAULT@"):
794
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
201 """
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
202 Invite a user to a room. To accept the invitation from a test,
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
203 just call FakeXEP_0045.joinRoom (no need to have a dedicated method).
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
204 @param target: jid of the user to invite
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
205 @param room: jid of the room where the user is invited
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
206 @options: attribute with extra info (reason, password) as in #XEP-0249
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
207 @profile_key: %(doc_profile_key)s
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
208 """
52c4b755aba6 test: make FakeClient profile dependent and add some tools to test MUC
souliane <souliane@mailoo.org>
parents:
diff changeset
209 pass
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
210
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
211
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
212 class FakeSatPubSubClient(object):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
213 def __init__(self, host, parent_plugin):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
214 self.host = host
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
215 self.parent_plugin = parent_plugin
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
216 self.__items = OrderedDict()
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
217 self.__rsm_responses = {}
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
218
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
219 def createNode(self, service, nodeIdentifier=None, options=None, sender=None):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
220 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
221
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
222 def deleteNode(self, service, nodeIdentifier, sender=None):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
223 try:
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
224 del self.__items[nodeIdentifier]
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
225 except KeyError:
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
226 pass
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
227 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
228
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
229 def subscribe(self, service, nodeIdentifier, subscriber, options=None, sender=None):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
230 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
231
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
232 def unsubscribe(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
233 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
234 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
235 nodeIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
236 subscriber,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
237 subscriptionIdentifier=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
238 sender=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
239 ):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
240 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
241
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
242 def publish(self, service, nodeIdentifier, items=None, sender=None):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
243 node = self.__items.setdefault(nodeIdentifier, [])
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
244
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
245 def replace(item_obj):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
246 index = 0
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
247 for current in node:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
248 if current["id"] == item_obj["id"]:
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
249 node[index] = item_obj
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
250 return True
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
251 index += 1
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
252 return False
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
253
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
254 for item in items:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
255 item_obj = parseXml(item) if isinstance(item, str) else item
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
256 if not replace(item_obj):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
257 node.append(item_obj)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
258 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
259
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
260 def items(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
261 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
262 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
263 nodeIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
264 maxItems=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
265 itemIdentifiers=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
266 subscriptionIdentifier=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
267 sender=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
268 ext_data=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
269 ):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
270 try:
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
271 items = self.__items[nodeIdentifier]
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
272 except KeyError:
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
273 items = []
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
274 if ext_data:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
275 assert "id" in ext_data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
276 if "rsm" in ext_data:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
277 args = (0, items[0]["id"], items[-1]["id"]) if items else ()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
278 self.__rsm_responses[ext_data["id"]] = RSMResponse(len(items), *args)
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
279 return defer.succeed(items)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
280
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
281 def retractItems(self, service, nodeIdentifier, itemIdentifiers, sender=None):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
282 node = self.__items[nodeIdentifier]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
283 for item in [item for item in node if item["id"] in itemIdentifiers]:
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
284 node.remove(item)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
285 return defer.succeed(None)
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
286
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
287 def getRSMResponse(self, id):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
288 if id not in self.__rsm_responses:
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
289 return {}
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
290 result = self.__rsm_responses[id].toDict()
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
291 del self.__rsm_responses[id]
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
292 return result
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
293
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
294 def subscriptions(self, service, nodeIdentifier, sender=None):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
295 return defer.succeed([])
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
296
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
297 def service_getDiscoItems(self, service, nodeIdentifier, profile_key=C.PROF_KEY_NONE):
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
298 items = DiscoItems()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
299 for item in list(self.__items.keys()):
1269
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
300 items.append(DiscoItem(service, item))
91e5becc6623 test: add tests for plugin_misc_groupblog
souliane <souliane@mailoo.org>
parents: 829
diff changeset
301 return defer.succeed(items)