wireproto: use named arguments when passing around frame data
authorGregory Szorc <gregory.szorc@gmail.com>
Thu, 15 Mar 2018 16:09:58 -0700
changeset 37062 fe4c944f95bb
parent 37061 884a0c1604ad
child 37063 39304dd63589
wireproto: use named arguments when passing around frame data Named arguments is easier to reason about compared to positional arguments. Especially when you have many positional arguments. Differential Revision: https://phab.mercurial-scm.org/D2900
mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py	Thu Mar 15 16:03:14 2018 -0700
+++ b/mercurial/wireprotoframing.py	Thu Mar 15 16:09:58 2018 -0700
@@ -113,7 +113,7 @@
     flags = attr.ib()
     payload = attr.ib()
 
-def makeframe(requestid, frametype, frameflags, payload):
+def makeframe(requestid, typeid, flags, payload):
     """Assemble a frame into a byte array."""
     # TODO assert size of payload.
     frame = bytearray(FRAME_HEADER_SIZE + len(payload))
@@ -126,7 +126,7 @@
     l = struct.pack(r'<I', len(payload))
     frame[0:3] = l[0:3]
     struct.pack_into(r'<H', frame, 3, requestid)
-    frame[5] = (frametype << 4) | frameflags
+    frame[5] = (typeid << 4) | flags
     frame[6:] = payload
 
     return frame
@@ -166,7 +166,8 @@
 
     payload = util.unescapestr(payload)
 
-    return makeframe(requestid, frametype, finalflags, payload)
+    return makeframe(requestid=requestid, typeid=frametype,
+                     flags=finalflags, payload=payload)
 
 def parseheader(data):
     """Parse a unified framing protocol frame header from a buffer.
@@ -229,7 +230,8 @@
     if not flags:
         flags |= FLAG_COMMAND_NAME_EOS
 
-    yield makeframe(requestid, FRAME_TYPE_COMMAND_NAME, flags, cmd)
+    yield makeframe(requestid=requestid, typeid=FRAME_TYPE_COMMAND_NAME,
+                    flags=flags, payload=cmd)
 
     for i, k in enumerate(sorted(args)):
         v = args[k]
@@ -245,7 +247,10 @@
         payload[offset:offset + len(v)] = v
 
         flags = FLAG_COMMAND_ARGUMENT_EOA if last else 0
-        yield makeframe(requestid, FRAME_TYPE_COMMAND_ARGUMENT, flags, payload)
+        yield makeframe(requestid=requestid,
+                        typeid=FRAME_TYPE_COMMAND_ARGUMENT,
+                        flags=flags,
+                        payload=payload)
 
     if datafh:
         while True:
@@ -259,7 +264,10 @@
                 assert datafh.read(1) == b''
                 done = True
 
-            yield makeframe(requestid, FRAME_TYPE_COMMAND_DATA, flags, data)
+            yield makeframe(requestid=requestid,
+                            typeid=FRAME_TYPE_COMMAND_DATA,
+                            flags=flags,
+                            payload=data)
 
             if done:
                 break
@@ -273,8 +281,10 @@
 
     # Simple case of a single frame.
     if len(data) <= maxframesize:
-        yield makeframe(requestid, FRAME_TYPE_BYTES_RESPONSE,
-                        FLAG_BYTES_RESPONSE_EOS, data)
+        yield makeframe(requestid=requestid,
+                        typeid=FRAME_TYPE_BYTES_RESPONSE,
+                        flags=FLAG_BYTES_RESPONSE_EOS,
+                        payload=data)
         return
 
     offset = 0
@@ -288,7 +298,10 @@
         else:
             flags = FLAG_BYTES_RESPONSE_CONTINUATION
 
-        yield makeframe(requestid, FRAME_TYPE_BYTES_RESPONSE, flags, chunk)
+        yield makeframe(requestid=requestid,
+                        typeid=FRAME_TYPE_BYTES_RESPONSE,
+                        flags=flags,
+                        payload=chunk)
 
         if done:
             break
@@ -303,7 +316,10 @@
     if application:
         flags |= FLAG_ERROR_RESPONSE_APPLICATION
 
-    yield makeframe(requestid, FRAME_TYPE_ERROR_RESPONSE, flags, msg)
+    yield makeframe(requestid=requestid,
+                    typeid=FRAME_TYPE_ERROR_RESPONSE,
+                    flags=flags,
+                    payload=msg)
 
 def createtextoutputframe(requestid, atoms):
     """Create a text output frame to render text to people.
@@ -371,7 +387,10 @@
     if bytesleft < 0:
         raise ValueError('cannot encode data in a single frame')
 
-    yield makeframe(requestid, FRAME_TYPE_TEXT_OUTPUT, 0, b''.join(atomchunks))
+    yield makeframe(requestid=requestid,
+                    typeid=FRAME_TYPE_TEXT_OUTPUT,
+                    flags=0,
+                    payload=b''.join(atomchunks))
 
 class serverreactor(object):
     """Holds state of a server handling frame-based protocol requests.