Mercurial > libervia-backend
comparison sat/plugins/plugin_xep_0446.py @ 3922:0ff265725489
plugin XEP-0447: handle attachment and download:
- plugin XEP-0447 can now be used in message attachments and to retrieve an attachment
- plugin attach: `attachment` being processed is added to `extra` so the handler can inspect it
- plugin attach: `size` is added to attachment
- plugin download: a whole attachment dict is now used in `download` and
`file_download`/`file_download_complete`. `download_uri` can be used as a shortcut when
just a URI is used. In addition to URI scheme handler, whole attachment handlers can now
be registered with `register_download_handler`
- plugin XEP-0363: `file_http_upload` `XEP-0363_upload_size` triggers have been renamed to
`XEP-0363_upload_pre_slot` and is now using a dict with arguments, allowing for the size
but also the filename to be modified, which is necessary for encryption (filename may
be hidden from URL this way).
- plugin XEP-0446: fix wrong element name
- plugin XEP-0447: source handler can now be registered (`url-data` is registered by
default)
- plugin XEP-0447: source parsing has been put in a separated `parse_sources_elt` method,
as it may be useful to do it independently (notably with XEP-0448)
- plugin XEP-0447: parse received message and complete attachments when suitable
- plugin XEP-0447: can now be used with message attachments
- plugin XEP-0447: can now be used with attachments download
- renamed `options` arguments to `extra` for consistency
- some style change (progressive move from legacy camelCase to PEP8 snake_case)
- some typing
rel 379
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 06 Oct 2022 16:02:05 +0200 |
parents | dbf0c7faaf49 |
children | 524856bd7b19 |
comparison
equal
deleted
inserted
replaced
3921:cc2705225778 | 3922:0ff265725489 |
---|---|
105 | 105 |
106 def parse_file_metadata_elt( | 106 def parse_file_metadata_elt( |
107 self, | 107 self, |
108 file_metadata_elt: domish.Element | 108 file_metadata_elt: domish.Element |
109 ) -> Dict[str, Any]: | 109 ) -> Dict[str, Any]: |
110 """Parse <file-metadata/> element | 110 """Parse <file/> element |
111 | 111 |
112 @param file_metadata_elt: <file-metadata/> element | 112 @param file_metadata_elt: <file/> element |
113 a parent element can also be used | 113 a parent element can also be used |
114 @return: file-metadata data. It's a dict whose keys correspond to | 114 @return: file metadata. It's a dict whose keys correspond to |
115 [get_file_metadata_elt] parameters | 115 [get_file_metadata_elt] parameters |
116 @raise exceptions.NotFound: no <file-metadata/> element has been found | 116 @raise exceptions.NotFound: no <file/> element has been found |
117 """ | 117 """ |
118 | 118 |
119 if file_metadata_elt.name != "file-metadata": | 119 if file_metadata_elt.name != "file": |
120 try: | 120 try: |
121 file_metadata_elt = next( | 121 file_metadata_elt = next( |
122 file_metadata_elt.elements(NS_FILE_METADATA, "file-metadata") | 122 file_metadata_elt.elements(NS_FILE_METADATA, "file") |
123 ) | 123 ) |
124 except StopIteration: | 124 except StopIteration: |
125 raise exceptions.NotFound | 125 raise exceptions.NotFound |
126 data: Dict[str, Any] = {} | 126 data: Dict[str, Any] = {} |
127 | 127 |
156 pass | 156 pass |
157 except exceptions.DataError: | 157 except exceptions.DataError: |
158 from sat.tools.xml_tools import pFmtElt | 158 from sat.tools.xml_tools import pFmtElt |
159 log.warning("invalid <hash/> element:\n{pFmtElt(file_metadata_elt)}") | 159 log.warning("invalid <hash/> element:\n{pFmtElt(file_metadata_elt)}") |
160 else: | 160 else: |
161 data["file_hash"] = (algo, hash_.decode()) | 161 data["file_hash"] = (algo, hash_) |
162 | 162 |
163 # TODO: thumbnails | 163 # TODO: thumbnails |
164 | 164 |
165 return data | 165 return data |