Patchwork D2088: wireprototypes: move wire protocol response types to new module

login
register
mail settings
Submitter phabricator
Date Feb. 8, 2018, 5:21 a.m.
Message ID <42c5b3c81aacf837e1f17a61b256bbf8@localhost.localdomain>
Download mbox | patch
Permalink /patch/27487/
State Not Applicable
Headers show

Comments

phabricator - Feb. 8, 2018, 5:21 a.m.
indygreg updated this revision to Diff 5351.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2088?vs=5340&id=5351

REVISION DETAIL
  https://phab.mercurial-scm.org/D2088

AFFECTED FILES
  mercurial/wireproto.py
  mercurial/wireprotoserver.py
  mercurial/wireprototypes.py

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/wireprototypes.py b/mercurial/wireprototypes.py
new file mode 100644
--- /dev/null
+++ b/mercurial/wireprototypes.py
@@ -0,0 +1,61 @@ 
+# Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+class ooberror(object):
+    """wireproto reply: failure of a batch of operation
+
+    Something failed during a batch call. The error message is stored in
+    `self.message`.
+    """
+    def __init__(self, message):
+        self.message = message
+
+class pushres(object):
+    """wireproto reply: success with simple integer return
+
+    The call was successful and returned an integer contained in `self.res`.
+    """
+    def __init__(self, res, output):
+        self.res = res
+        self.output = output
+
+class pusherr(object):
+    """wireproto reply: failure
+
+    The call failed. The `self.res` attribute contains the error message.
+    """
+    def __init__(self, res, output):
+        self.res = res
+        self.output = output
+
+class streamres(object):
+    """wireproto reply: binary stream
+
+    The call was successful and the result is a stream.
+
+    Accepts a generator containing chunks of data to be sent to the client.
+
+    ``prefer_uncompressed`` indicates that the data is expected to be
+    uncompressable and that the stream should therefore use the ``none``
+    engine.
+    """
+    def __init__(self, gen=None, prefer_uncompressed=False):
+        self.gen = gen
+        self.prefer_uncompressed = prefer_uncompressed
+
+class streamreslegacy(object):
+    """wireproto reply: uncompressed binary stream
+
+    The call was successful and the result is a stream.
+
+    Accepts a generator containing chunks of data to be sent to the client.
+
+    Like ``streamres``, but sends an uncompressed data for "version 1" clients
+    using the application/mercurial-0.1 media type.
+    """
+    def __init__(self, gen=None):
+        self.gen = gen
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -20,6 +20,7 @@ 
     pycompat,
     util,
     wireproto,
+    wireprototypes,
 )
 
 stringio = util.stringio
@@ -273,11 +274,11 @@ 
     if isinstance(rsp, bytes):
         req.respond(HTTP_OK, HGTYPE, body=rsp)
         return []
-    elif isinstance(rsp, wireproto.streamres_legacy):
+    elif isinstance(rsp, wireprototypes.streamreslegacy):
         gen = rsp.gen
         req.respond(HTTP_OK, HGTYPE)
         return gen
-    elif isinstance(rsp, wireproto.streamres):
+    elif isinstance(rsp, wireprototypes.streamres):
         gen = rsp.gen
 
         # This code for compression should not be streamres specific. It
@@ -291,18 +292,18 @@ 
 
         req.respond(HTTP_OK, mediatype)
         return gen
-    elif isinstance(rsp, wireproto.pushres):
+    elif isinstance(rsp, wireprototypes.pushres):
         rsp = '%d\n%s' % (rsp.res, rsp.output)
         req.respond(HTTP_OK, HGTYPE, body=rsp)
         return []
-    elif isinstance(rsp, wireproto.pusherr):
+    elif isinstance(rsp, wireprototypes.pusherr):
         # This is the httplib workaround documented in _handlehttperror().
         req.drain()
 
         rsp = '0\n%s\n' % rsp.res
         req.respond(HTTP_OK, HGTYPE, body=rsp)
         return []
