diff sat/plugins/plugin_xep_0363.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_0363.py	Wed Jun 27 07:51:29 2018 +0200
+++ b/sat/plugins/plugin_xep_0363.py	Wed Jun 27 20:14:46 2018 +0200
@@ -20,6 +20,7 @@
 from sat.core.i18n import _
 from sat.core.constants import Const as C
 from sat.core.log import getLogger
+
 log = getLogger(__name__)
 from sat.core import exceptions
 from wokkel import disco, iwokkel
@@ -49,18 +50,17 @@
     C.PI_DEPENDENCIES: ["FILE", "UPLOAD"],
     C.PI_MAIN: "XEP_0363",
     C.PI_HANDLER: "yes",
-    C.PI_DESCRIPTION: _("""Implementation of HTTP File Upload""")
+    C.PI_DESCRIPTION: _("""Implementation of HTTP File Upload"""),
 }
 
-NS_HTTP_UPLOAD = 'urn:xmpp:http:upload'
+NS_HTTP_UPLOAD = "urn:xmpp:http:upload"
 
 
-Slot = namedtuple('Slot', ['put', 'get'])
+Slot = namedtuple("Slot", ["put", "get"])
 
 
 @implementer(IOpenSSLClientConnectionCreator)
 class NoCheckConnectionCreator(object):
-
     def __init__(self, hostname, ctx):
         self._ctx = ctx
 
@@ -80,53 +80,91 @@
     """
 
     def creatorForNetloc(self, hostname, port):
-        log.warning(u"TLS check disabled for {host} on port {port}".format(host=hostname, port=port))
+        log.warning(
+            u"TLS check disabled for {host} on port {port}".format(
+                host=hostname, port=port
+            )
+        )
         certificateOptions = ssl.CertificateOptions(trustRoot=None)
         return NoCheckConnectionCreator(hostname, certificateOptions.getContext())
 
 
 class XEP_0363(object):
-
     def __init__(self, host):
         log.info(_("plugin HTTP File Upload initialization"))
         self.host = host
-        host.bridge.addMethod("fileHTTPUpload", ".plugin", in_sign='sssbs', out_sign='', method=self._fileHTTPUpload)
-        host.bridge.addMethod("fileHTTPUploadGetSlot", ".plugin", in_sign='sisss', out_sign='(ss)', method=self._getSlot, async=True)
-        host.plugins['UPLOAD'].register(u"HTTP Upload", self.getHTTPUploadEntity, self.fileHTTPUpload)
+        host.bridge.addMethod(
+            "fileHTTPUpload",
+            ".plugin",
+            in_sign="sssbs",
+            out_sign="",
+            method=self._fileHTTPUpload,
+        )
+        host.bridge.addMethod(
+            "fileHTTPUploadGetSlot",
+            ".plugin",
+            in_sign="sisss",
+            out_sign="(ss)",
+            method=self._getSlot,
+            async=True,
+        )
+        host.plugins["UPLOAD"].register(
+            u"HTTP Upload", self.getHTTPUploadEntity, self.fileHTTPUpload
+        )
 
     def getHandler(self, client):
         return XEP_0363_handler()
 
     @defer.inlineCallbacks
     def getHTTPUploadEntity(self, upload_jid=None, profile=C.PROF_KEY_NONE):
-         """Get HTTP upload capable entity
+        """Get HTTP upload capable entity
 
          upload_jid is checked, then its components
          @param upload_jid(None, jid.JID): entity to check
          @return(D(jid.JID)): first HTTP upload capable entity
          @raise exceptions.NotFound: no entity found
          """
-         client = self.host.getClient(profile)
-         try:
-             entity = client.http_upload_service
-         except AttributeError:
-             found_entities = yield self.host.findFeaturesSet(client, (NS_HTTP_UPLOAD,))
-             try:
-                 entity = client.http_upload_service = iter(found_entities).next()
-             except StopIteration:
-                 entity = client.http_upload_service = None
+        client = self.host.getClient(profile)
+        try:
+            entity = client.http_upload_service
+        except AttributeError:
+            found_entities = yield self.host.findFeaturesSet(client, (NS_HTTP_UPLOAD,))
+            try:
+                entity = client.http_upload_service = iter(found_entities).next()
+            except StopIteration:
+                entity = client.http_upload_service = None
+
+        if entity is None:
+            raise failure.Failure(exceptions.NotFound(u"No HTTP upload entity found"))
+
+        defer.returnValue(entity)
 
