summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBatuhan Taşkaya <47358913+isidentical@users.noreply.github.com>2019-05-21 20:27:36 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-05-21 20:27:36 (GMT)
commit7abf8c60819d5749e6225b371df51a9c5f1ea8e9 (patch)
treef8051a2d600e0faeb7e025e031c26a4287b7e5ef
parent565b4f1ac7304d1e690c404ca8316f383ba60862 (diff)
downloadcpython-7abf8c60819d5749e6225b371df51a9c5f1ea8e9.zip
cpython-7abf8c60819d5749e6225b371df51a9c5f1ea8e9.tar.gz
cpython-7abf8c60819d5749e6225b371df51a9c5f1ea8e9.tar.bz2
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
-rw-r--r--Lib/collections/__init__.py5
-rw-r--r--Lib/test/test_userstring.py12
-rw-r--r--Misc/NEWS.d/next/Library/2019-05-14-21-39-52.bpo-25652.xLw42k.rst1
3 files changed, 15 insertions, 3 deletions
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 960d82a..cb7f1bb 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 7152822..19b0acf 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 0000000..421fccf
--- /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.