Patchwork get-with-headers: use bytes stdout thoroughly

login
register
mail settings
Submitter Yuya Nishihara
Date March 2, 2018, 7:07 p.m.
Message ID <b71dad3502643ade9b01.1520017679@mimosa>
Download mbox | patch
Permalink /patch/28705/
State Accepted
Headers show

Comments

Yuya Nishihara - March 2, 2018, 7:07 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1520016631 18000
#      Fri Mar 02 13:50:31 2018 -0500
# Node ID b71dad3502643ade9b01166ab6657d216c46c221
# Parent  45f149bf08d12750cc4993fd3d4e6f1bb999e8d5
get-with-headers: use bytes stdout thoroughly

On Python 3, sys.stdout.buffer is backed by a separate buffer from sys.stdout.
We should choose one.
Gregory Szorc - March 2, 2018, 7:38 p.m.
On Fri, Mar 2, 2018 at 2:07 PM, Yuya Nishihara <yuya@tcha.org> wrote:

> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1520016631 18000
> #      Fri Mar 02 13:50:31 2018 -0500
> # Node ID b71dad3502643ade9b01166ab6657d216c46c221
> # Parent  45f149bf08d12750cc4993fd3d4e6f1bb999e8d5
> get-with-headers: use bytes stdout thoroughly
>

Queued, thanks.


>
> On Python 3, sys.stdout.buffer is backed by a separate buffer from
> sys.stdout.
> We should choose one.
>
> diff --git a/tests/get-with-headers.py b/tests/get-with-headers.py
> --- a/tests/get-with-headers.py
> +++ b/tests/get-with-headers.py
> @@ -3,7 +3,7 @@
>  """This does HTTP GET requests given a host:port and path and returns
>  a subset of the headers plus the body of the result."""
>
> -from __future__ import absolute_import, print_function
> +from __future__ import absolute_import
>
>  import argparse
>  import json
> @@ -23,6 +23,8 @@ try:
>  except ImportError:
>      pass
>
> +stdout = getattr(sys.stdout, 'buffer', sys.stdout)
> +
>  parser = argparse.ArgumentParser()
>  parser.add_argument('--twice', action='store_true')
>  parser.add_argument('--headeronly', action='store_true')
> @@ -62,21 +64,23 @@ def request(host, path, show):
>      conn = httplib.HTTPConnection(host)
>      conn.request("GET", '/' + path, None, headers)
>      response = conn.getresponse()
> -    print(response.status, response.reason)
> +    stdout.write(b'%d %s\n' % (response.status,
> +                               response.reason.encode('ascii')))
>      if show[:1] == ['-']:
>          show = sorted(h for h, v in response.getheaders()
>                        if h.lower() not in show)
>      for h in [h.lower() for h in show]:
>          if response.getheader(h, None) is not None:
> -            print("%s: %s" % (h, response.getheader(h)))
> +            stdout.write(b"%s: %s\n" % (h.encode('ascii'),
> +                                        response.getheader(h).encode('
> ascii')))
>      if not headeronly:
> -        print()
> +        stdout.write(b'\n')
>          data = response.read()
>
>          if args.bodyfile:
>              bodyfh = open(args.bodyfile, 'wb')
>          else:
> -            bodyfh = getattr(sys.stdout, 'buffer', sys.stdout)
> +            bodyfh = stdout
>
>          # Pretty print JSON. This also has the beneficial side-effect
>          # of verifying emitted JSON is well-formed.
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>

Patch

diff --git a/tests/get-with-headers.py b/tests/get-with-headers.py
--- a/tests/get-with-headers.py
+++ b/tests/get-with-headers.py
@@ -3,7 +3,7 @@ 
 """This does HTTP GET requests given a host:port and path and returns
 a subset of the headers plus the body of the result."""
 
-from __future__ import absolute_import, print_function
+from __future__ import absolute_import
 
 import argparse
 import json
@@ -23,6 +23,8 @@  try:
 except ImportError:
     pass
 
+stdout = getattr(sys.stdout, 'buffer', sys.stdout)
+
 parser = argparse.ArgumentParser()
 parser.add_argument('--twice', action='store_true')
 parser.add_argument('--headeronly', action='store_true')
@@ -62,21 +64,23 @@  def request(host, path, show):
     conn = httplib.HTTPConnection(host)
     conn.request("GET", '/' + path, None, headers)
     response = conn.getresponse()
-    print(response.status, response.reason)
+    stdout.write(b'%d %s\n' % (response.status,
+                               response.reason.encode('ascii')))
     if show[:1] == ['-']:
         show = sorted(h for h, v in response.getheaders()
                       if h.lower() not in show)
     for h in [h.lower() for h in show]:
         if response.getheader(h, None) is not None:
-            print("%s: %s" % (h, response.getheader(h)))
+            stdout.write(b"%s: %s\n" % (h.encode('ascii'),
+                                        response.getheader(h).encode('ascii')))
     if not headeronly:
-        print()
+        stdout.write(b'\n')
         data = response.read()
 
         if args.bodyfile:
             bodyfh = open(args.bodyfile, 'wb')
         else:
-            bodyfh = getattr(sys.stdout, 'buffer', sys.stdout)
+            bodyfh = stdout
 
         # Pretty print JSON. This also has the beneficial side-effect
         # of verifying emitted JSON is well-formed.