XEP-0363: HTTP File Upload¶
- class slixmpp.plugins.xep_0363.XEP_0363(xmpp, config=None)[source]¶
XEP-0363: HTTP File Upload
- async find_upload_service(domain=None, **iqkwargs)[source]¶
Find an upload service on a domain (our own by default).
- request_slot(jid, filename, size, content_type=None, *, ifrom=None, **iqkwargs)[source]¶
Request an HTTP upload slot from a service.
- async upload_file(filename, size=None, content_type=None, *, input_file=None, domain=None, **iqkwargs)[source]¶
Helper function which does all of the uploading discovery and process.
- Parameters
filename (
Path
) – Path to the file to upload (or only the name ifinput_file
is provided.size (
Optional
[int
,None
]) – size of the file in bytes.content_type (
Optional
[str
,None
]) – Type of the file that will be uploaded.input_file (
Optional
[IO
[bytes
],None
]) – Binary file stream on the file.domain (
Optional
[JID
,None
]) – Domain to query to find an HTTP upload service.
- Raises
.UploadServiceNotFound – If slixmpp is unable to find an an available upload service.
.FileTooBig – If the filesize is above what is accepted by the service.
.HTTPError – If there is an error in the HTTP operation.
- Return type
str
- Returns
The URL of the uploaded file.
- class slixmpp.plugins.xep_0363.UploadServiceNotFound[source]¶
Raised if no upload service can be found.
- class slixmpp.plugins.xep_0363.FileTooBig[source]¶
Raised if the file size is above advertised server limits.
args:
size of the file
max file size allowed
- class slixmpp.plugins.xep_0363.HTTPError[source]¶
Raised when we receive an HTTP error response during upload.
args:
HTTP Error code
Content of the HTTP response
Stanza elements¶
- class slixmpp.plugins.xep_0363.stanza.Get(xml=None, parent=None)[source]¶
- interfaces: ClassVar[Set[str]] = {'url'}¶
The set of keys that the stanza provides for accessing and manipulating the underlying XML object. This set may be augmented with the
plugin_attrib
value of any registered stanza plugins.
- name: ClassVar[str] = 'get'¶
The XML tag name of the element, not including any namespace prefixes. For example, an
ElementBase
object for<message />
would usename = 'message'
.
- namespace: str = 'urn:xmpp:http:upload:0'¶
The XML namespace for the element. Given
<foo xmlns="bar" />
, thennamespace = "bar"
should be used. The default namespace isjabber:client
since this is being used in an XMPP library.
- plugin_attrib: ClassVar[str] = 'get'¶
For
ElementBase
subclasses which are intended to be used as plugins, theplugin_attrib
value defines the plugin name. Plugins may be accessed by using theplugin_attrib
value as the interface. An example usingplugin_attrib = 'foo'
:register_stanza_plugin(Message, FooPlugin) msg = Message() msg['foo']['an_interface_from_the_foo_plugin']
- class slixmpp.plugins.xep_0363.stanza.Header(xml=None, parent=None)[source]¶
-
- interfaces: ClassVar[Set[str]] = {'name', 'value'}¶
The set of keys that the stanza provides for accessing and manipulating the underlying XML object. This set may be augmented with the
plugin_attrib
value of any registered stanza plugins.
- name: ClassVar[str] = 'header'¶
The XML tag name of the element, not including any namespace prefixes. For example, an
ElementBase
object for<message />
would usename = 'message'
.
- namespace: str = 'urn:xmpp:http:upload:0'¶
The XML namespace for the element. Given
<foo xmlns="bar" />
, thennamespace = "bar"
should be used. The default namespace isjabber:client
since this is being used in an XMPP library.
- plugin_attrib: ClassVar[str] = 'header'¶
For
ElementBase
subclasses which are intended to be used as plugins, theplugin_attrib
value defines the plugin name. Plugins may be accessed by using theplugin_attrib
value as the interface. An example usingplugin_attrib = 'foo'
:register_stanza_plugin(Message, FooPlugin) msg = Message() msg['foo']['an_interface_from_the_foo_plugin']
- plugin_multi_attrib: ClassVar[str] = 'headers'¶
For
ElementBase
subclasses that are intended to be an iterable group of items, theplugin_multi_attrib
value defines an interface for the parent stanza which returns the entire group of matching substanzas. So the following are equivalent:# Given stanza class Foo, with plugin_multi_attrib = 'foos' parent['foos'] filter(isinstance(item, Foo), parent['substanzas'])
- class slixmpp.plugins.xep_0363.stanza.Put(xml=None, parent=None)[source]¶
- interfaces: ClassVar[Set[str]] = {'url'}¶
The set of keys that the stanza provides for accessing and manipulating the underlying XML object. This set may be augmented with the
plugin_attrib
value of any registered stanza plugins.
- name: ClassVar[str] = 'put'¶
The XML tag name of the element, not including any namespace prefixes. For example, an
ElementBase
object for<message />
would usename = 'message'
.
- namespace: str = 'urn:xmpp:http:upload:0'¶
The XML namespace for the element. Given
<foo xmlns="bar" />
, thennamespace = "bar"
should be used. The default namespace isjabber:client
since this is being used in an XMPP library.
- plugin_attrib: ClassVar[str] = 'put'¶
For
ElementBase
subclasses which are intended to be used as plugins, theplugin_attrib
value defines the plugin name. Plugins may be accessed by using theplugin_attrib
value as the interface. An example usingplugin_attrib = 'foo'
:register_stanza_plugin(Message, FooPlugin) msg = Message() msg['foo']['an_interface_from_the_foo_plugin']
- class slixmpp.plugins.xep_0363.stanza.Request(xml=None, parent=None)[source]¶
- interfaces: ClassVar[Set[str]] = {'content-type', 'filename', 'size'}¶
The set of keys that the stanza provides for accessing and manipulating the underlying XML object. This set may be augmented with the
plugin_attrib
value of any registered stanza plugins.
- name: ClassVar[str] = 'request'¶
The XML tag name of the element, not including any namespace prefixes. For example, an
ElementBase
object for<message />
would usename = 'message'
.
- namespace: str = 'urn:xmpp:http:upload:0'¶
The XML namespace for the element. Given
<foo xmlns="bar" />
, thennamespace = "bar"
should be used. The default namespace isjabber:client
since this is being used in an XMPP library.
- plugin_attrib: ClassVar[str] = 'http_upload_request'¶
For
ElementBase
subclasses which are intended to be used as plugins, theplugin_attrib
value defines the plugin name. Plugins may be accessed by using theplugin_attrib
value as the interface. An example usingplugin_attrib = 'foo'
:register_stanza_plugin(Message, FooPlugin) msg = Message() msg['foo']['an_interface_from_the_foo_plugin']
- class slixmpp.plugins.xep_0363.stanza.Slot(xml=None, parent=None)[source]¶
- name: ClassVar[str] = 'slot'¶
The XML tag name of the element, not including any namespace prefixes. For example, an
ElementBase
object for<message />
would usename = 'message'
.
- namespace: str = 'urn:xmpp:http:upload:0'¶
The XML namespace for the element. Given
<foo xmlns="bar" />
, thennamespace = "bar"
should be used. The default namespace isjabber:client
since this is being used in an XMPP library.
- plugin_attrib: ClassVar[str] = 'http_upload_slot'¶
For
ElementBase
subclasses which are intended to be used as plugins, theplugin_attrib
value defines the plugin name. Plugins may be accessed by using theplugin_attrib
value as the interface. An example usingplugin_attrib = 'foo'
:register_stanza_plugin(Message, FooPlugin) msg = Message() msg['foo']['an_interface_from_the_foo_plugin']