-         if entity is None:
-             raise failure.Failure(exceptions.NotFound(u'No HTTP upload entity found'))
-
-         defer.returnValue(entity)
-
-    def _fileHTTPUpload(self, filepath, filename='', upload_jid='', ignore_tls_errors=False, profile=C.PROF_KEY_NONE):
+    def _fileHTTPUpload(
+        self,
+        filepath,
+        filename="",
+        upload_jid="",
+        ignore_tls_errors=False,
+        profile=C.PROF_KEY_NONE,
+    ):
         assert os.path.isabs(filepath) and os.path.isfile(filepath)
-        progress_id_d, dummy = self.fileHTTPUpload(filepath, filename or None, jid.JID(upload_jid) if upload_jid else None, {'ignore_tls_errors': ignore_tls_errors}, profile)
+        progress_id_d, dummy = self.fileHTTPUpload(
+            filepath,
+            filename or None,
+            jid.JID(upload_jid) if upload_jid else None,
+            {"ignore_tls_errors": ignore_tls_errors},
+            profile,
+        )
         return progress_id_d
 
-    def fileHTTPUpload(self, filepath, filename=None, upload_jid=None, options=None, profile=C.PROF_KEY_NONE):
+    def fileHTTPUpload(
+        self,
+        filepath,
+        filename=None,
+        upload_jid=None,
+        options=None,
+        profile=C.PROF_KEY_NONE,
+    ):
         """upload a file through HTTP
 
         @param filepath(str): absolute path of the file
@@ -141,14 +179,20 @@
         """
         if options is None:
             options = {}
-        ignore_tls_errors = options.get('ignore_tls_errors', False)
+        ignore_tls_errors = options.get("ignore_tls_errors", False)
         client = self.host.getClient(profile)
         filename = filename or os.path.basename(filepath)
         size = os.path.getsize(filepath)
         progress_id_d = defer.Deferred()
         download_d = defer.Deferred()
         d = self.getSlot(client, filename, size, upload_jid=upload_jid)
-        d.addCallbacks(self._getSlotCb, self._getSlotEb, (client, progress_id_d, download_d, filepath, size, ignore_tls_errors), None, (client, progress_id_d, download_d))
+        d.addCallbacks(
+            self._getSlotCb,
+            self._getSlotEb,
+            (client, progress_id_d, download_d, filepath, size, ignore_tls_errors),
+            None,
+            (client, progress_id_d, download_d),
+        )
         return progress_id_d, download_d
 
     def _getSlotEb(self, fail, client, progress_id_d, download_d):
@@ -157,7 +201,9 @@
         progress_id_d.errback(fail)
         download_d.errback(fail)
 
-    def _getSlotCb(self, slot, client, progress_id_d, download_d, path, size, ignore_tls_errors=False):
+    def _getSlotCb(
+        self, slot, client, progress_id_d, download_d, path, size, ignore_tls_errors=False
+    ):
         """Called when slot is received, try to do the upload
 
         @param slot(Slot): slot instance with the get and put urls
@@ -169,15 +215,28 @@
         @return (tuple
         """
         log.debug(u"Got upload slot: {}".format(slot))
-        sat_file = self.host.plugins['FILE'].File(self.host, client, path, size=size, auto_end_signals=False)
+        sat_file = self.host.plugins["FILE"].File(
+            self.host, client, path, size=size, auto_end_signals=False
+        )
         progress_id_d.callback(sat_file.uid)
         file_producer = http_client.FileBodyProducer(sat_file)
         if ignore_tls_errors:
             agent = http_client.Agent(reactor, NoCheckContextFactory())
         else:
             agent = http_client.Agent(reactor)
-        d = agent.request('PUT', slot.put.encode('utf-8'), http_headers.Headers({'User-Agent': [C.APP_NAME.encode('utf-8')]}), file_producer)
-        d.addCallbacks(self._uploadCb, self._uploadEb, (sat_file, slot, download_d), None, (sat_file, download_d))
+        d = agent.request(
+            "PUT",
+            slot.put.encode("utf-8"),
+            http_headers.Headers({"User-Agent": [C.APP_NAME.encode("utf-8")]}),
+            file_producer,
+        )
+        d.addCallbacks(
+            self._uploadCb,
+            self._uploadEb,
+            (sat_file, slot, download_d),
+            None,
+            (sat_file, download_d),
+        )
         return d
 
     def _uploadCb(self, dummy, sat_file, slot, download_d):
