annotate sat/tools/common/data_objects.py @ 3028:ab2696e34d29

Python 3 port: /!\ this is a huge commit /!\ starting from this commit, SàT is needs Python 3.6+ /!\ SàT maybe be instable or some feature may not work anymore, this will improve with time This patch port backend, bridge and frontends to Python 3. Roughly this has been done this way: - 2to3 tools has been applied (with python 3.7) - all references to python2 have been replaced with python3 (notably shebangs) - fixed files not handled by 2to3 (notably the shell script) - several manual fixes - fixed issues reported by Python 3 that where not handled in Python 2 - replaced "async" with "async_" when needed (it's a reserved word from Python 3.7) - replaced zope's "implements" with @implementer decorator - temporary hack to handle data pickled in database, as str or bytes may be returned, to be checked later - fixed hash comparison for password - removed some code which is not needed anymore with Python 3 - deactivated some code which needs to be checked (notably certificate validation) - tested with jp, fixed reported issues until some basic commands worked - ported Primitivus (after porting dependencies like urwid satext) - more manual fixes
author Goffi <goffi@goffi.org>
date Tue, 13 Aug 2019 19:08:41 +0200
parents 8dbef2d190eb
children 9d0df638c8b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
1 #!/usr/bin/env python3
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # SAT: a jabber client
2771
003b8b4b56a7 date update
Goffi <goffi@goffi.org>
parents: 2770
diff changeset
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org)
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
2300
173d56315529 jp (event/invitee): added list command to get R.S.V.P. :
Goffi <goffi@goffi.org>
parents: 2264
diff changeset
20 """Objects handling bridge data, with jinja2 safe markup handling"""
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
22 from sat.core.constants import Const as C
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from sat.tools.common import data_format
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
24
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 try:
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from jinja2 import Markup as safe
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 except ImportError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
28 safe = str
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
2476
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
30 from sat.tools.common import uri as xmpp_uri
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
31 import urllib.request, urllib.parse, urllib.error
2482
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
32
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
33 q = lambda value: urllib.parse.quote(value.encode("utf-8"), safe="@")
2476
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
34
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
35
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
36 def parsePubSubMetadata(metadata, items):
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
37 """Helper method to have nicer metadata while doing a PubSub request
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
38
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
39 The "rsm_index" and "rsm_count" keys will be converted to int
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
40 The "mam_stable" and "mam_complete" keys will be converted to boolean
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
41 A "complete" key can have the following values:
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
42 - True: we are on the last page, i.e. last items have been received
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
43 - False: we are not on the last page
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
44 - None: we don't have enough data fo know our position in the pagination
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
45 @param metadata(dict): dict retrieved fro bridge with request metadata
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
46 @param items(list): items retrieved (used to determine "complete" value)
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
47 @return (dict): parsed metadata
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
48 """
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
49 data = {}
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
50 assert "complete" not in metadata
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
51
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
52 for key, value in metadata.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
53 if key in ("rsm_index", "rsm_count"):
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
54 value = int(value)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
55 elif key == "mam_stable":
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
56 value = C.bool(value)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
57 elif key == "mam_complete":
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
58 key = "complete"
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
59 value = C.bool(value)
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
60 data[key] = value
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
61 if "complete" not in data:
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
62 index = data.get("rsm_index")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
63 count = data.get("rsm_count")
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
64 if index is None or count is None:
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
65 # we don't have enough information to know if the data is complete or not
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
66 data["complete"] = None
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
67 else:
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
68 # normally we have a strict equality here but XEP-0059 states
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
69 # that index MAY be approximative, so just in case…
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
70 data["complete"] = index + len(items) >= count
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
71 return data
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
72
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
73
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 class BlogItem(object):
2942
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
75 def __init__(self, mb_data, parent, deserialise=True):
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
76 """
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
77 @param deserialise(bool): if True, mb_data is a serialised string which must
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
78 be deserialised
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
79 """
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
80 # FIXME: deserialise should not be done here, but before BlogItem is called
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
81 if deserialise:
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
82 self.mb_data = data_format.deserialise(mb_data)
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
83 else:
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
84 self.mb_data = mb_data
2476
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
85 self.parent = parent
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 self._comments = None
2228
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
87 self._comments_items_list = None
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
88
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 def id(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
91 return self.mb_data.get("id")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
92
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 def atom_id(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
95 return self.mb_data.get("atom_id")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
96
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 @property
2476
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
98 def uri(self):
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
99 node = self.parent.node
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
100 service = self.parent.service
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
101 return xmpp_uri.buildXMPPUri(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
102 "pubsub", subtype="microblog", path=service, node=node, item=self.id
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
103 )
2476
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
104
6607bb29ab7b tools (common/data_objects): BlogItem has now a uri property to generate its own XMPP URI
Goffi <goffi@goffi.org>
parents: 2469
diff changeset
105 @property
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 def published(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
107 return self.mb_data.get("published")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
108
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 def updated(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
111 return self.mb_data.get("updated")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
112
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 @property
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2257
diff changeset
114 def language(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
115 return self.mb_data.get("language")
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2257
diff changeset
116
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2257
diff changeset
117 @property
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 def author(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
119 return self.mb_data.get("author")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
120
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 def author_jid(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
123 return self.mb_data.get("author_jid")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
124
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 def author_jid_verified(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
127 return self.mb_data.get("author_jid_verified")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
128
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 def author_email(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
131 return self.mb_data.get("author_email")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
132
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 def tags(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
135 return self.mb_data.get('tags', [])
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
136
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 def groups(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
139 return self.mb_data.get('groups', [])
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
140
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 def title(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
143 return self.mb_data.get("title")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
144
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
145 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
146 def title_xhtml(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
148 return safe(self.mb_data["title_xhtml"])
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 except KeyError:
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 return None
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
151
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 def content(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
154 return self.mb_data.get("content")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
155
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
156 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 def content_xhtml(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
159 return safe(self.mb_data["content_xhtml"])
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 except KeyError:
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
161 return None
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
162
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
163 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 def comments(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 if self._comments is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
166 self._comments = data_format.dict2iterdict(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
167 "comments", self.mb_data, ("node", "service")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
168 )
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 return self._comments
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
170
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
171 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 def comments_service(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
173 return self.mb_data.get("comments_service")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
174
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
175 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
176 def comments_node(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
177 return self.mb_data.get("comments_node")
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
178
2228
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
179 @property
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
180 def comments_items_list(self):
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
181 return [] if self._comments_items_list is None else self._comments_items_list
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
182
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
183 def appendCommentsItems(self, items):
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
184 """append comments items to self.comments_items"""
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
185 if self._comments_items_list is None:
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
186 self._comments_items_list = []
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
187 self._comments_items_list.append(items)
cf6c539672c7 tools (common/data_objects): comments items can now be chained to their parent
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
188
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
189
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
190 class BlogItems(object):
2942
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
191 def __init__(self, mb_data, deserialise=True):
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
192 """
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
193 @param deserialise(bool): if True, mb_data is a serialised string which must
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
194 be deserialised
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
195 """
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
196 # FIXME: deserialise should not be done here, but before BlogItem is called
8dbef2d190eb tools (common/data_objects): added a "deserialise" argument to BlogItem:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
197 self.items = [BlogItem(i, self, deserialise=deserialise) for i in mb_data[0]]
2770
2d353b74010e tools (common/data_objects): moved BlogItems._parseMetadata to a parsePubSubMetadata function, so it can be used in a more generic way
Goffi <goffi@goffi.org>
parents: 2766
diff changeset
198 self.metadata = parsePubSubMetadata(mb_data[1], self.items)
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
199
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 def service(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
202 return self.metadata["service"]
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
203
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 def node(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
206 return self.metadata["node"]
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
207
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
208 @property
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 def uri(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
210 return self.metadata["uri"]
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
211
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
212 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
213 def with_rsm(self):
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
214 """Return True if RSM is activated on this request"""
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
215 return "rsm_first" in self.metadata
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
216
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
217 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
218 def rsm_first(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
219 return self.metadata["rsm_first"]
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
220
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
221 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
222 def rsm_last(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
223 return self.metadata["rsm_last"]
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
224
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
225 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
226 def rsm_index(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
227 return self.metadata["rsm_index"]
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
228
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
229 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
230 def rsm_count(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
231 return self.metadata["rsm_count"]
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
232
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
233 @property
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
234 def complete(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
235 return self.metadata["complete"]
2766
93a421de0e3d tools (common/data_objects): metadata parsing in BlogItems:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
236
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 def __len__(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 return self.items.__len__()
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
239
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 def __missing__(self, key):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 return self.items.__missing__(key)
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
242
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
243 def __getitem__(self, key):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 return self.items.__getitem__(key)
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
245
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 def __iter__(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 return self.items.__iter__()
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
248
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
249 def __reversed__(self):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 return self.items.__reversed__()
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
251
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 def __contains__(self, item):
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
253 return self.items.__contains__(item)
2257
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
254
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
255
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
256 class Message(object):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
257 def __init__(self, msg_data):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
258 self._uid = msg_data[0]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
259 self._timestamp = msg_data[1]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
260 self._from_jid = msg_data[2]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
261 self._to_jid = msg_data[3]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
262 self._message_data = msg_data[4]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
263 self._subject_data = msg_data[5]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
264 self._type = msg_data[6]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
265 self._extra = msg_data[7]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
266 self._html = dict(data_format.getSubDict("xhtml", self._extra))
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
267
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
268 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
269 def id(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
270 return self._uid
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
271
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
272 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
273 def timestamp(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
274 return self._timestamp
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
275
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
276 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
277 def from_(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
278 return self._from_jid
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
279
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
280 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
281 def text(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
282 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
283 return self._message_data[""]
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
284 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
285 return next(iter(self._message_data.values()))
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
286
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
287 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
288 def subject(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
289 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
290 return self._subject_data[""]
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
291 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
292 return next(iter(self._subject_data.values()))
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
293
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
294 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
295 def type(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
296 return self._type
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
297
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
298 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
299 def thread(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
300 return self._extra.get("thread")
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
301
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
302 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
303 def thread_parent(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
304 return self._extra.get("thread_parent")
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
305
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
306 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
307 def received(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
308 return self._extra.get("received_timestamp", self._timestamp)
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
309
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
310 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
311 def delay_sender(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
312 return self._extra.get("delay_sender")
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
313
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
314 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
315 def info_type(self):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
316 return self._extra.get("info_type")
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
317
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
318 @property
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
319 def html(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
320 if not self._html:
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
321 return None
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
322 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
323 return safe(self._html[""])
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
324 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
325 return safe(next(iter(self._html.values())))
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
326
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
327
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
328 class Messages(object):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
329 def __init__(self, msgs_data):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
330 self.messages = [Message(m) for m in msgs_data]
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
331
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
332 def __len__(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
333 return self.messages.__len__()
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
334
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
335 def __missing__(self, key):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
336 return self.messages.__missing__(key)
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
337
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
338 def __getitem__(self, key):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
339 return self.messages.__getitem__(key)
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
340
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
341 def __iter__(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
342 return self.messages.__iter__()
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
343
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
344 def __reversed__(self):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
345 return self.messages.__reversed__()
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
346
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
347 def __contains__(self, item):
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
348 return self.messages.__contains__(item)
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
349
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
350
2469
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
351 class Room(object):
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
352 def __init__(self, jid, name=None, url=None):
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
353 self.jid = jid
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
354 self.name = name or jid
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
355 if url is not None:
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
356 self.url = url
adcc35625e17 tools (common/data_objects): added Room class
Goffi <goffi@goffi.org>
parents: 2464
diff changeset
357
2464
8788c217a49e tools (common/data_objects): added classes for messages
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
358
2257
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
359 class Identity(object):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
360 def __init__(self, jid_str, data=None):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
361 self.jid_str = jid_str
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
362 self.data = data if data is not None else {}
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
363
2537
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
364 def __getitem__(self, key):
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
365 return self.data[key]
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
366
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
367 def __getattr__(self, key):
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
368 try:
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
369 return self.data[key]
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
370 except KeyError:
8cf58a415126 tools (common/data_objects): fixed Identity
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
371 raise AttributeError(key)
2257
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
372
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
373
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
374 class Identities(object):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
375 def __init__(self):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
376 self.identities = {}
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
377
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
378 def __getitem__(self, jid_str):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
379 try:
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
380 return self.identities[jid_str]
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
381 except KeyError:
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
382 return None
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
383
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
384 def __setitem__(self, jid_str, data):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
385 self.identities[jid_str] = Identity(jid_str, data)
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
386
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
387 def __contains__(self, jid_str):
0ffa8ba0857c core (tools/common/data_objects): added classes to handle Identities
Goffi <goffi@goffi.org>
parents: 2228
diff changeset
388 return jid_str in self.identities
2383
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
389
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
390
2482
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
391 class ObjectQuoter(object):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
392 """object wrapper which quote attribues (to be used in templates)"""
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
393
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
394 def __init__(self, obj):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
395 self.obj = obj
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
396
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
397 def __unicode__(self):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
398 return q(self.obj.__unicode__())
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
399
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
400 def __str__(self):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
401 return self.__unicode__()
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
402
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
403 def __getattr__(self, name):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
404 return q(self.obj.__getattr__(name))
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
405
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
406 def __getitem__(self, key):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
407 return q(self.obj.__getitem__(key))
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
408
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
409
2383
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
410 class OnClick(object):
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
411 """Class to handle clickable elements targets"""
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
412
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
413 def __init__(self, url=None):
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
414 self.url = url
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
415
2482
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
416 def formatUrl(self, *args, **kwargs):
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
417 """format URL using Python formatting
2383
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
418
2482
ac6097a66944 tools (common/data_objects): accept same parameters as format en quote their values in OnClick.formatUrl
Goffi <goffi@goffi.org>
parents: 2478
diff changeset
419 values will be quoted before being used
2383
a37457da2bb7 tools (common/data_objects): new OnClick class
Goffi <goffi@goffi.org>
parents: 2300
diff changeset
420 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
421 return self.url.format(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2942
diff changeset
422 *[q(a) for a in args], **{k: ObjectQuoter(v) for k, v in kwargs.items()}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
423 )