Mercurial > libervia-backend
diff sat/plugins/plugin_misc_upload.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 | 1658472abd77 |
children | 524856bd7b19 |
line wrap: on
line diff
--- a/sat/plugins/plugin_misc_upload.py Thu Oct 06 16:02:05 2022 +0200 +++ b/sat/plugins/plugin_misc_upload.py Thu Oct 06 16:02:05 2022 +0200 @@ -18,15 +18,20 @@ import os import os.path +from pathlib import Path +from typing import Optional, Tuple, Union + from twisted.internet import defer from twisted.words.protocols.jabber import jid from twisted.words.protocols.jabber import error as jabber_error -from sat.core.i18n import _, D_ + +from sat.core import exceptions from sat.core.constants import Const as C +from sat.core.core_types import SatXMPPEntity +from sat.core.i18n import D_, _ +from sat.core.log import getLogger +from sat.tools import xml_tools from sat.tools.common import data_format -from sat.core.log import getLogger -from sat.core import exceptions -from sat.tools import xml_tools log = getLogger(__name__) @@ -99,26 +104,32 @@ else: return {"progress": progress_id} - async def upload(self, client, filepath, filename=None, upload_jid=None, - options=None): + async def upload( + self, + client: SatXMPPEntity, + filepath: Union[Path, str], + filename: Optional[str] = None, + upload_jid: Optional[jid.JID] = None, + extra: Optional[dict]=None + ) -> Tuple[str, defer.Deferred]: """Send a file using best available method - @param filepath(str): absolute path to the file - @param filename(None, unicode): name to use for the upload + @param filepath: absolute path to the file + @param filename: name to use for the upload None to use basename of the path - @param upload_jid(jid.JID, None): upload capable entity jid, + @param upload_jid: upload capable entity jid, or None to use autodetected, if possible - @param options(dict): option to use for the upload, may be: + @param extra: extra data/options to use for the upload, may be: - ignore_tls_errors(bool): True to ignore SSL/TLS certificate verification used only if HTTPS transport is needed - progress_id(str): id to use for progression if not specified, one will be generated @param profile: %(doc_profile)s - @return (tuple[unicode,D(unicode)]): progress_id and a Deferred which fire - download URL when upload is finished + @return: progress_id and a Deferred which fire download URL when upload is + finished """ - if options is None: - options = {} + if extra is None: + extra = {} if not os.path.isfile(filepath): raise exceptions.DataError("The given path doesn't link to a file") for method_name, available_cb, upload_cb, priority in self._upload_callbacks: @@ -132,7 +143,7 @@ "{name} method will be used to upload the file".format(name=method_name) ) progress_id, download_d = await upload_cb( - client, filepath, filename, upload_jid, options + client, filepath, filename, upload_jid, extra ) return progress_id, download_d