(Merge 3.2) Issue #10570: curses.putp() is now expecting a byte string, instead
of a Unicode string.

This is an incompatible change, but putp() is used to emit terminfo commands,
which are bytes strings, not Unicode strings.
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index ccbbc23..72be3e7 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -183,7 +183,7 @@
     win = curses.newwin(5,5)
     win = curses.newwin(5,5, 1,1)
     curses.nl() ; curses.nl(1)
-    curses.putp('abc')
+    curses.putp(b'abc')
     curses.qiflush()
     curses.raw() ; curses.raw(1)
     curses.setsyx(5,5)
@@ -283,6 +283,7 @@
 def test_issue10570():
     b = curses.tparm(curses.tigetstr("cup"), 5, 3)
     assert type(b) is bytes
+    curses.putp(b)
 
 def main(stdscr):
     curses.savetty()
diff --git a/Misc/NEWS b/Misc/NEWS
index b46cea8..12b3447 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -353,8 +353,8 @@
 - Byte compilation in packaging is now isolated from the calling Python -B or
   -O options, instead of being disallowed under -B or buggy under -O.
 
-- Issue #10570: curses.tigetstr() is now expecting a byte string, instead of
-  a Unicode string.
+- Issue #10570: curses.putp() and curses.tigetstr() are now expecting a byte
+  string, instead of a Unicode string.
 
 - Issue #13295: http.server now produces valid HTML 4.01 strict.
 
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index cc42f4b..cfa5b7a 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -2418,7 +2418,8 @@
 {
     char *str;
 
-    if (!PyArg_ParseTuple(args,"s;str", &str)) return NULL;
+    if (!PyArg_ParseTuple(args,"y;str", &str))
+        return NULL;
     return PyCursesCheckERR(putp(str), "putp");
 }