@@ -188,7 +247,7 @@
         @param slot(Slot): put/get urls
         """
         log.info(u"HTTP upload finished")
-        sat_file.progressFinished({'url': slot.get})
+        sat_file.progressFinished({"url": slot.get})
         download_d.callback(slot.get)
 
     def _uploadEb(self, fail, sat_file, download_d):
@@ -216,15 +275,17 @@
         @param iq_elt(domish.Element): <IQ/> result as specified in XEP-0363
         """
         try:
-            slot_elt = iq_elt.elements(NS_HTTP_UPLOAD, 'slot').next()
-            put_url = unicode(slot_elt.elements(NS_HTTP_UPLOAD, 'put').next())
-            get_url = unicode(slot_elt.elements(NS_HTTP_UPLOAD, 'get').next())
+            slot_elt = iq_elt.elements(NS_HTTP_UPLOAD, "slot").next()
+            put_url = unicode(slot_elt.elements(NS_HTTP_UPLOAD, "put").next())
+            get_url = unicode(slot_elt.elements(NS_HTTP_UPLOAD, "get").next())
         except StopIteration:
             raise exceptions.DataError(u"Incorrect stanza received from server")
         slot = Slot(put=put_url, get=get_url)
         return slot
 
-    def _getSlot(self, filename, size, content_type, upload_jid, profile_key=C.PROF_KEY_NONE):
+    def _getSlot(
+        self, filename, size, content_type, upload_jid, profile_key=C.PROF_KEY_NONE
+    ):
         """Get a upload slot
 
         This method can be used when uploading is done by the frontend
@@ -234,9 +295,11 @@
         @param content_type(unicode, None): MIME type of the content
             empty string or None to guess automatically
         """
-        filename = filename.replace('/', '_')
+        filename = filename.replace("/", "_")
         client = self.host.getClient(profile_key)
-        return  self.getSlot(client, filename, size, content_type or None, upload_jid or None)
+        return self.getSlot(
+            client, filename, size, content_type or None, upload_jid or None
+        )
 
     def getSlot(self, client, filename, size, content_type=None, upload_jid=None):
         """Get a slot (i.e. download/upload links)
@@ -261,19 +324,25 @@
                 upload_jid = client.http_upload_service
             except AttributeError:
                 d = self.getHTTPUploadEntity(profile=client.profile)
-                d.addCallback(lambda found_entity: self.getSlot(client, filename, size, content_type, found_entity))
+                d.addCallback(
+                    lambda found_entity: self.getSlot(
+                        client, filename, size, content_type, found_entity
+                    )
+                )
                 return d
             else:
                 if upload_jid is None:
-                    raise failure.Failure(exceptions.NotFound(u'No HTTP upload entity found'))
+                    raise failure.Failure(
+                        exceptions.NotFound(u"No HTTP upload entity found")
+                    )
 
-        iq_elt = client.IQ('get')
-        iq_elt['to'] = upload_jid.full()
-        request_elt = iq_elt.addElement((NS_HTTP_UPLOAD, 'request'))
-        request_elt.addElement('filename', content=filename)
-        request_elt.addElement('size', content=unicode(size))
+        iq_elt = client.IQ("get")
+        iq_elt["to"] = upload_jid.full()
+        request_elt = iq_elt.addElement((NS_HTTP_UPLOAD, "request"))
+        request_elt.addElement("filename", content=filename)
+        request_elt.addElement("size", content=unicode(size))
         if content_type is not None:
-            request_elt.addElement('content-type', content=content_type)
+            request_elt.addElement("content-type", content=content_type)
 
         d = iq_elt.send()
         d.addCallback(self._gotSlot, client)
@@ -284,8 +353,8 @@
 class XEP_0363_handler(XMPPHandler):
     implements(iwokkel.IDisco)
 
-    def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
+    def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
         return [disco.DiscoFeature(NS_HTTP_UPLOAD)]
 
-    def getDiscoItems(self, requestor, target, nodeIdentifier=''):
+    def getDiscoItems(self, requestor, target, nodeIdentifier=""):
         return []