From 5e2d820308a0a78212efb6dadfdc7cbe02b7cbec Mon Sep 17 00:00:00 2001
From: Ran Benita <ran@unusedvar.com>
Date: Wed, 29 Apr 2020 15:54:58 +0300
Subject: [PATCH] terminalwriter: fix lints

---
 src/_pytest/_io/terminalwriter.py | 68 ++++++++++++-------------------
 1 file changed, 27 insertions(+), 41 deletions(-)

diff --git a/src/_pytest/_io/terminalwriter.py b/src/_pytest/_io/terminalwriter.py
index aeb5c110d..609d4418c 100644
--- a/src/_pytest/_io/terminalwriter.py
+++ b/src/_pytest/_io/terminalwriter.py
@@ -1,16 +1,13 @@
 """Helper functions for writing to terminals and files."""
-import sys
 import os
+import shutil
+import sys
 import unicodedata
+from io import StringIO
 
-import py
-from py.builtin import text, bytes
 
 # This code was initially copied from py 1.8.1, file _io/terminalwriter.py.
 
-py3k = sys.version_info[0] >= 3
-py33 = sys.version_info >= (3, 3)
-
 
 win32_and_ctypes = False
 colorama = None
@@ -20,35 +17,24 @@ if sys.platform == "win32":
     except ImportError:
         try:
             import ctypes
-
-            win32_and_ctypes = True
         except ImportError:
             pass
+        else:
+            win32_and_ctypes = True
 
 
 def _getdimensions():
-    if py33:
-        import shutil
-
-        size = shutil.get_terminal_size()
-        return size.lines, size.columns
-    else:
-        import termios
-        import fcntl
-        import struct
-
-        call = fcntl.ioctl(1, termios.TIOCGWINSZ, "\000" * 8)
-        height, width = struct.unpack("hhhh", call)[:2]
-        return height, width
+    size = shutil.get_terminal_size()
+    return size.lines, size.columns
 
 
 def get_terminal_width():
     width = 0
     try:
         _, width = _getdimensions()
-    except py.builtin._sysex:
+    except (KeyboardInterrupt, SystemExit, MemoryError, GeneratorExit):
         raise
-    except:
+    except BaseException:
         # pass to fallback below
         pass
 
@@ -150,7 +136,7 @@ def should_do_markup(file):
     )
 
 
-class TerminalWriter(object):
+class TerminalWriter:
     _esctable = dict(
         black=30,
         red=31,
@@ -178,12 +164,10 @@ class TerminalWriter(object):
     def __init__(self, file=None, stringio=False, encoding=None):
         if file is None:
             if stringio:
-                self.stringio = file = py.io.TextIO()
+                self.stringio = file = StringIO()
             else:
                 from sys import stdout as file
-        elif py.builtin.callable(file) and not (
-            hasattr(file, "write") and hasattr(file, "flush")
-        ):
+        elif callable(file) and not (hasattr(file, "write") and hasattr(file, "flush")):
             file = WriteFile(file, encoding=encoding)
         if hasattr(file, "isatty") and file.isatty() and colorama:
             file = colorama.AnsiToWin32(file).stream
@@ -236,7 +220,7 @@ class TerminalWriter(object):
         esc = []
         for name in kw:
             if name not in self._esctable:
-                raise ValueError("unknown markup: %r" % (name,))
+                raise ValueError("unknown markup: {!r}".format(name))
             if kw[name]:
                 esc.append(self._esctable[name])
         return self._escaped(text, tuple(esc))
@@ -259,7 +243,7 @@ class TerminalWriter(object):
             #         N <= (fullwidth - len(title) - 2) // (2*len(sepchar))
             N = max((fullwidth - len(title) - 2) // (2 * len(sepchar)), 1)
             fill = sepchar * N
-            line = "%s %s %s" % (fill, title, fill)
+            line = "{} {} {}".format(fill, title, fill)
         else:
             # we want len(sepchar)*N <= fullwidth
             # i.e.    N <= fullwidth // len(sepchar)
@@ -274,8 +258,8 @@ class TerminalWriter(object):
 
     def write(self, msg, **kw):
         if msg:
-            if not isinstance(msg, (bytes, text)):
-                msg = text(msg)
+            if not isinstance(msg, (bytes, str)):
+                msg = str(msg)
 
             self._update_chars_on_current_line(msg)
 
@@ -319,8 +303,8 @@ class TerminalWriter(object):
 class Win32ConsoleWriter(TerminalWriter):
     def write(self, msg, **kw):
         if msg:
-            if not isinstance(msg, (bytes, text)):
-                msg = text(msg)
+            if not isinstance(msg, (bytes, str)):
+                msg = str(msg)
 
             self._update_chars_on_current_line(msg)
 
@@ -350,7 +334,7 @@ class Win32ConsoleWriter(TerminalWriter):
                 SetConsoleTextAttribute(handle, oldcolors)
 
 
-class WriteFile(object):
+class WriteFile:
     def __init__(self, writemethod, encoding=None):
         self.encoding = encoding
         self._writemethod = writemethod
@@ -365,9 +349,11 @@ class WriteFile(object):
 
 
 if win32_and_ctypes:
-    TerminalWriter = Win32ConsoleWriter
-    import ctypes
+    import ctypes  # noqa: F811
     from ctypes import wintypes
+    from ctypes import windll  # type: ignore[attr-defined] # noqa: F821
+
+    TerminalWriter = Win32ConsoleWriter  # type: ignore[misc] # noqa: F821
 
     # ctypes access to the Windows console
     STD_OUTPUT_HANDLE = -11
@@ -407,18 +393,18 @@ if win32_and_ctypes:
             ("dwMaximumWindowSize", COORD),
         ]
 
-    _GetStdHandle = ctypes.windll.kernel32.GetStdHandle
+    _GetStdHandle = windll.kernel32.GetStdHandle
     _GetStdHandle.argtypes = [wintypes.DWORD]
     _GetStdHandle.restype = wintypes.HANDLE
 
     def GetStdHandle(kind):
         return _GetStdHandle(kind)
 
-    SetConsoleTextAttribute = ctypes.windll.kernel32.SetConsoleTextAttribute
+    SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
     SetConsoleTextAttribute.argtypes = [wintypes.HANDLE, wintypes.WORD]
     SetConsoleTextAttribute.restype = wintypes.BOOL
 
-    _GetConsoleScreenBufferInfo = ctypes.windll.kernel32.GetConsoleScreenBufferInfo
+    _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
     _GetConsoleScreenBufferInfo.argtypes = [
         wintypes.HANDLE,
         ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO),
@@ -430,7 +416,7 @@ if win32_and_ctypes:
         _GetConsoleScreenBufferInfo(handle, ctypes.byref(info))
         return info
 
-    def _getdimensions():
+    def _getdimensions():  # noqa: F811
         handle = GetStdHandle(STD_OUTPUT_HANDLE)
         info = GetConsoleInfo(handle)
         # Substract one from the width, otherwise the cursor wraps