Mercurial > libervia-backend
diff sat/plugins/plugin_xep_0231.py @ 2624:56f94936df1e
code style reformatting using black
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 27 Jun 2018 20:14:46 +0200 |
parents | 26edcf3a30eb |
children | 378188abe941 |
line wrap: on
line diff
--- a/sat/plugins/plugin_xep_0231.py Wed Jun 27 07:51:29 2018 +0200 +++ b/sat/plugins/plugin_xep_0231.py Wed Jun 27 20:14:46 2018 +0200 @@ -21,6 +21,7 @@ from sat.core.constants import Const as C from sat.core import exceptions from sat.core.log import getLogger + log = getLogger(__name__) from sat.tools import xml_tools from wokkel import disco, iwokkel @@ -43,24 +44,29 @@ C.PI_PROTOCOLS: ["XEP-0231"], C.PI_MAIN: "XEP_0231", C.PI_HANDLER: "yes", - C.PI_DESCRIPTION: _("""Implementation of bits of binary (used for small images/files)""") + C.PI_DESCRIPTION: _( + """Implementation of bits of binary (used for small images/files)""" + ), } -NS_BOB = u'urn:xmpp:bob' +NS_BOB = u"urn:xmpp:bob" IQ_BOB_REQUEST = C.IQ_GET + '/data[@xmlns="' + NS_BOB + '"]' class XEP_0231(object): - def __init__(self, host): log.info(_(u"plugin Bits of Binary initialization")) self.host = host - host.registerNamespace('bob', NS_BOB) + host.registerNamespace("bob", NS_BOB) host.trigger.add("xhtml_post_treat", self.XHTMLTrigger) - host.bridge.addMethod("bobGetFile", ".plugin", - in_sign='sss', out_sign='s', - method=self._getFile, - async=True) + host.bridge.addMethod( + "bobGetFile", + ".plugin", + in_sign="sss", + out_sign="s", + method=self._getFile, + async=True, + ) def dumpData(self, cache, data_elt, cid): """save file encoded in data_elt to cache @@ -70,21 +76,19 @@ @param cid(unicode): content-id @return(unicode): full path to dumped file """ - # FIXME: is it needed to use a separate thread? + # FIXME: is it needed to use a separate thread? # probably not with the little data expected with BoB try: - max_age = int(data_elt['max-age']) + max_age = int(data_elt["max-age"]) if max_age < 0: raise ValueError except (KeyError, ValueError): - log.warning(u'invalid max-age found') + log.warning(u"invalid max-age found") max_age = None with cache.cacheData( - PLUGIN_INFO[C.PI_IMPORT_NAME], - cid, - data_elt.getAttribute('type'), - max_age) as f: + PLUGIN_INFO[C.PI_IMPORT_NAME], cid, data_elt.getAttribute("type"), max_age + ) as f: file_path = f.name f.write(base64.b64decode(str(data_elt))) @@ -95,15 +99,16 @@ return XEP_0231_handler(self) def _requestCb(self, iq_elt, cache, cid): - for data_elt in iq_elt.elements(NS_BOB, u'data'): - if data_elt.getAttribute('cid') == cid: + for data_elt in iq_elt.elements(NS_BOB, u"data"): + if data_elt.getAttribute("cid") == cid: file_path = self.dumpData(cache, data_elt, cid) return file_path - log.warning(u"invalid data stanza received, requested cid was not found:\n{iq_elt}\nrequested cid: {cid}".format( - iq_elt = iq_elt, - cid = cid - )) + log.warning( + u"invalid data stanza received, requested cid was not found:\n{iq_elt}\nrequested cid: {cid}".format( + iq_elt=iq_elt, cid=cid + ) + ) raise failure.Failure(exceptions.DataError("missing data")) def _requestEb(self, failure_): @@ -122,39 +127,39 @@ """ if cache is None: cache = client.cache - iq_elt = client.IQ('get') - iq_elt['to'] = to_jid.full() - data_elt = iq_elt.addElement((NS_BOB, 'data')) - data_elt['cid'] = cid + iq_elt = client.IQ("get") + iq_elt["to"] = to_jid.full() + data_elt = iq_elt.addElement((NS_BOB, "data")) + data_elt["cid"] = cid d = iq_elt.send() d.addCallback(self._requestCb, cache, cid) d.addErrback(self._requestEb) return d def _setImgEltSrc(self, path, img_elt): - img_elt[u'src'] = u'file://{}'.format(path) + img_elt[u"src"] = u"file://{}".format(path) def XHTMLTrigger(self, client, message_elt, body_elt, lang, treat_d): - for img_elt in xml_tools.findAll(body_elt, C.NS_XHTML, u'img'): - source = img_elt.getAttribute(u'src','') - if source.startswith(u'cid:'): + for img_elt in xml_tools.findAll(body_elt, C.NS_XHTML, u"img"): + source = img_elt.getAttribute(u"src", "") + if source.startswith(u"cid:"): cid = source[4:] file_path = client.cache.getFilePath(cid) if file_path is not None: - # image is in cache, we change the url - img_elt[u'src'] = u'file://{}'.format(file_path) + # image is in cache, we change the url + img_elt[u"src"] = u"file://{}".format(file_path) continue else: # image is not in cache, is it given locally? - for data_elt in message_elt.elements(NS_BOB, u'data'): - if data_elt.getAttribute('cid') == cid: + for data_elt in message_elt.elements(NS_BOB, u"data"): + if data_elt.getAttribute("cid") == cid: file_path = self.dumpData(client.cache, data_elt, cid) - img_elt[u'src'] = u'file://{}'.format(file_path) + img_elt[u"src"] = u"file://{}".format(file_path) break else: # cid not found locally, we need to request it # so we use the deferred - d = self.requestData(client, jid.JID(message_elt['from']), cid) + d = self.requestData(client, jid.JID(message_elt["from"]), cid) d.addCallback(partial(self._setImgEltSrc, img_elt=img_elt)) treat_d.addCallback(lambda dummy: d) @@ -165,28 +170,28 @@ # An access check should be implemented though. iq_elt.handled = True - data_elt = next(iq_elt.elements(NS_BOB, 'data')) + data_elt = next(iq_elt.elements(NS_BOB, "data")) try: - cid = data_elt[u'cid'] + cid = data_elt[u"cid"] except KeyError: - error_elt = jabber_error.StanzaError('not-acceptable').toResponse(iq_elt) + error_elt = jabber_error.StanzaError("not-acceptable").toResponse(iq_elt) client.send(error_elt) return metadata = self.host.common_cache.getMetadata(cid) if metadata is None: - error_elt = jabber_error.StanzaError('item-not-found').toResponse(iq_elt) + error_elt = jabber_error.StanzaError("item-not-found").toResponse(iq_elt) client.send(error_elt) return - with open(metadata['path']) as f: + with open(metadata["path"]) as f: data = f.read() - result_elt = xmlstream.toResponse(iq_elt, 'result') - data_elt = result_elt.addElement((NS_BOB, 'data'), content = data.encode('base64')) - data_elt[u'cid'] = cid - data_elt[u'type'] = metadata[u'mime_type'] - data_elt[u'max-age'] = unicode(int(max(0, metadata['eol'] - time.time()))) + result_elt = xmlstream.toResponse(iq_elt, "result") + data_elt = result_elt.addElement((NS_BOB, "data"), content=data.encode("base64")) + data_elt[u"cid"] = cid + data_elt[u"type"] = metadata[u"mime_type"] + data_elt[u"max-age"] = unicode(int(max(0, metadata["eol"] - time.time()))) client.send(result_elt) def _getFile(self, peer_jid_s, cid, profile): @@ -207,13 +212,13 @@ """ file_path = client.cache.getFilePath(cid) if file_path is not None: - # file is in cache + # file is in cache return defer.succeed(file_path) else: # file not in cache, is it given locally? if parent_elt is not None: - for data_elt in parent_elt.elements(NS_BOB, u'data'): - if data_elt.getAttribute('cid') == cid: + for data_elt in parent_elt.elements(NS_BOB, u"data"): + if data_elt.getAttribute("cid") == cid: return defer.succeed(self.dumpData(client.cache, data_elt, cid)) # cid not found locally, we need to request it @@ -230,10 +235,12 @@ def connectionInitialized(self): if self.parent.is_component: - self.xmlstream.addObserver(IQ_BOB_REQUEST, self.plugin_parent.onComponentRequest, client=self.parent) + self.xmlstream.addObserver( + IQ_BOB_REQUEST, self.plugin_parent.onComponentRequest, client=self.parent + ) - def getDiscoInfo(self, requestor, target, nodeIdentifier=''): + def getDiscoInfo(self, requestor, target, nodeIdentifier=""): return [disco.DiscoFeature(NS_BOB)] - def getDiscoItems(self, requestor, target, nodeIdentifier=''): + def getDiscoItems(self, requestor, target, nodeIdentifier=""): return []