-    elif isinstance(rsp, wireproto.ooberror):
+    elif isinstance(rsp, wireprototypes.ooberror):
         rsp = rsp.message
         req.respond(HTTP_OK, HGERRTYPE, body=rsp)
         return []
@@ -434,16 +435,16 @@ 
 
             if isinstance(rsp, bytes):
                 _sshv1respondbytes(self._fout, rsp)
-            elif isinstance(rsp, wireproto.streamres):
+            elif isinstance(rsp, wireprototypes.streamres):
                 _sshv1respondstream(self._fout, rsp)
-            elif isinstance(rsp, wireproto.streamres_legacy):
+            elif isinstance(rsp, wireprototypes.streamreslegacy):
                 _sshv1respondstream(self._fout, rsp)
-            elif isinstance(rsp, wireproto.pushres):
+            elif isinstance(rsp, wireprototypes.pushres):
                 _sshv1respondbytes(self._fout, b'')
                 _sshv1respondbytes(self._fout, bytes(rsp.res))
-            elif isinstance(rsp, wireproto.pusherr):
+            elif isinstance(rsp, wireprototypes.pusherr):
                 _sshv1respondbytes(self._fout, rsp.res)
-            elif isinstance(rsp, wireproto.ooberror):
+            elif isinstance(rsp, wireprototypes.ooberror):
                 _sshv1respondooberror(self._fout, self._ui.ferr, rsp.message)
             else:
                 raise error.ProgrammingError('unhandled response type from '
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -31,11 +31,18 @@ 
     repository,
     streamclone,
     util,
+    wireprototypes,
 )
 
 urlerr = util.urlerr
 urlreq = util.urlreq
 
+ooberror = wireprototypes.ooberror
+pushres = wireprototypes.pushres
+pusherr = wireprototypes.pusherr
+streamres = wireprototypes.streamres
+streamres_legacy = wireprototypes.streamreslegacy
+
 bundle2requiredmain = _('incompatible Mercurial client; bundle2 required')
 bundle2requiredhint = _('see https://www.mercurial-scm.org/wiki/'
                         'IncompatibleClient')
@@ -477,60 +484,6 @@ 
 # server side
 
 # wire protocol command can either return a string or one of these classes.
-class streamres(object):
-    """wireproto reply: binary stream
-
-    The call was successful and the result is a stream.
-
-    Accepts a generator containing chunks of data to be sent to the client.
-
-    ``prefer_uncompressed`` indicates that the data is expected to be
-    uncompressable and that the stream should therefore use the ``none``
-    engine.
-    """
-    def __init__(self, gen=None, prefer_uncompressed=False):
-        self.gen = gen
-        self.prefer_uncompressed = prefer_uncompressed
-
-class streamres_legacy(object):
-    """wireproto reply: uncompressed binary stream
-
-    The call was successful and the result is a stream.
-
-    Accepts a generator containing chunks of data to be sent to the client.
-
-    Like ``streamres``, but sends an uncompressed data for "version 1" clients
-    using the application/mercurial-0.1 media type.
-    """
-    def __init__(self, gen=None):
-        self.gen = gen
-
-class pushres(object):
-    """wireproto reply: success with simple integer return
-
-    The call was successful and returned an integer contained in `self.res`.
-    """
-    def __init__(self, res, output):
-        self.res = res
-        self.output = output
-
-class pusherr(object):
-    """wireproto reply: failure
-
-    The call failed. The `self.res` attribute contains the error message.
-    """
-    def __init__(self, res, output):
-        self.res = res
-        self.output = output
-
-class ooberror(object):
-    """wireproto reply: failure of a batch of operation
-
-    Something failed during a batch call. The error message is stored in
-    `self.message`.
-    """
-    def __init__(self, message):
-        self.message = message
 
 def getdispatchrepo(repo, proto, command):
     """Obtain the repo used for processing wire protocol commands.