Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0080.py @ 4306:94e0968987cd
plugin XEP-0033: code modernisation, improve delivery, data validation:
- Code has been rewritten using Pydantic models and `async` coroutines for data validation
and cleaner element parsing/generation.
- Delivery has been completely rewritten. It now works even if server doesn't support
multicast, and send to local multicast service first. Delivering to local multicast
service first is due to bad support of XEP-0033 in server (notably Prosody which has an
incomplete implementation), and the current impossibility to detect if a sub-domain
service handles fully multicast or only for local domains. This is a workaround to have
a good balance between backward compatilibity and use of bandwith, and to make it work
with the incoming email gateway implementation (the gateway will only deliver to
entities of its own domain).
- disco feature checking now uses `async` corountines. `host` implementation still use
Deferred return values for compatibility with legacy code.
rel 450
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 26 Sep 2024 16:12:01 +0200 |
parents | 0d7bb4df2343 |
children |
rev | line source |
---|---|
3894
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Copyright (C) 2009-2022 Jérôme Poisson (goffi@goffi.org) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 # This program is free software: you can redistribute it and/or modify |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # it under the terms of the GNU Affero General Public License as published by |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # the Free Software Foundation, either version 3 of the License, or |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # (at your option) any later version. |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # GNU Affero General Public License for more details. |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU Affero General Public License |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 from typing import Dict, Any |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from twisted.words.xish import domish |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
22 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
23 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
24 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
25 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
26 from libervia.backend.tools import utils |
3894
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 log = getLogger(__name__) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 PLUGIN_INFO = { |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 C.PI_NAME: "User Location", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 C.PI_IMPORT_NAME: "XEP-0080", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 C.PI_TYPE: "XEP", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 C.PI_MODES: C.PLUG_MODE_BOTH, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 C.PI_PROTOCOLS: ["XEP-0080"], |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 C.PI_MAIN: "XEP_0080", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_HANDLER: "no", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 C.PI_DESCRIPTION: _("""Implementation of XEP-0080 (User Location)"""), |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 } |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 NS_GEOLOC = "http://jabber.org/protocol/geoloc" |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 KEYS_TYPES = { |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 "accuracy": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 "alt": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 "altaccuracy": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 "area": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 "bearing": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 "building": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 "country": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 "countrycode": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 "datum": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 "description": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 "error": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 "floor": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 "lat": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 "locality": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 "lon": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 "postalcode": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 "region": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 "room": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 "speed": float, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 "street": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 "text": str, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 "timestamp": "datetime", |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 "tzo": str, |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
67 "uri": str, |
3894
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 } |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 class XEP_0080: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 def __init__(self, host): |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 log.info(_("XEP-0080 (User Location) plugin initialization")) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3894
diff
changeset
|
75 host.register_namespace("geoloc", NS_GEOLOC) |
3894
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 def get_geoloc_elt( |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 self, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 location_data: Dict[str, Any], |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 ) -> domish.Element: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 """Generate the element describing the location |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 @param geoloc: metadata description the location |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 Keys correspond to ones found at |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 https://xmpp.org/extensions/xep-0080.html#format, with following additional |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 keys: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 - id (str): Identifier for this location |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 - language (str): language of the human readable texts |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 All keys are optional. |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 @return: ``<geoloc/>`` element |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 """ |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 geoloc_elt = domish.Element((NS_GEOLOC, "geoloc")) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 for key, value in location_data.items(): |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 try: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 key_type = KEYS_TYPES[key] |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 except KeyError: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 if key == "id": |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 # "id" attribute is not specified for XEP-0080's <geoloc/> element, |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 # but it may be used in a parent element (that's the case for events) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 pass |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 elif key == "language": |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 geoloc_elt["xml:lang"] = value |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 else: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 log.warning(f"Unknown location key {key}: {location_data}") |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 continue |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 if key_type == "datetime": |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 content = utils.xmpp_date(value) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 else: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 content = str(value) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 geoloc_elt.addElement(key, content=content) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 return geoloc_elt |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
114 def parse_geoloc_elt(self, geoloc_elt: domish.Element) -> Dict[str, Any]: |
3894
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 """Parse <geoloc/> element |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 @param geoloc_elt: <geoloc/> element |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 a parent element can also be used |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 @return: geoloc data. It's a dict whose keys correspond to |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 [get_geoloc_elt] parameters |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 @raise exceptions.NotFound: no <geoloc/> element has been found |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 """ |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 if geoloc_elt.name != "geoloc": |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 try: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 geoloc_elt = next(geoloc_elt.elements(NS_GEOLOC, "geoloc")) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 except StopIteration: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 raise exceptions.NotFound |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 data: Dict[str, Any] = {} |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 for elt in geoloc_elt.elements(): |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 if elt.uri != NS_GEOLOC: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 log.warning(f"unmanaged geoloc element: {elt.toXml()}") |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 continue |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 try: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 data_type = KEYS_TYPES[elt.name] |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 except KeyError: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 log.warning(f"unknown geoloc element: {elt.toXml()}") |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 continue |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 try: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 if data_type == "datetime": |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 data[elt.name] = utils.parse_xmpp_date(str(elt)) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 else: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 data[elt.name] = data_type(str(elt)) |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 except Exception as e: |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 log.warning(f"can't parse element: {elt.toXml()}") |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 continue |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 |
ed470361ea2e
plugin XEP-0080: User Location implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 return data |