Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0446.py @ 4351:6a0a081485b8
plugin autocrypt: Autocrypt protocol implementation:
Implementation of autocrypt: `autocrypt` header is checked, and if present and no public
key is known for the peer, the key is imported.
`autocrypt` header is also added to outgoing message (only if an email gateway is
detected).
For the moment, the JID is use as identifier, but the real email used by gateway should be
used in the future.
rel 456
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 28 Feb 2025 09:23:35 +0100 |
parents | 111dce64dcb5 |
children |
rev | line source |
---|---|
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Copyright (C) 2009-2022 Jérôme Poisson (goffi@goffi.org) |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 # This program is free software: you can redistribute it and/or modify |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # it under the terms of the GNU Affero General Public License as published by |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # the Free Software Foundation, either version 3 of the License, or |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # (at your option) any later version. |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # GNU Affero General Public License for more details. |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU Affero General Public License |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 from pathlib import Path |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
19 from typing import Self, cast |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
21 from pydantic import BaseModel, Field |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from twisted.words.xish import domish |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
24 from libervia.backend.core import exceptions |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
25 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
|
26 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
27 from libervia.backend.core.log import getLogger |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
28 from libervia.backend.plugins.plugin_xep_0300 import XEP_0300 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
29 from libervia.backend.tools import utils |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 log = getLogger(__name__) |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 PLUGIN_INFO = { |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 C.PI_NAME: "File Metadata Element", |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 C.PI_IMPORT_NAME: "XEP-0446", |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 C.PI_TYPE: "XEP", |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 C.PI_MODES: C.PLUG_MODE_BOTH, |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 C.PI_PROTOCOLS: ["XEP-0446"], |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 C.PI_DEPENDENCIES: ["XEP-0300"], |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_MAIN: "XEP_0446", |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_HANDLER: "no", |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 C.PI_DESCRIPTION: _("""Implementation of XEP-0446 (File Metadata Element)"""), |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 } |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 NS_FILE_METADATA = "urn:xmpp:file:metadata:0" |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
49 class FileMetadata(BaseModel): |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
50 """ |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
51 Model for file metadata. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
52 """ |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
53 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
54 name: str | None = Field(None, description="Name of the file.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
55 media_type: str | None = Field(None, description="Media type of the file.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
56 desc: str | None = Field(None, description="Description of the file.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
57 size: int | None = Field(None, description="Size of the file in bytes.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
58 file_hash: tuple[str, str] | None = Field( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
59 None, description="File hash as a tuple of (algo, hash)." |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
60 ) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
61 date: float | int | None = Field( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
62 None, description="Timestamp of the last modification datetime." |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
63 ) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
64 width: int | None = Field(None, description="Image or video width in pixels.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
65 height: int | None = Field(None, description="Image or video height in pixels.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
66 length: int | None = Field(None, description="Video or audio length in milliseconds.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
67 thumbnail: str | None = Field(None, description="URL to a thumbnail.") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
68 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
69 _hash: XEP_0300 | None = None |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
70 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
71 @classmethod |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
72 def from_element(cls, file_metadata_elt: domish.Element) -> Self: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
73 """Create a FileMetadata instance from a <file> element or its parent. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
74 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
75 @param file_metadata_elt: The <file> element or a parent element. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
76 @return: FileMetadata instance. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
77 @raise exceptions.NotFound: If the <file> element is not found. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
78 """ |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
79 assert cls._hash is not None, "_hash attribute is not set" |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
80 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
81 if file_metadata_elt.uri != NS_FILE_METADATA or file_metadata_elt.name != "file": |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
82 child_file_metadata_elt = next( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
83 file_metadata_elt.elements(NS_FILE_METADATA, "file"), None |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
84 ) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
85 if child_file_metadata_elt is None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
86 raise exceptions.NotFound("<file> element not found") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
87 else: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
88 file_metadata_elt = child_file_metadata_elt |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
89 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
90 kwargs = {} |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
91 for key in ( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
92 "name", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
93 "media_type", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
94 "desc", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
95 "size", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
96 "date", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
97 "width", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
98 "height", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
99 "length", |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
100 ): |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
101 elt = next(file_metadata_elt.elements(NS_FILE_METADATA, key), None) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
102 if elt is not None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
103 if key in ("name", "media_type", "desc"): |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
104 content = str(elt) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
105 if key == "name": |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
106 content = Path(content).name |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
107 kwargs[key] = content |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
108 elif key in ("size", "width", "height", "length"): |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
109 kwargs[key] = int(str(elt)) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
110 elif key == "date": |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
111 kwargs[key] = utils.parse_xmpp_date(str(elt)) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
112 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
113 hash_elt = next(file_metadata_elt.elements(NS_FILE_METADATA, "hash"), None) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
114 if hash_elt: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
115 try: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
116 algo, hash_ = cls._hash.parse_hash_elt(hash_elt) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
117 except exceptions.NotFound: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
118 pass |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
119 except exceptions.DataError: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
120 from libervia.backend.tools.xml_tools import p_fmt_elt |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
121 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
122 log.warning(f"invalid <hash/> element:\n{p_fmt_elt(file_metadata_elt)}") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
123 else: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
124 kwargs["file_hash"] = (algo, hash_) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
125 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
126 return cls(**kwargs) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
127 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
128 def to_element(self) -> domish.Element: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
129 """Build the <file> element from this instance's data. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
130 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
131 @return: <file> element. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
132 """ |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
133 assert self._hash is not None, "_hash attribute is not set" |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
134 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
135 file_elt = domish.Element((NS_FILE_METADATA, "file")) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
136 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
137 for key, value in ( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
138 ("name", self.name), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
139 ("media-type", self.media_type), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
140 ("desc", self.desc), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
141 ("size", self.size), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
142 ("width", self.width), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
143 ("height", self.height), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
144 ("length", self.length), |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
145 ): |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
146 if value is not None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
147 file_elt.addElement(key, content=str(value)) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
148 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
149 if self.file_hash is not None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
150 hash_algo, hash_ = self.file_hash |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
151 file_elt.addChild(self._hash.build_hash_elt(hash_, hash_algo)) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
152 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
153 if self.date is not None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
154 file_elt.addElement("date", content=utils.xmpp_date(self.date)) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
155 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
156 if self.thumbnail is not None: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
157 log.warning("thumbnail is not implemented yet") |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
158 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
159 return file_elt |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
160 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
161 @classmethod |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
162 def from_filedata_dict(cls, file_data: dict) -> Self: |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
163 """Create an instance of FileMetadata from data dict as returned by ``memory``. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
164 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
165 @param data: A filedata dict as returned by ``memory.get_files`` |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
166 @return: An instance of FileMetadata. |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
167 """ |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
168 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
169 # Extracting relevant fields |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
170 name = file_data["name"] |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
171 media_type = f'{file_data["media_type"]}/{file_data["media_subtype"]}' |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
172 desc = None # TODO |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
173 size = file_data["size"] |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
174 file_hash = (file_data["hash_algo"], file_data["file_hash"]) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
175 date = file_data.get("modified") or file_data["created"] |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
176 width = None # TODO |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
177 height = None # TODO |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
178 length = None # TODO |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
179 thumbnail = None # TODO |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
180 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
181 return cls( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
182 name=name, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
183 media_type=media_type, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
184 desc=desc, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
185 size=size, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
186 file_hash=file_hash, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
187 date=date, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
188 width=width, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
189 height=height, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
190 length=length, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
191 thumbnail=thumbnail, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
192 ) |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
193 |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
194 |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
195 class XEP_0446: |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 def __init__(self, host): |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 log.info(_("XEP-0446 (File Metadata Element) plugin initialization")) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3922
diff
changeset
|
198 host.register_namespace("file-metadata", NS_FILE_METADATA) |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
199 FileMetadata._hash = cast(XEP_0300, host.plugins["XEP-0300"]) |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
201 def generate_file_metadata( |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 self, |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
203 name: str | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
204 media_type: str | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
205 desc: str | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
206 size: int | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
207 file_hash: tuple[str, str] | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
208 date: float | int | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
209 width: int | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
210 height: int | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
211 length: int | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
212 thumbnail: str | None = None, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
213 ) -> FileMetadata: |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 """Generate the element describing a file |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 @param name: name of the file |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 @param media_type: media-type |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 @param desc: description |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 @param size: size in bytes |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 @param file_hash: (algo, hash) |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 @param date: timestamp of the last modification datetime |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 @param width: image width in pixels |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 @param height: image height in pixels |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 @param length: video length in seconds |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 @param thumbnail: URL to a thumbnail |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 @return: ``<file/>`` element |
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 """ |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
228 return FileMetadata( |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
229 name=name, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
230 media_type=media_type, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
231 desc=desc, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
232 size=size, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
233 file_hash=file_hash, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
234 date=date, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
235 width=width, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
236 height=height, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
237 length=length, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
238 thumbnail=thumbnail, |
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
239 ) |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
241 def parse_file_metadata_elt(self, file_metadata_elt: domish.Element) -> FileMetadata: |
3922
0ff265725489
plugin XEP-0447: handle attachment and download:
Goffi <goffi@goffi.org>
parents:
3896
diff
changeset
|
242 """Parse <file/> element |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 |
3922
0ff265725489
plugin XEP-0447: handle attachment and download:
Goffi <goffi@goffi.org>
parents:
3896
diff
changeset
|
244 @param file_metadata_elt: <file/> element |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 a parent element can also be used |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
246 @return: FileMetadata instance. |
3922
0ff265725489
plugin XEP-0447: handle attachment and download:
Goffi <goffi@goffi.org>
parents:
3896
diff
changeset
|
247 @raise exceptions.NotFound: no <file/> element has been found |
3896
dbf0c7faaf49
plugin XEP-0446: File Metadata implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 """ |
4334
111dce64dcb5
plugins XEP-0300, XEP-0446, XEP-0447, XEP0448 and others: Refactoring to use Pydantic:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
249 return FileMetadata.from_element(file_metadata_elt) |