Mercurial > libervia-backend
diff libervia/backend/plugins/plugin_xep_0447.py @ 4270:0d7bb4df2343
Reformatted code base using black.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 19 Jun 2024 18:44:57 +0200 |
parents | 4b842c1fb686 |
children |
line wrap: on
line diff
--- a/libervia/backend/plugins/plugin_xep_0447.py Tue Jun 18 12:06:45 2024 +0200 +++ b/libervia/backend/plugins/plugin_xep_0447.py Wed Jun 19 18:44:57 2024 +0200 @@ -66,19 +66,21 @@ self._m = host.plugins["XEP-0446"] self._http_upload = host.plugins.get("XEP-0363") self._attach = host.plugins["ATTACH"] - self._attach.register( - self.can_handle_attachment, self.attach, priority=1000 - ) + self._attach.register(self.can_handle_attachment, self.attach, priority=1000) self.register_source_handler( self._u.namespace, "url-data", self._u.parse_url_data_elt ) - host.plugins["DOWNLOAD"].register_download_handler(self._u.namespace, self.download) + host.plugins["DOWNLOAD"].register_download_handler( + self._u.namespace, self.download + ) host.trigger.add("message_received", self._message_received_trigger) def register_source_handler( - self, namespace: str, element_name: str, + self, + namespace: str, + element_name: str, callback: Callable[[domish.Element], Dict[str, Any]], - encrypted: bool = False + encrypted: bool = False, ) -> None: """Register a handler for file source @@ -103,7 +105,7 @@ attachment: Dict[str, Any], source: Dict[str, Any], dest_path: Union[Path, str], - extra: Optional[Dict[str, Any]] = None + extra: Optional[Dict[str, Any]] = None, ) -> Tuple[str, defer.Deferred]: # TODO: handle url-data headers if extra is None: @@ -113,10 +115,8 @@ except KeyError: raise ValueError(f"{source} has missing URL") - if extra.get('ignore_tls_errors', False): - log.warning( - "TLS certificate check disabled, this is highly insecure" - ) + if extra.get("ignore_tls_errors", False): + log.warning("TLS certificate check disabled, this is highly insecure") treq_client = treq_client_no_ssl else: treq_client = treq @@ -125,14 +125,14 @@ file_size = int(attachment["size"]) except (KeyError, ValueError): head_data = await treq_client.head(download_url) - file_size = int(head_data.headers.getRawHeaders('content-length')[0]) + file_size = int(head_data.headers.getRawHeaders("content-length")[0]) file_obj = stream.SatFile( self.host, client, dest_path, mode="wb", - size = file_size, + size=file_size, ) progress_id = file_obj.uid @@ -157,8 +157,7 @@ return True def get_sources_elt( - self, - children: Optional[List[domish.Element]] = None + self, children: Optional[List[domish.Element]] = None ) -> domish.Element: """Generate <sources> element""" sources_elt = domish.Element((NS_SFS, "sources")) @@ -211,20 +210,13 @@ file_sharing_elt.addChild(sources_elt) for source_data in sources: if "url" in source_data: - sources_elt.addChild( - self._u.get_url_data_elt(**source_data) - ) + sources_elt.addChild(self._u.get_url_data_elt(**source_data)) else: - raise NotImplementedError( - f"source data not implemented: {source_data}" - ) + raise NotImplementedError(f"source data not implemented: {source_data}") return file_sharing_elt - def parse_sources_elt( - self, - sources_elt: domish.Element - ) -> List[Dict[str, Any]]: + def parse_sources_elt(self, sources_elt: domish.Element) -> List[Dict[str, Any]]: """Parse <sources/> element @param sources_elt: <sources/> element, or a direct parent element @@ -236,7 +228,8 @@ sources_elt = next(sources_elt.elements(NS_SFS, "sources")) except StopIteration: raise exceptions.NotFound( - f"<sources/> element is missing: {sources_elt.toXml()}") + f"<sources/> element is missing: {sources_elt.toXml()}" + ) sources = [] for elt in sources_elt.elements(): if not elt.uri: @@ -257,10 +250,7 @@ sources.append(source_data) return sources - def parse_file_sharing_elt( - self, - file_sharing_elt: domish.Element - ) -> Dict[str, Any]: + def parse_file_sharing_elt(self, file_sharing_elt: domish.Element) -> Dict[str, Any]: """Parse <file-sharing/> element and return file-sharing data @param file_sharing_elt: <file-sharing/> element @@ -269,9 +259,7 @@ """ if file_sharing_elt.name != "file-sharing" or file_sharing_elt.uri != NS_SFS: try: - file_sharing_elt = next( - file_sharing_elt.elements(NS_SFS, "file-sharing") - ) + file_sharing_elt = next(file_sharing_elt.elements(NS_SFS, "file-sharing")) except StopIteration: raise exceptions.NotFound try: @@ -289,10 +277,7 @@ return data def _add_file_sharing_attachments( - self, - client: SatXMPPEntity, - message_elt: domish.Element, - data: Dict[str, Any] + self, client: SatXMPPEntity, message_elt: domish.Element, data: Dict[str, Any] ) -> Dict[str, Any]: """Check <message> for a shared file, and add it as an attachment""" # XXX: XEP-0447 doesn't support several attachments in a single message, for now @@ -302,15 +287,14 @@ attachment = self.parse_file_sharing_elt(message_elt) if any( - s.get(C.MESS_KEY_ENCRYPTED, False) - for s in attachment["sources"] + s.get(C.MESS_KEY_ENCRYPTED, False) for s in attachment["sources"] ) and client.encryption.isEncrypted(data): # we don't add the encrypted flag if the message itself is not encrypted, # because the decryption key is part of the link, so sending it over # unencrypted channel is like having no encryption at all. attachment[C.MESS_KEY_ENCRYPTED] = True - attachments = data['extra'].setdefault(C.KEY_ATTACHMENTS, []) + attachments = data["extra"].setdefault(C.KEY_ATTACHMENTS, []) attachments.append(attachment) return data @@ -319,7 +303,7 @@ # XXX: for now, XEP-0447 only allow to send one file per <message/>, thus we need # to send each file in a separate message attachments = data["extra"][C.KEY_ATTACHMENTS] - if not data['message'] or data['message'] == {'': ''}: + if not data["message"] or data["message"] == {"": ""}: extra_attachments = attachments[1:] del attachments[1:] else: @@ -346,23 +330,25 @@ size=attachment.get("size"), desc=attachment.get("desc"), media_type=attachment.get("media_type"), - file_hash=file_hash + file_hash=file_hash, ) data["xml"].addChild(file_sharing_elt) for attachment in extra_attachments: # we send all remaining attachment in a separate message await client.sendMessage( - to_jid=data['to'], - message={'': ''}, - subject=data['subject'], - mess_type=data['type'], + to_jid=data["to"], + message={"": ""}, + subject=data["subject"], + mess_type=data["type"], extra={C.KEY_ATTACHMENTS: [attachment]}, ) - if ((not data['extra'] - and (not data['message'] or data['message'] == {'': ''}) - and not data['subject'])): + if ( + not data["extra"] + and (not data["message"] or data["message"] == {"": ""}) + and not data["subject"] + ): # nothing left to send, we can cancel the message raise exceptions.CancelError("Cancelled by XEP_0447 attachment handling")