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