From 7abf8c60819d5749e6225b371df51a9c5f1ea8e9 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Batuhan=20Ta=C5=9Fkaya?=
 <47358913+isidentical@users.noreply.github.com>
Date: Tue, 21 May 2019 23:27:36 +0300
Subject: [PATCH] bpo-25652: Fix __rmod__ of UserString (GH-13326)

The ``__rmod__`` method of ``collections.UserString`` class had a bug that made it unusable.


https://bugs.python.org/issue25652
---
 Lib/collections/__init__.py                          |  5 ++---
 Lib/test/test_userstring.py                          | 12 ++++++++++++
 .../Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst |  1 +
 3 files changed, 15 insertions(+), 3 deletions(-)
 create mode 100644 Misc/NEWS.d/next/Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst

diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 960d82a5dc..cb7f1bb1fc 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -1214,9 +1214,8 @@ class UserString(_collections_abc.Sequence):
     __rmul__ = __mul__
     def __mod__(self, args):
         return self.__class__(self.data % args)
-    def __rmod__(self, format):
-        return self.__class__(format % args)
-
+    def __rmod__(self, template):
+        return self.__class__(str(template) % self)
     # the following methods are defined in alphabetical order:
     def capitalize(self): return self.__class__(self.data.capitalize())
     def casefold(self):
diff --git a/Lib/test/test_userstring.py b/Lib/test/test_userstring.py
index 71528223d3..19b0acfc76 100644
--- a/Lib/test/test_userstring.py
+++ b/Lib/test/test_userstring.py
@@ -39,6 +39,18 @@ class UserStringTest(
         # we don't fix the arguments, because UserString can't cope with it
         getattr(object, methodname)(*args)
 
+    def test_rmod(self):
+        class ustr2(UserString):
+            pass
+
+        class ustr3(ustr2):
+            def __rmod__(self, other):
+                return super().__rmod__(other)
+
+        fmt2 = ustr2('value is %s')
+        str3 = ustr3('TEST')
+        self.assertEqual(fmt2 % str3, 'value is TEST')
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst b/Misc/NEWS.d/next/Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst
new file mode 100644
index 0000000000..421fccfe8c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst
@@ -0,0 +1 @@
+Fix bug in ``__rmod__`` of ``UserString`` - by Batuhan Taskaya.
-- 
2.49.0